1. 程式人生 > >MFC視窗位置和大小的獲取

MFC視窗位置和大小的獲取


最近在做一個專案,需要控制元件隨對話方塊大小的變化而變化,因此需要準確獲取對話方塊視窗、控制元件的大小和位置。

經過好一番查尋、測試,終於看到了希望。下面是一些獲取視窗位置和大小的函式,示例如下:


1、獲取螢幕解析度

//下邊兩個函式獲取的是顯示螢幕的大小,但不包括工作列等區域
int cx = GetSystemMetrics(SM_CXFULLSCREEN);
int cy = GetSystemMetrics(SM_CYFULLSCREEN);


//下邊這兩個函式獲取的是真正螢幕的大小:螢幕解析度
int nWidth=GetSystemMetrics(SM_CXSCREEN);  //螢幕寬度    
int nHeight=GetSystemMetrics(SM_CYSCREEN); //螢幕高度
CString strScreen;
strScreen.Format(L"%d,%d",nWidth,nHeight);
MessageBox(strScreen);

2、獲取對話方塊窗體大小及其螢幕座標

//對話方塊窗體大小及其螢幕座標

CRect rectDlg;


//方法1:
GetClientRect(rectDlg);//獲得窗體的大小


//方法2:

//GetWindowRect(rectDlg);//獲得窗體在螢幕上的位置
//ScreenToClient(rectDlg);
CString strDlg;
strDlg.Format(L"%d,%d,%d,%d",rectDlg.left,rectDlg.top,rectDlg.Width(),rectDlg.Height());
MessageBox(strDlg);

rectDlg.left  --螢幕X座標

rectDlg.top --螢幕Y座標

 

3、獲取控制元件大小和位置

//控制元件大小和位置
CRect rectCtrl;
CStatic *p=(CStatic*)GetDlgItem(IDC_STATIC_TEST);
p->MoveWindow(100,100,100,100);//更改控制元件大小並移動其到指定位置
p->GetWindowRect(rectCtrl);
this->ScreenToClient(rectCtrl);
//GetDlgItem(IDC_STATIC_TEST)->GetClientRect(rectCtrl);
CString str;
str.Format(L"%d,%d,%d,%d",rectCtrl.left,rectCtrl.top,rectCtrl.Width(),rectCtrl.Height());
MessageBox(str);

總結:


1. GetSystemMetrics()  -->  用於得到被定義的系統資料或者系統配置資訊;


2. GetClientRect() -->  得到客戶區的位置和大小,一般用於獲取視窗大小;


3. GetWindowRect() -->  得到視窗(對話方塊或控制元件)的螢幕座標,一般用於獲取對話方塊的螢幕座標或和ScreenToClient()配合使用獲取控制元件的客戶區座標;


4. ScreenToClient()  -->  螢幕座標轉換為客戶區座標,一般和GetWindowRect()配合使用獲取控制元件的客戶區座標;