MFC對話框內控件大小隨着對話框大小變化

 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);// 將變化後的對話框大小設爲舊大小

 

 
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章