1 首先要知道對話框大小是否改變,改變了多少,我們應該記錄當前對話框的大小。
在對話框類中添加成員變量 CRect m_rect 他是用來記錄當前對話框的大小。我們在OnInitDialog()函數中獲取對話框創建時的大小:GetClientRect(&m_rect);
2 增加消息WM_SIZE的消息響應函數 OnSize():只要對話框大小發生變化,就會調用該函數。
3 在OnSize()函數中增加如下代碼:(最簡單的爲例子,就一個確定按鈕和取消按鈕)
void CDaxiaobianhuaDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
for (int i=1;i<=2;i++) //因爲是兩個控件,所以這裏用了循環
{
CWnd *pWnd;
pWnd = GetDlgItem(i); //獲取ID爲i的空間的句柄,因爲“確認”ID爲1,“取消”ID爲2
if(pWnd) //判斷是否爲空,因爲對話框創建時會調用此函數,而當時控件還未創建
{
CRect rect; //獲取控件變化前的大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控件大小轉換爲在對話框中的區域座標
//cx/m_rect.Width()爲對話框在橫向的變化比例
rect.left=rect.left*cx/m_rect.Width();//調整控件大小
rect.right=rect.right*cx/m_rect.Width();
rect.top=rect.top*cy/m_rect.Height();
rect.bottom=rect.bottom*cy/m_rect.Height();
pWnd->MoveWindow(rect);//設置控件大小
}
}
GetClientRect(&m_rect);// 將變化後的對話框大小設爲舊大小
}