2024年4月29日发(作者:)

对话框的大小变化后,假若对话框上的控件大小不变化,看起来会比较难看。下面就

介绍怎么让对话框上的控件随着对话框的大小的变化自动调整。

首先明确的是Windows有一个WM_SIZE消息响应函数,这个函数在对话框大小发

生变化的时候调用,所以我们可以记录下原来对话框的大小,还有当前对话框的大小(这

个不用自己算,系统已给出),然后根据控件做出相应比例的调整。

比如原来对话框大小为a,现在为b,原来控件大小为c,那么现在的控件大小应该为

c*b/a;(注意a不能为0)。

看实例:(黑体字为添加的代码!!)

假设对话框类为CMyDlg类,那么首先设置一个变量

CRect m_rect; //用于保存原对话框大小

那么在对话框创建的时候先获得对话框的大小

BOOL CMyDlg::OnInitDialog()

{

.........................

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

GetClientRect(&m_rect); //获取对话框的大小

return TRUE; // return TRUE unless you set the focus to a control

}

然后再手动添加一个函数,用以实现具体的变化

void CMyDlg::ChangeSize(UINT nID, int x, int y) //nID为控件ID,x,y分别为对

话框的当前长和宽

{

CWnd *pWnd;

pWnd=GetDlgItem(nID);

if(pWnd!=NULL) //判断是否为空,因为在窗口创建的时候也会调用OnSize

函数,但是此时各个控件还没有创建,Pwnd为空

{