2013-12-18 20 views
0

如何確定線條的寬度在構造或CPEN ::個CreatePen設置在箱子:MFC CPEN ::個CreatePen線寬

  1. 如果我在標尺60%顯示例如圖像和我需要的我的線在屏幕上是1毫米。
  2. 如果我想我的線寬是圖像最大(寬,高)
+0

在這種情況下,我總是工作的是各向異性映射模式。在這種情況下,GDI爲我完成所有的工作。 – xMRi

+0

@xMRi你可以提供如何使用映射模式完成的示例嗎? – mrgloom

+0

作爲一個介紹它就足夠了。另請閱讀有關映射模式的MSDN。這個想法是將內部邏輯單元和外部設備單元分開。使用各向異性映射模式,您可以將所有計算保留至GDI。你只需要從內部座標轉換到外部座標,反之亦然。 DPtoLP,LPtoDP。我希望這一切都覆蓋在這裏:http://www.codeguru.com/cpp/wd/doc_view/scrolling/article.php/c3345/Add-Zoom-and-Scale-Capabilities-to-CScrollView.htm – xMRi

回答

1

首先爲0.01%,CPEN寬度的類型是int,所以你必須使用整型。

但是,如果您使用第二個計劃,則下面的代碼可用,但您必須關注寬度的類型和值。

CImage image; 

float max_value = static_cast<float>(max(image.GetWidth(), image.GetHeight())); 

//get value for 1% 
float pen_width = max_value * 0.01f; 

CPen pen(PS_SOLID, static_cast<int>(pen_width), RGB(0, 0, 0)); 
+0

它實際上是什麼意思pen_width = 1?這是否意味着在圖像上它將是1像素厚?如果pen_width = n => n像素厚? – mrgloom

+0

如果寬度爲0,則無論映射模式如何,總是1像素。否則,它取決於映射模式。 [映射模式](http://www.cs.binghamton.edu/~reckert/360/14a_map_modes_f03.html),[CPen-MSDN](http://msdn.microsoft.com/en-us//library/ ykez8tds.aspx) – hyun

+0

但我認爲映射模式只能影響基元的幾何形狀,而不影響筆寬。 – mrgloom