程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 使用各種映射方式

使用各種映射方式

編輯:關於C語言

 

所謂的映射方式簡單點講就是坐標的安排方式,系統默認的映射方式為MM_TEXT即X坐標向右增加,Y坐標向下增加,(0,0)在屏幕左上方,DC中的每一點就是屏幕上的一個象素。也許你會認為這種方式下是最好理解的,但是一個點和象素對應的關系在屏幕上看來是正常的,但到了打印機上就會很不正常。因為我們作圖是以點為單位並且打印機的分辨率遠遠比顯示器高(800DPI 800點每英寸)所以在打印機上圖形看起來就會很小。這樣就需要為打印另做一套代碼而加大了工作量。如果每個點對應0.1毫米那麼在屏幕上的圖形就會和打印出來的圖形一樣大小。

通過int CDC::SetMapMode( int nMapMode )可以指定映射方式,可用的有以下幾種:

MM_HIENGLISH 每點對應0.001英寸   Each logical unit is converted to 0.001 inch. Positive x is to the right; positive y is up.

MM_HIMETRIC 每點對應0.001毫米   Each logical unit is converted to 0.01 millimeter. Positive x is to the right; positive y is up.

MM_LOENGLISH 每點對應0.01英寸   Each logical unit is converted to 0.01 inch. Positive x is to the right; positive y is up.

MM_LOMETRIC 每點對應0.001毫米   Each logical unit is converted to 0.1 millimeter. Positive x is to the right; positive y is up.

MM_TEXT 象素對應   Each logical unit is converted to 1 device pixel. Positive x is to the right; positive y is down.

以上幾種映射默認的原點在屏幕左上方。除MM_TEXT外都為X坐標向右增加,Y坐標向上增加,和自然坐標是一致的。所以在作圖是要注意什麼時候應該使用負坐標。而且以上的映射都是X-Y等比例的,即相同的長度在X,Y軸上顯示的長度都是相同的。

另外的一種映射方式為MM_ANISOTROPIC,這種方式可以規定不同的長寬比例。在設置這中映射方式後必須調用CSize CDC::SetWindowExt( SIZE size )和CSize CDC::SetViewportExt( SIZE size )來設定長寬比例。系統會根據兩次設定的長寬的比值來確定長寬比例。下面給出一段代碼比較映射前後的長寬比例:

OnDraw(CDC* pDC)

{

    CRect rcC1(200,0,400,200);

    pDC->FillSolidRect(rcC1,RGB(0,0,255));

    pDC->SetMapMode(MM_ANISOTROPIC );

    CSize sizeO;

    sizeO=pDC->SetWindowExt(5,5);

    TRACE("winExt %d %d ",sizeO.cx,sizeO.cy);

    sizeO=pDC->SetViewportExt(5,10);

    TRACE("ViewExt %d %d ",sizeO.cx,sizeO.cy);

    CRect rcC(0,0,200,200);

    pDC->FillSolidRect(rcC,RGB(0,128,0));

}

上面代碼在映射後畫出的圖形將是一個長方形。

最後講講視原點(viewport origin),你可以通過調用CPoint CDC::SetViewportOrg( POINT point )重新設置原點的位置,這就相對於對坐標進行了位移。例如你將原點設置在(20,20)那麼原來的(0,0)就變成了(-20,-20)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved