VC中的座標

來源:互聯網
上載者:User

    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得到的視窗裝置環境,可以將邏輯單位轉換成視窗座標。  
   
      3.邏輯座標與裝置座標的轉換方式  
   
      映射方式定義了Windows如何將GDI函數中指定的邏輯座標映射為裝置座標。要繼續討論映射方式我們要介紹Windows有關映射模式的一些術語:我們將邏輯座標所在的座標系稱為"視窗",將裝置座標所在的座標系稱為"視口"。  
   
      "視窗"依賴於邏輯座標,可以是像素點、毫米或程式員想要的其他尺度。    
   
      "視口"依賴於裝置座標(像素點)。通常,視口和用戶端區域等同。但是,如果程式員用GetWindowDC或CreateDC擷取了一個裝置環境,則視口也可以指全視窗座標或螢幕座標。點(0,0)是用戶端區域的左上方。x的值向右增加,y的值向上增加。  
   
      對於所有映射模式,Windows都用下面兩個公式將視窗座標轉換成視口座標:  
   
      xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrg  
   
      yViewport=(yWindow-yWinOrg)*(yViewExt/yWinExt)+yViewOrg  
   
      其中,(xWindow,yWindows)是待轉換的邏輯點,(xViewport,yViewport)是轉換後的裝置點。如果裝置座標是用戶端區域座標或全視窗座標,則Windows在畫一個對象前,還必須將這些座標轉換成螢幕座標。  
   
      這兩個公式使用了分別指定視窗和視口原點的點:(xWinOrg,yWinOrg)是邏輯座標的視窗原點;(xViewOrg,yViewOrg)是裝置座標的視口原點。在預設的裝置環境中,這兩個點均設定為(0,0),但它們可以改變。此公式意味著,邏輯點(xWinOrg,yWinOrg)總被映射為裝置點(xViewOrg,yViewOrg)。  
   
      Windows還能將視口(裝置)座標轉換為視窗(邏輯)座標:  
   
      xWindow=(xViewport-xViewOrg)*(xWinExt/xViewExt)+xWinOrg  
   
      yWindow=(yViewport-yViewOrg)*(yWinExt/yViewExt)+yWinOrg  
   
      可以使用Windows提供的兩個函數DPtoLP和LPtoDP在裝置座標及邏輯座標之間互相轉換  

聯繫我們

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