• 締切済み

MFCでボタンを押して図形を操作するには

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)と同じ動きをする。 このようなプログラムを作りたいのですが、初心者のためどのようなツールをどのように使えば良いのかわかりません。 どなたがヒントだけでもご教授頂けませんでしょうか?

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>(1)クリックすると円が自動で動き、途中で止まり、しばし経ってから動き出してやがて上へ消えてゆく。 >(2)2つ目の円も同じように動くが、1つ目の円が止まっていて重なりそうになったらその手前で止まる。 >(3)1つ目の円が上に消えたら、2つ目の円が動き出し、以降は(1)と同じ動きをする。 タイマーかスレッド…でしょうね。 しかし…このイベントハンドラで描画すると場合によっては消えてしまいますよ。 # 描画された後、最小化して戻してみると………。 # あるいは他のウィンドウを重ねて、どかしてみると………。 ウィンドウのメンバに円の座標の中心座標やサイズを保持するメンバを追加し、 OnPaint()などでそれらの情報から描画するようにするべきでしょう。 それぞれの円の中心座標と半径と移動速度のデータがあれば、(2)の要件は算出可能なハズです。 # X座標が同じなら計算もそう難しくないでしょう。 ズレている場合は少々面倒ですが。 # 「円 当たり判定」辺りで検索して下さいな。

speeeeeeedd
質問者

お礼

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