mfc窗體座標相關函式

2021-07-04 06:49:59 字數 1041 閱讀 9278

mfc中窗體以及其上的控制項(都是wnd類)擁有兩套座標系,一套是以螢幕左上角為原點(絕對座標),一套是以某個窗體或控制項自身的客戶區的左上角為原點(相對座標)。

// rect中儲存的是wnd的螢幕座標

crect rect;

wnd->getwindowrect(&rect);

// rect中儲存的是wnd的客戶區,rect左上角為座標原點。

wnd->getclientrect(&rect);

假設你想知道對話方塊dlg上的某個控制項ctl在對話方塊的客戶區的相對座標,需要兩步:

先獲得ctl的絕對座標rect,然後呼叫dlg的screentoclient()將rect轉換為相對座標,具體**如下:

ctl->getwindowrect(&rect);

dlg->screentoclient(&rect);

這裡要注意的是,經常我們的窗體**中會省略呼叫者,比如在呼叫者自己的訊息處理函式中時,可以省略this->,我們就需要注意當前的rect究竟是哪個窗體或控制項的rect,呼叫screentoclient更需要注意是要將rect轉換為相對於哪個wnd的座標。

另外發現一點,就是getclientrect函式的引數型別是lprect, 但是不加&符的crect型別的變數傳進去也沒有問題,原來crect過載了operator,見如下宣告和實現:

//convert between crect and lprect/lpcrect (no need for &)

operator lprect() throw();

operator lpcrect() const throw();

atltypes_inline crect::operator lprect() throw()

atltypes_inline crect::operator lpcrect() const throw()

crect lrect;

getclientrect( lrect );// 不加&符也沒有問題

MFC 分割窗體

mfc 分割窗體 splitter windows 文件描述mfc中的csplitterwnd類,該類用來支援窗體的分割和管理分割後每乙個子窗格 pane 的大小 1 分割窗體風格 splitter styles csplitterwnd類支援2種不同風格的分割視窗 1.1 靜態分割 static ...

mfc單元格座標 設定MFC座標係

窗範圍和視口範圍符號相同,則邏輯座標的方向和視口的方向相同,即x軸向右為正,y軸向下為正。7.如果將顯示模式改為mm isotropic,那麼x軸單位和y軸單位一定相同,感興趣的讀者可以自己使一下。二 建立以視窗中心為原點的座標 用如下 void cttview ondraw cdc pdc ctt...

MFC 螢幕座標 視窗座標 邏輯座標 物理座標

int nwidth getsystemmetrics sm cxscreen 螢幕寬度 int nheight getsystemmetrics sm cyscreen 螢幕高度 int cx getsystemmetrics sm cxfullscreen int cy getsystemmet...