程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 『VC++技術內幕』學習筆記(6)

『VC++技術內幕』學習筆記(6)

編輯:vc教程

     第六篇:映射模式

   在此篇之前我們已經學會了在窗口顯示圖形,更准確的說是在窗口指定位置顯示圖形或文字,我們使用的坐標單位是象素,稱之為設備坐標。看下面語句:

pDC->Rectangle(CRect(0,0,200,200));

   畫一個高和寬均為200個象素的方塊,因為采用的是默認的MM_TEXT映射模式,所以在設備環境不一樣時,畫的方塊大小也不一樣,在1024*768的顯示器上看到的方塊會比640*480的顯示器上的小(在不同分辨率下的屏幕象素,在WINDOWS程序設計一書中有示例程序可以獲得,或者可以用GetClientRect函數獲得客戶區的矩形大小。在這裡就不說了,大家只要知道就行了),在輸出到打印機時也會有類似的情況發生。如何做才能保證在不同設備上得到大小一致的方塊或者圖形、文字呢?就需要我們進行選擇模式映射,來轉換設備坐標和邏輯坐標。

Windows提供了以下幾種映射模式:
MM_TEXT
MM_LOENGLISH
MM_HIENGLISH
MM_LOMETRIC
MM_HIMETRIC
MM_TWIPS
MM_ISOTROPIC
MM_ANISOTROPIC

下面分別講講這幾種映射模式:

MM_TEXT:

   默認的映射模式,把設備坐標被映射到象素。x值向右方向遞增;y值向下方向遞增。坐標原點是屏幕左上角(0,0)。但我們可以通過調用CDC的SetViewprotOrg和SetWindowOrg函數來改變坐標原點的位置看下面兩個例子:

//************************************************
// 例子6-1
void CMyView::OnDraw(CDC * pDC)
{
pDC->Rectangle(CRect(0,0,200,200));//全部采用默認畫一個寬和高為200象素的方塊
}

//**************************************************
// 例子6-2
void CMyView::OnDraw(CDC * pDC)
{
pDC->SetMapMode(MM_TEXT);//設定映射模式為MM_TEXT
pDC->SetWindowOrg(CPoint(100,100));//設定邏輯坐標原點為(100,100)
pDC->Rectangle(CRect(100,100,300,300));//畫一個寬和高為200象素的方塊
}

   這兩個例子顯示出來的圖形是一樣的,都是從屏幕左上角開始的寬和高為200象素的方塊,可以看出例子2將邏輯坐標(100,100)映射到了設備坐標(0,0)處,這樣做有什麼用?滾動窗口使用的就是這種變換。

     固定比例映射模式:

MM_LOENGLISH、MM_HIENGLISH、MM_LOMETRIC、MM_HIMETRIC、MM_TWIPS這一組是Windows提供的重要的固定比例映射模式。

它們都是x值向右方向遞增,y值向下遞減,並且無法改變。它們之間的區別在於比例因子見下:(我想書上P53頁肯定是印錯了,因為通過程序實驗x值向右方向也是遞增的)

MM_LOENGLISH 0.01英寸
MM_HIENGLISH 0.001英寸
MM_LOMETRIC 0.1mm
MM_HIMETRIC 0.01mm
MM_TWIPS 1/1440英寸 //應用於打印機,一個twip相當於1/20磅,一磅又相當於1/72英寸。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 4
  • 5
  • 下一頁
  • 尾頁
  • 共5頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved