2017-10-16 17 views
2

Il semble que GraphicsContainer ne fonctionne pas si je mets l'unité de page en pouces.GDI + GraphicsContainer ne fonctionne pas

J'ai donc testé comme le code ci-dessous.

enter image description here

Dans ce code, je dessine 2 points de suspension - avant (1er) et après (2) le conteneur commence.
Si le conteneur fonctionne, la couleur du cercle doit être bleue. mais c'est encore vert. cela signifie que le second code de dessin sous BeginContainer() ne fonctionne pas du tout.

cela n'est jamais arrivé lorsque j'ai défini l'unité de page dans UnitPixel, ou UnitWorld, sauf UnitInch. Quelle est la raison? Y a-t-il quelque chose qui ne va pas? Comment puis-je le résoudre?

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); 

Répondre

2

Un appel à g.SetPageUnit(UnitInch) a été effectué précédemment. Evidentally un second appel à g.SetPageUnit(Gdiplus::UnitInch) est nécessaire après BeginContainer:

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); 

Si vous ne l'appelez pas SetPageUnit(Gdiplus::UnitInch) après BeginContainer, vous obtenez un petit cercle en unités de pixels, et il sera à la mauvaise position en raison de la première transition au UnitInch.

+0

Merci beaucoup. –