MFC 界面图片加载和布局:3 行 4 列居中显示,根据屏幕分辨率调整大小
您可以通过以下步骤在 MFC 界面上实现图片加载和布局,并根据屏幕分辨率调整图片大小:
- 创建一个 MFC 对话框应用程序。
- 在对话框资源上添加一个静态文本控件,用于显示图片。
- 在对话框类的 OnInitDialog() 函数中进行图片加载和布局。
- 在 OnSize() 函数中根据屏幕分辨率调整图片大小和位置。
下面是示例代码:
// MyDialog.h
#pragma once
class CMyDialog : public CDialogEx
{
public:
CMyDialog(CWnd* pParent = nullptr); // 标准构造函数声明
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MYDIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HBITMAP m_hBitmap;
CStatic m_StaticImage;
int m_nNumRows;
int m_nNumCols;
int m_nImageSpacing;
// 辅助方法
protected:
void LoadBitmap();
void AdjustImageSizeAndPosition();
// 消息映射
protected:
DECLARE_MESSAGE_MAP()
afx_msg BOOL OnInitDialog();
afx_msg void OnSize(UINT nType, int cx, int cy);
};
// MyDialog.cpp
#include "MyDialog.h"
#include "resource.h"
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
ON_WM_SIZE()
END_MESSAGE_MAP()
CMyDialog::CMyDialog(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MYDIALOG, pParent)
{
m_hBitmap = NULL;
m_nNumRows = 3;
m_nNumCols = 4;
m_nImageSpacing = 10;
}
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC_IMAGE, m_StaticImage);
}
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 加载位图
LoadBitmap();
// 调整图片大小和位置
AdjustImageSizeAndPosition();
return TRUE;
}
void CMyDialog::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
// 调整图片大小和位置
AdjustImageSizeAndPosition();
}
void CMyDialog::LoadBitmap()
{
m_hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE);
}
void CMyDialog::AdjustImageSizeAndPosition()
{
// 获取对话框客户区的大小
CRect rectClient;
GetClientRect(&rectClient);
// 计算每个图片的大小
int nImageWidth = (rectClient.Width() - m_nImageSpacing * (m_nNumCols + 1)) / m_nNumCols;
int nImageHeight = (rectClient.Height() - m_nImageSpacing * (m_nNumRows + 1)) / m_nNumRows;
// 计算图片的起始位置
int nStartX = (rectClient.Width() - nImageWidth * m_nNumCols - m_nImageSpacing * (m_nNumCols - 1)) / 2;
int nStartY = (rectClient.Height() - nImageHeight * m_nNumRows - m_nImageSpacing * (m_nNumRows - 1)) / 2;
// 设置图片的位置和大小
m_StaticImage.MoveWindow(nStartX, nStartY, nImageWidth, nImageHeight, TRUE);
// 设置图片的位图
m_StaticImage.SetBitmap(m_hBitmap);
}
在上述代码中,您需要将资源ID IDB_BITMAP1 替换为您自己的位图资源ID,以便加载正确的位图。然后,在 IDD_MYDIALOG 对话框资源上添加一个静态文本控件,并将其ID设置为 IDC_STATIC_IMAGE。
这样,当对话框创建时,将加载位图并调整图片的大小和位置。当对话框的大小改变时,也会自动调整图片的大小和位置。
请注意,上述代码仅为参考,您可以根据实际需求进行修改和调整。
原文地址: https://www.cveoy.top/t/topic/phe9 著作权归作者所有。请勿转载和采集!