みなさん、こん××は。
すでに何度も同じような質問があったかもしれません。過去ログをあったのですが、
よくわかりませんでした。
ダイアログベースでプログラムを書いています。円を連続的に5個
描きたいのですが、最後の一番外側の円しか描いてくれません。
どうしたらよいのでしょうか?プログラムは、下記のように記述しました。
よろしくお願いします。
int i;
CWnd* h1 = GetDlgItem(IDC_Graph1);
CDC* pDC1=h1->GetDC();
CRect myRECT1; // 長方形データを格納する場所を設定
h1->GetClientRect(&myRECT1); // クライアント領域をmyRECTに格納
int pw,ph;
pw=myRECT1.right;
ph=myRECT1.bottom;
//X軸, Y軸を黒い太線で描く
CPen AXIS_Line(PS_SOLID,1,RGB(0,0,0));
CPen* oldAXIS_Line=pDC1->SelectObject(&AXIS_Line);
int xc,yc;
double dx=pw/10, dy=ph/10; //目盛線の間隔
xc = pw/2;
yc = ph/2;
for(i=1;i<5;i++)
pDC1->Ellipse(xc-i*(int)dx,yc-i*(int)dy,xc+i*(int)dx,yc+i*(int)dy);
Ellipseは、円周を描き内部を塗りつぶす関数です。
ゆえに内側の円はどんどん塗りつぶされてしまいます。
dairygoodsさん
こんばんは。早速、ヒントを頂きましてありがとうございました。
for(i=1;i<5;i++)
pDC1->Ellipse(xc-i*(int)dx,yc-i*(int)dy,xc+i*(int)dx,yc+i*(int)dy);
を
for(i=5;i>0;i--)
pDC1->Ellipse(xc-i*(int)dx,yc-i*(int)dy,xc+i*(int)dx,yc1+i*(int)dy);
と大きな円から小さな円に描くようにしたら描けました。
円は描けても、半円は描けませんよね^^。
ブラシを透明ブラシにすれば,小さい方から描いても消えることはないです。
半円はArcで描けるはずです。
というか,EllipseのヘルプにArcへのリンクがあるのですが……。
http://msdn.microsoft.com/library/en-us/gdi/fillshap_417p.asp
YuOさん
こんばんは。ブラシを透明にすれば良かったんですね。
Arcという関数があるんですね知りませんでした。
みなさん、ありがとうございました。