Windows映射模式及相關問題的解決

來源:互聯網
上載者:User

Windows應用程式繪製圖形時使用的是一種邏輯單位,每個邏輯單位的大小由映射模式決定, 這個邏輯單位既可以與裝置單位(螢幕或印表機上的一個像素點)相同,也可以是一種物理單 位(如毫米),還可以是使用者自訂的一種單位。在Windows應用程式中,只要與輸出有關係,都 要使用映射模式。本文的目的是協助讀者瞭解映射模式的一些基本知識,並對在使用中經常 出現的一些問題提出解決方案。

一、映射模式基本知識

當Windows應用程式在其客戶區繪製圖形時,必須給出在客戶區的位置,其位置用x和y 兩個座標表示,x表示橫座標,y表示縱座標。在所有的GDI繪製函數中,這些座標使用的是一 種"邏輯單位"。當GDI函數將輸出送到某個物理裝置上時,Windows將邏輯座標 轉換成裝置座標(如螢幕或印表機的像素點)。邏輯座標和裝置座標的轉換是由映射模式決 定的。映射模式被儲存在裝置環境中。GetMapMode函數用於從裝置環境得到當前的映射模 式,SetMapMode函數用於設定裝置環境的映射模式。

1.邏輯座標

邏輯座標是獨立於裝置的,它與裝置點的大小無關。使用邏輯單位,是實現"所見即所得 (WYSIWYG)"的基礎。當程式員在調用一個畫線的GDI函數LineTo,畫出25.4mm(1英寸) 長的線時,他並不需要考慮輸出的是何種裝置。若裝置是VGA顯示器,Windows自動將其轉化為96個像素點;若裝置是一個300dpi的雷射印表機,Windows自動將其轉化為300個像素點。

2.裝置座標

Windows將GDI函數中指定的邏輯座標映射為裝置座標,在所有的裝置座標系統中,單位以像素點為準,水平值從左至右增大,垂直值從上到下增大。

Windows中包括以下3種裝置座標,以滿足各種不同需要:

(1)用戶端區域座標,包括應用程式的用戶端區域,用戶端區域的左上方為(0,0)。

(2)螢幕座標,包括整個螢幕,螢幕的左上方為(0,0)。螢幕座標用在WM_MOVE訊息中(對於非子視窗)以及下面的Windows函數中:CreateWindow和MoveWindow(都對於非子視窗)、GetMessage、GetCursorPos、GetWindowRect、WindowFromPoint和SetBrushOrg中。用函數ClientToScreen和ScreenToClient可以將用戶端區域座標轉換成螢幕地區座標,或反之。

(3)全視窗座標,包括一個程式的整個視窗,包括標題條、菜單、捲軸和視窗框,視窗的左上方為(0,0)。使用GetWindowDC得到的視窗裝置環境,可以將邏輯單位轉換成視窗座標。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.