如果對話(huà)框或視類(lèi)的大小調后,控件的大小和位置沒(méi)有變化,界面看起來(lái)會(huì )很不爽
控件是從CWnd派生的,但不能使用SetWindowPos()或OnSize()或OnSizing()來(lái)改變其大小,應在父窗口的WM_SIZE消息中使用MoveWindow()來(lái)進(jìn)行調整。
VC++之根據對話(huà)框大小調整控件大小
1、在對話(huà)框類(lèi)中加入成員變量CRect m_rect;用于保存對話(huà)框大小變化前的大??;
2、在對話(huà)框的OnInitDialog()函數中獲取對話(huà)框創(chuàng )建時(shí)的大?。篏etClientRect(&m_rect);
3、在WM_SIZE的響應函數OnSize()中加入以下代碼:
CWnd *pWnd;
pWnd = GetDlgItem(IDC_LIST); //獲取控件句柄
if(pWnd)//判斷是否為空,因為對話(huà)框創(chuàng )建時(shí)會(huì )調用此函數,而當時(shí)控件還未創(chuàng )建
{
CRect rect; //獲取控件變化前大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//將控件大小轉換為在對話(huà)框中的區域坐標
// cx/m_rect.Width()為對話(huà)框在橫向的變化比例
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);//將變化后的對話(huà)框大小設為舊大小聯(lián)系客服