WINDOWS視窗座標

來源:互聯網
上載者:User

標籤:ar   os   sp   div   bs   amp   tt   nbsp   res   

不只是有最大最小關閉按鈕的那個矩形東西被稱為視窗,
所有控制項是視窗。視窗中的子視窗是視窗。


【視窗的組成】
外部邊框。視窗Border屬性為 Thin, Resizing時,有3個像素寬的邊框。
系統區:視窗上部藍色部分,有最大最小關閉按鈕的那一個部分。
客戶區:除去外部邊框和系統區的部分。系統區有統一的機制處理,客戶區
     是由客戶程式員定義外觀和行為的部分。


【座標系】
螢幕座標系:定義螢幕左上方為(0,0)原點
視窗安放在二維平面上,一般為電腦顯示器所在的視覺平面上。
座標單位為“像素”。假設顯示器解析度為(800*600),那麼
螢幕右下角座標為(800,600)。


客戶區座標系:以視窗客戶區的左上方為(0,0)原點。向右為X軸正方向。
向下為Y軸正方向。


【常用函數】
GetWindowRect
取得視窗(包括邊框和系統區)位於螢幕座標系中的位置資訊。
如果“視窗”是按鈕等控制項,就是控制項的整體(包括邊框)位於螢幕座標系中位置。


GetClientRect
獲得視窗位於客戶座標系中的位置資訊。


CRect rc;
對話方塊->GetClientRect(&rc); //獲得對話方塊客戶區尺寸資訊。
返回的rc永遠是(0,0,width,height),其中width是客戶區寬度(單位像素)
height是客戶區高度。


CRect rc;
控制項->GetClientRect(&rc); //獲得控制項客戶區尺寸資訊。
返回的rc永遠是(0,0,width,height),其中width是控制項寬度(單位像素)
height是控制項的高度。


ClientToScreen
將客戶區座標系翻譯成螢幕座標系。


描述慣例 CRect=(左,頂,右,底)


例子1:
CRect rect;
控制項->GetClientRect(&rect); //rect = (0,0,20,10)
CRect rect2 = rect;
控制項->ClientToScreen(&rect2); //rect2 = (a,b,a+20,b+10)
其中a,b為控制項某點(左上方的那個點)在螢幕座標系的座標。


例子2:
CRect rect;
對話方塊->GetClientRect(&rect); //rect = (0,0,20,10)
CRect rect2 = rect;
對話方塊->ClientToScreen(&rect2); //rect2 = (a,b,a+20,b+10)
其中a,b為對話方塊某點(左上方的那個點)在螢幕座標系的座標。


ScreenToClient
將螢幕座標系翻譯成客戶區座標系。


例子3:
CRect rect;
控制項->GetWindowRect(&rect);  //rect = (l,t,r,b)
CRect rect2 = rect;
控制項->ScreenToClient(&rect2); //rect2 = (0,0,r-l,b-t)


例子4:
CRect rect;
對話方塊->GetWindowRect(&rect); //rect = (l,t,r,b)
CRect rect2 = rect;
對話方塊->ScreenToClient(&rect2); //rect2 =
(-e,-(e+h),(r-l)-e,(b-t)-(e+h))
其中:e代表視窗的邊框寬度,一般是3個像素。
    h代表系統區的title-bar的高度,一般是26個像素。
    負數是從何而來呢?GetWindowRect是取整個視窗全體(包括系統區和邊框)
    因此變換到客戶區座標系時,對話方塊左邊位於客戶區座標系原點右側(負方向)
    因此左邊的座標就是-3。


(矩形的幾何面積沒有變化,變化的是位置值。座標變換屬於剛體運動變換)


例子5:
CRect rect;
控制項->GetWindowRect(&rect);
CRect rect2 = rect;
對話方塊->ScreenToClient(&rect2); //控制項的父視窗是對話方塊


這個比較有用,可以計算某控制項相對位於父視窗客戶區座標系中的座標。

WINDOWS視窗座標

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.