2017-10-16 7 views
2

Page UnitをInchに設定するとGraphicsContainerが動作しないようです。GDI + GraphicsContainerが機能しません

私は以下のコードのようにテストしました。このコードで

enter image description here

、私は2つの楕円を描く - (1)前(2回目)の後にコンテナが開始されます。
コンテナが動作している場合、円の色は青でなければなりません。それはまだ緑色です。 BeginContainer()の下の2番目の描画コードがまったく動作しないことを意味します。

これは、UnitInch以外のUnitPixelまたはUnitWorldにページ単位を設定したときには起こりませんでした。 理由は何ですか?私が見逃した何かが間違っていますか?どうすれば解決できますか?

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

答えて

2

以前g.SetPageUnit(UnitInch)への呼び出しがありました。あなたはBeginContainerSetPageUnit(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); 

は、あなたがピクセル単位で小さな円を取得し、それがあるため、以前の移行の間違った位置になります。Evidentally g.SetPageUnit(Gdiplus::UnitInch)への2回目の呼び出しはBeginContainer後に必要とされますUnitInchにあります。

+0

ありがとうございました。 –

関連する問題