座標空間
如下圖所示:
開始空間
說明
頁面空間到裝置空間的轉換
四種裝置環境屬性:
裝置空間,採用裝置座標:
以下四個來說明視口與視窗的關係:
圖1:圖2:
圖3:圖4:
視口/視窗:
獲得視口和視窗原點(cdc中提供了兩個成員函式函式用來改變視口和視窗的原點)
注意: 不管對視窗和視口原點作什麼改變,裝置點(0,0)始終是客戶區的左上角(即視窗顯示的的左上角始終始終為裝置點(0,0))
說明: 頁面空間到裝置空間的轉換所用的是兩個矩形的寬與高的比率,其中頁面空間中的矩形被稱為視窗,裝置空間中的矩形被稱為視口,windows把視窗原點對映到視口原點,把視窗範圍對映到視口範圍,就完成了這種轉換,如上圖
邏輯座標/裝置座標:
裝置座標:
對應關係:
邏輯座標和裝置座標的相互轉換:
視口(裝置)座標轉換為視窗(邏輯)座標的兩個公式:
在 mm_text 對映方式下邏輯座標和裝置座標的相互轉換
視口(裝置)座標轉換為視窗(邏輯)座標的兩個公式:
裝置空間到物理空間的轉換
裝置空間到物理空間的轉換有幾個獨特之處:它只限於平移,並由windows的視窗管理部分控制,這種轉換的唯一用途是確保裝置空間的原點被對映到物理裝置上的適當點上.沒有函式能設定這種轉換,也沒有函式可以獲取有關資料,程式設計師無需關心,也無法對這方面做任何操作
預設轉換
在有滑動條的視窗中圖形在繪製圖形的時候記得對視窗的視口的對應調整.
比如當視窗下拉時我們在視窗中點選滑鼠左鍵的時候,得到的是裝置座標,但是我們的視口的位置其實是在上面,雖然我們沒有改變視窗的視口原點但是為了顯示出視窗下部分類容視口原點必須向上移動,因為裝置點(0,0)始終是客戶區的左上角,所以我們得到的裝置座標座標值.而並非視窗的視區中對應的位置,也就是說它得到的位置錯位了.
所以我們要先用onpreparedc函式(onpreparedc會隨時根據滾動視窗的位置來調整視口的原點),調整了顯示上下文的屬性,將視口的原點設定為現在對應的位置,並將裝置座標轉換為對應的邏輯座標,使點對應視窗視區對應的位置,可以通過呼叫完onpreparedc函式後呼叫dptolp來做對應的裝置座標到邏輯座標的轉換,此後的輸出就會正確的顯示其位置
座標系統 對映模式
三種座標系統 螢幕座標 全視窗座標 客戶區座標 clienttoscreen 把客戶區座標轉換到螢幕座標 screentoclient 把螢幕座標轉換到客戶區座標 getwindowrect 以螢幕座標形式獲取整個視窗的位置和大小 getclientrect hwnd,rect dptolp hdc...
切換座標系對映模式
對映模式 int setmapmode hdc hdc,dc控制代碼 int fnmapmode 對映模式 fnmapmode 對映模式如下 mm text 預設,1個邏輯單位 1個畫素 x軸右軸為正,y軸下為正 mm hienglish 1個邏輯單位 0.001英吋 mm loenglish 1個...
MFC 列印預覽 對映模式 座標變換
mfc提供了乙個框架性的列印和列印預覽功能 它的基本思想是將實際顯示和列印文件的 合二為一,即都由此文件關聯的cview中的ondraw cdc pdc 來處理,由mfc框架根據使用者的操作來決定傳進來的pdc是指向螢幕還是印表機,當pdc指向螢幕裝置,就在螢幕上顯示文件,當指向印表機裝置時就列印文...