MFC控制元件位置隨窗體大小而改變
阿新 • • 發佈:2019-02-10
因為在做上位機,需要MFC中的控制元件位置隨窗體大小而改變,以下是程式碼:
首先初始化CRect m_rect,該成員變數用來記錄窗體的當前大小。
關於GetWindowRect和GetClientRect這兩個函式,以下內容摘自一篇部落格,令鄙人受益匪淺,拿來和大家一起分享:void CTEST4View::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); CWnd *pWnd=NULL; this->GetWindowRect(&m_rect);//獲取當前窗體的座標 if(nType==1) return;//<span style="color: rgb(70, 70, 70); line-height: 26px;"><span style="font-family:SimSun;font-size:10px;">這一句必須新增,否則最小化恢復的時候會出錯。</span></span> pWnd = GetDlgItem(IDC_BUTTON1); //獲取控制元件控制代碼 if(pWnd) { CRect rect; //獲取控制元件變化前的大小 pWnd->GetWindowRect(&rect); //控制元件在視窗座標系下的位置 ScreenToClient(&rect); //將視窗座標系下的位置轉換為控制元件座標系下的位置 int cwidth =0; int cheight = 0; cwidth =rect.right-rect.left; cheight = rect.bottom - rect.top; if(m_rect.Width()!=0&&m_rect.Height()!=0){ rect.left=0.8*m_rect.Width(); rect.right=0.8*m_rect.Width()+cwidth; rect.top=0.8*m_rect.Height(); rect.bottom=0.8*m_rect.Height()+cheight; pWnd->MoveWindow(rect);//設定控制元件大小 } } GetClientRect(&m_rect);//將變化後的視窗大小設為舊大小 }