萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> MFC控件大小隨窗體大小而改變

MFC控件大小隨窗體大小而改變

   本文給大家分享的是使用VC++根據對話框大小調整控件大小的方法和示例代碼,有需要的小伙伴可以參考下。

  一。大小和位置都改變

  1.首先為窗體類添加CRect m_rect,該成員變量用來記錄窗體的當前大小。

  2.在類向導裡面(Ctrl+W),為窗體添加消息WM_SIZE的響應函數OnSize();

  注意if(nType==1) return;這一句必須添加,否則最小化恢復的時候會出錯。

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 void CPaperManagementDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if(nType==1) return;//最小化則什麼都不做 // TODO: Add your message handler code here CWnd *pWnd; pWnd = GetDlgItem(IDC_STATIC); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_FILE_TREE); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_EDIT_NAME); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_EDIT_REFERENCE); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_EDIT_SUMMARY); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_EDIT_REMARK); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_BUTTON_UPDATE); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_BUTTON_SAVE); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_STATIC_1); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_STATIC_2); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_STATIC_3); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_STATIC_4); ChangeSize(pWnd, cx, cy); GetClientRect(&m_rect);// 將變化後的對話框大小設為舊大小 }

  其中函數ChangeSize是手動添加的用戶函數,步驟如下

  3.添加一個改變控件大小的用戶函數,void ChangeSize(CWnd *pWnd, int cx, int cy),並編寫代碼

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 void CPaperManagementDlg::ChangeSize(CWnd *pWnd, int cx, int cy) { 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);//設置控件大小 } }

  真正改變控件大小的函數是ChangeSize函數,在OnSize中不斷調用ChangeSize函數從而改變窗體中所有控件的大小。

  ——————————————————————————————————————————————————————

  以下內容來自網絡:

  二、 VC++之根據對話框大小僅調整控件位置

  1、在對話框類中加入成員變量CRect m_rect;用於保存對話框大小變化前的大小;

  2、在對話框的OnInitDialog()函數中獲取對話框創建時的大小:

  GetClientRect(&m_rect);

  3、在WM_SIZE的響應函數OnSize()中加入以下代碼:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CWnd *pWnd; pWnd = GetDlgItem(IDC_BUTTON1); //獲取控件句柄 if(nType==1) return; //如果是窗體最小化則什麼都不做 if(pWnd)//判斷是否為空,因為對話框創建時會調用此函數,而當時控件還未創建 { CRect rect; //獲取控件變化前大小 LONG cWidth,cHeight; //記錄控件的右部到窗體右部的距離,記錄控件的底部到窗體底部的距離 pWnd->GetWindowRect(&rect); ScreenToClient(&rect);//將控件大小轉換為在對話框中的區域坐標 cWidth=m_rect.Width()-rect.right; cHeight=m_rect.Height()-rect.bottom; rect.left=cx-rect.Width()-cWidth; rect.right=cx-cWidth; rect.top=cy-rect.Height()-cHeight; rect.bottom=cy-cHeight; pWnd->MoveWindow(rect);//設置控件大小 } GetClientRect(&m_rect);//將變化後的對話框大小設為舊大小

  以上所述就是本文的全部內容了,希望大家能夠喜歡。

copyright © 萬盛學電腦網 all rights reserved