2013-12-18 2 views
0

Как определить ширину линии для установки в конструкторе или в CPen :: CreatePen в случаях:MFC CPen :: ширина CreatePen линии

  1. Если я показываю изображение, например в масштабе 60%, и мне нужно, что моя линия была 1 мм на экране.
  2. Если я хочу, чтобы моя ширина линии составляет 0,01% от изображения макс (ширина, высота)
+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

Прежде всего, тип ширины 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

Смежные вопросы