ボタン押し続けの質問

[戻る]
ひめじ 2007/02/24(土) 16:21:20
VC2003のMFCでの質問です。

ダイアログアプリをつくり1つのピクチャーボックスを張りつけ、
ボタンを押したときにファイルから1レコード読み出しては
ピクチャーボックスにグラフを描画しています。
ボタンを押せば押すほどレコード番号が進んでいき、
グラフが描画されていきます。
このファイルには1秒間隔で収集したデータが入っています。

ここで質問ですが、ボタンを1クリック押す分には毎回描画がされるのですが、
ボタンにカーソルがある状態でエンターキーを押し続けると
ボタンの処理は何度も呼ばれているのですがボタンを離したときにしか描画されません。

ボタンを押した時のプログラムはこんな感じです。
void CTest::OnBnClickedButton1()
{
  DrawGraph(); //この中でレコード読込み座標を生成しPictureBoxコントロールに渡す
  PictureBox.Invalidate(FALSE);
}

FALSEをTRUEに変えたり
最後にPumpMessageをおいてみたり
Sleepを入れてみたり色々やりましたが
描画がボタンを離したときになります
どうしたら押し続けながら描画させることが出来ますか?

wclrp ( 'o') [HomePage] 2007/02/24(土) 16:43:05
直に描画をしているわけじゃなくて
CWnd::Invalidateを使用しているなら
キューにウィンドウメッセージが溜まっていないときにしか
WM_PAINTを処理しません。
描画より他の処理を優先にしています。

今その場でWM_PAINTを処理させたいときは
CWnd::UpdateWindowを使う。
これでCWnd::UpdateWindow実行中に
そのウィンドウにWM_PAINTを処理させることになる。

ひめじ 2007/02/24(土) 16:56:11
[[解決]]
回答ありがとうございます。

教えていただいたようにUpdateWindowを追加することで
エンター押し付け中にでもちゃんと描画されました。
本当に助かりました。ありがとうございました。

void CTest::OnBnClickedButton1()
{
  DrawGraph(); //この中でレコード読込み座標を生成しPictureBoxコントロールに渡す
  PictureBox.Invalidate(FALSE);
  PictureBox.UpdateWindow();//追加
}

古いスレッドには追加発言できません。