gpt4 book ai didi

c++ - GDI+ GraphicsContainer 不工作

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:11 25 4
gpt4 key购买 nike

如果我将页面单位设置为英寸,GraphicsContainer 似乎不起作用。

所以我像下面的代码一样进行了测试。

enter image description here

在这段代码中,我绘制了 2 个椭圆 - 在容器开始之前(第一个)和之后(第二个)。
如果容器有效,圆圈的颜色应该是蓝色。但它仍然是绿色的。这意味着 BeginContainer() 下的第二个绘图代码根本不起作用。

当我将页面单位设置为 UnitPixel 或 UnitWorld(UnitInch 除外)时,这从未发生过。是什么原因?我错过了什么吗?我该如何解决?

CPaintDC dc(this); CRect rec; GetClientRect(&rec);
Gdiplus::Graphics g(dc.GetSafeHdc());
g.SetPageUnit(UnitInch);
float dx = 2; float dy = 4;
REAL DpiX = g.GetDpiX(); REAL DpiY = g.GetDpiY();
Matrix flipMatrix(1.0f, 0.0f, 0.0f,-1.0f,-dx,dy);
g.SetTransform(&flipMatrix);
g.TranslateTransform((rec.Width()/2)/DpiX ,(rec.Height()/2)/DpiY, Gdiplus::MatrixOrderAppend);
//Pen//
Gdiplus::Pen RedPen(Gdiplus::Color::Red, 0.1);
Gdiplus::Pen BluePen(Gdiplus::Color::Blue, 0.1);
Gdiplus::Pen GreenPen(Gdiplus::Color::Green, 0.1);
//Draw Cross
g.DrawLine(&GreenPen, PointF(dx-1.0f,dy+1.0f), PointF(dx+1.0f, dy-1.0f));
g.DrawLine(&GreenPen, PointF(dx+1.0f,dy+1.0f), PointF(dx-1.0f, dy-1.0f));
//Draw 1st Ellipse without Container
g.DrawEllipse(&RedPen, dx-1,dy-1, 2.0f,2.0f);
GraphicsContainer C;
//Start Container------
C=g.BeginContainer();
//Draw 2nd Ellipse within Container
g.DrawEllipse(&BluePen, dx-1,dy-1, 2.0f,2.0f);
//End Container
g.EndContainer(C);

最佳答案

之前调用了 g.SetPageUnit(UnitInch)。显然,在 BeginContainer 之后需要第二次调用 g.SetPageUnit(Gdiplus::UnitInch):

g.SetPageUnit(UnitInch);
...
GraphicsContainer C;
//Start Container------
C = g.BeginContainer();
g.SetPageUnit(Gdiplus::UnitInch); //<== put after g.BeginContainer
//Draw 2nd Ellipse within Container
g.DrawEllipse(&BluePen, dx - 1, dy - 1, 2.0f, 2.0f);
//End Container
g.EndContainer(C);

如果你在 BeginContainer 之后不调用 SetPageUnit(Gdiplus::UnitInch),你会得到一个以像素为单位的小圆圈,它会在错误的位置因为 UnitInch 中的早期转换。

关于c++ - GDI+ GraphicsContainer 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46768568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com