重ね書き – プログラミング – Home

通知
すべてクリア

[解決済] 重ね書き


もじもじ君
 もじもじ君
(@もじもじ君)
ゲスト
結合: 21年前
投稿: 3
Topic starter  

みなさん、こん××は。
すでに何度も同じような質問があったかもしれません。過去ログをあったのですが、
よくわかりませんでした。

ダイアログベースでプログラムを書いています。円を連続的に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);


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

Ellipseは、円周を描き内部を塗りつぶす関数です。
ゆえに内側の円はどんどん塗りつぶされてしまいます。


返信引用
もじもじ君
 もじもじ君
(@もじもじ君)
ゲスト
結合: 21年前
投稿: 3
Topic starter  

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

と大きな円から小さな円に描くようにしたら描けました。
円は描けても、半円は描けませんよね^^。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

ブラシを透明ブラシにすれば,小さい方から描いても消えることはないです。
半円はArcで描けるはずです。

というか,EllipseのヘルプにArcへのリンクがあるのですが……。
http://msdn.microsoft.com/library/en-us/gdi/fillshap_417p.asp


返信引用
もじもじ君
 もじもじ君
(@もじもじ君)
ゲスト
結合: 21年前
投稿: 3
Topic starter  

YuOさん

こんばんは。ブラシを透明にすれば良かったんですね。
Arcという関数があるんですね知りませんでした。
みなさん、ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました