電子書籍の厳選無料作品が豊富!

Visual studio 2008のMFCで、とあるプログラムを作っております。
ボタンをクリックすると円が出てきて、さらにクリックするとその下に円が表示されるというプログラムまで作りました。

void C***Dlg::OnBnClickedButton1(){
CDC* pDC=m_pict.GetDC();
CRect rect;
m_pict.GetClientRect(&rect);
pDC->Rectangle(&rect);
CPen pen_red(PS_SOLID,1,RGB(255,0,0));
CBrush br_yellow(RGB(255,255,0));
CPen* oldpen=pDC->SelectObject(&pen_red);
CBrush* oldbr=pDC->SelectObject(&br_yellow);
pDC->Ellipse(-252,i-43,-212,i-3);
i=i+48;
UpdateWindow();
pDC->SelectObject(oldpen);
pDC->SelectObject(oldbr);
// TODO: ここにコントロール通知ハンドラ コードを追加します。
}

とりあえずOnBnClickedButton1関数はこんな感じです。
ここから、
(1)クリックすると円が自動で動き、途中で止まり、しばし経ってから動き出してやがて上へ消えてゆく。
(2)2つ目の円も同じように動くが、1つ目の円が止まっていて重なりそうになったらその手前で止まる。
(3)1つ目の円が上に消えたら、2つ目の円が動き出し、以降は(1)と同じ動きをする。

このようなプログラムを作りたいのですが、初心者のためどのようなツールをどのように使えば良いのかわかりません。
どなたがヒントだけでもご教授頂けませんでしょうか?

A 回答 (1件)

>(1)クリックすると円が自動で動き、途中で止まり、しばし経ってから動き出してやがて上へ消えてゆく。


>(2)2つ目の円も同じように動くが、1つ目の円が止まっていて重なりそうになったらその手前で止まる。
>(3)1つ目の円が上に消えたら、2つ目の円が動き出し、以降は(1)と同じ動きをする。

タイマーかスレッド…でしょうね。
しかし…このイベントハンドラで描画すると場合によっては消えてしまいますよ。
# 描画された後、最小化して戻してみると………。
# あるいは他のウィンドウを重ねて、どかしてみると………。
ウィンドウのメンバに円の座標の中心座標やサイズを保持するメンバを追加し、
OnPaint()などでそれらの情報から描画するようにするべきでしょう。

それぞれの円の中心座標と半径と移動速度のデータがあれば、(2)の要件は算出可能なハズです。
# X座標が同じなら計算もそう難しくないでしょう。 ズレている場合は少々面倒ですが。
# 「円 当たり判定」辺りで検索して下さいな。
    • good
    • 0
この回答へのお礼

ありがとうございます!
参考にします!

お礼日時:2012/06/23 00:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!