MFC視窗位置和大小的獲取

2021-08-03 21:55:01 字數 1627 閱讀 2230

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

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

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

MFC獲取視窗大小

1 獲取螢幕解析度 下邊兩個函式獲取的是顯示螢幕的大小,但不包括工作列等區域 int cx getsystemmetrics sm cxfullscreen int cy getsystemmetrics sm cyfullscreen 下邊這兩個函式獲取的是真正螢幕的大小 螢幕解析度 int nw...

MFC中設定視窗大小位置

第一種方法 使用setwindowpos函式 cwnd setwindowposbool setwindowpos const cwnd pwndinsertafter,int x,int y,int cx,int cy,uint nflags 返回值如果函式成功,則返回非零值 否則返回0。說明 呼...

MFC中設定視窗大小位置

第一種方法 使用setwindowpos函式 cwnd setwindowposbool setwindowpos const cwnd pwndinsertafter,int x,int y,int cx,int cy,uint nflags 返回值如果函式成功,則返回非零值 否則返回0。說明 呼...