1. 程式人生 > >MFC控制元件位置隨窗體大小而改變

MFC控制元件位置隨窗體大小而改變

      因為在做上位機,需要MFC中的控制元件位置隨窗體大小而改變,以下是程式碼:

    首先初始化CRect m_rect,該成員變數用來記錄窗體的當前大小。

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);//將變化後的視窗大小設為舊大小
}
關於GetWindowRect和GetClientRect這兩個函式,以下內容摘自一篇部落格,令鄙人受益匪淺,拿來和大家一起分享: