【问题标题】:Mixing GDI+ with GDI将 GDI+ 与 GDI 混合
【发布时间】:2014-07-31 01:07:15
【问题描述】:

我正在使用第三方库来绘制图表。该库需要 HDC (GDI)。但我的应用程序正在使用 GDI+。

Q1:这样做安全吗?

void f(Gdiplus::Graphics& graphics)
{
    HDC dc = graphics.GetHDC();

    // Call 3rd party lib functions using dc
    // ...

    graphics.ReleaseHDC(dc);
}

Q2:lib 的一些函数需要一个边界 RECT 结构 (WinAPI)。如果我使用毫米作为页面单位,如何计算该矩形的坐标?

graphics.SetPageUnit(UnitMillimeter);

【问题讨论】:

    标签: c++ gdi+ gdi


    【解决方案1】:

    Q1:是的,但是如果第三方库无法处理您的坐标,您可能需要更改坐标系 ==> Q2

    Q2:this SO Question 对此有一些指针(虽然它是相反的方向),您需要将 mapping mode 设置为 MM_HIMETRIC,将 GDI+ 坐标转换为 0.01 毫米的整数并使用 LPtoDP获取像素值。

    【讨论】:

    • 对我不起作用。如果我应用此方法,我会在调用 LPtoDP 后得到负值,并且图形绘制在可见区域之外。另外,我读到 MM_HIMETRIC 映射模式反转 y 轴。结合负值,这似乎是有道理的,但是原点呢?
    • 一些经验测试,在不改变映射方式的情况下,建议单位大致为0.1mm。我可以尝试找到更准确的比例因子,但这很脏......
    • 对不起,我忘了说y轴,你应该可以使用负y;答案中映射模式的链接还简要描述了 GDI 使用的两个来源(窗口和视口)以及每个来源的范围
    猜你喜欢
    • 2012-05-10
    • 2010-09-29
    • 2013-06-05
    • 2010-11-07
    • 2012-10-28
    • 2011-02-24
    • 1970-01-01
    • 2014-09-23
    • 2019-04-07
    相关资源
    最近更新 更多