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);

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()配合使用獲取控件的客戶區坐標;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM