C++ 混合GDI+;使用GDI

C++ 混合GDI+;使用GDI,c++,gdi+,gdi,C++,Gdi+,Gdi,我正在使用第三方库绘制图形。该库需要一个HDC(GDI)。但我的应用程序使用的是GDI+ 问题1:这样做安全吗 void f(Gdiplus::Graphics& graphics) { HDC dc = graphics.GetHDC(); // Call 3rd party lib functions using dc // ... graphics.ReleaseHDC(dc); } 问题2:lib的一些函数需要一个边界RECT结构(WinAP

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

问题1:这样做安全吗

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

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

    graphics.ReleaseHDC(dc);
}
问题2:lib的一些函数需要一个边界RECT结构(WinAPI)。如果使用毫米作为页面单位,如何计算矩形的坐标

graphics.SetPageUnit(UnitMillimeter);

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


问题2:有一些指针(虽然是相反的方向),您需要将设置为MM_HIMETRIC,将GDI+坐标转换为0.01 MM的整数,然后使用来获取像素值。

对我不起作用。如果应用此方法,则在调用LPtoDP后会得到负值,并且图形绘制在可见区域之外。此外,我还了解到MM_HIMETRIC映射模式会反转y轴。结合负值,这似乎是有意义的,但是原点呢?一些经验测试,在不改变映射模式的情况下,表明单位大约为0.1mm。我可以试着找到一个更精确的比例因子,但这是肮脏的…对不起,我忘了提到y轴,你应该能够使用负y轴;答案中映射模式的链接还简要描述了GDI使用的两个原点(窗口和视口)以及每个原点的范围