1. 程式人生 > >VISUAL C++根據父視窗變化調整控制元件大小

VISUAL C++根據父視窗變化調整控制元件大小

如果對話方塊或視類的大小調後,控制元件的大小和位置沒有變化,介面看起來會很不爽
控制元件是從CWnd派生的,但不能使用SetWindowPos()或OnSize()或OnSizing()來改變其大小,應在父視窗的WM_SIZE訊息中使用MoveWindow()來進行調整。

VC++之根據對話方塊大小調整控制元件大小
1、在對話方塊類中加入成員變數CRect m_rect;用於儲存對話方塊大小變化前的大小;
2、在對話方塊的OnInitDialog()函式中獲取對話方塊建立時的大小:GetClientRect(&m_rect);
3、在WM_SIZE的響應函式OnSize()中加入以下程式碼:

CWnd * pWnd;
pWnd = GetDlgItem(IDC_LIST); // 獲取控制元件控制代碼
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); // 將變化後的對話方塊大小設為舊大小