• 締切済み

画面を強制的に再描画させる方法

MFCでプログラミングをしています。 SDIプログラムで、 メニューを選択すると「ある操作」をするように 作っています。 「ある操作」の中でループを回しており、 各ループ終了毎に更新結果を逐次描画させたいのですが、 うまく行きません。 ループの最後に Invalidate(TRUE) を書いてだめだったので、 pView->SetRedraw(TRUE); pView->RedrawWindow(); pDoc->UpdateAllViews(NULL); なども併用してみたのですが、 通過するだけで何もされません。 どなたかご教示よろしくお願いします。

みんなの回答

回答No.5

InvalidateRect(0,0,false); //画面全体に再描画を要求 似たようなプログラムを作っていたところです HWNDを指定するところに0を渡しています 0はデスクトップ自体のHWNDを示しているので。 これで全てのウィンドウが再描画を開始します。 実証済みです

参考URL:
http://www.ne.jp/asahi/nagoya/ahomaro/builder/cpb-050.html
回答No.4

これはもしかすると、コマンドハンドラの中にループ処理がかかれているのではないでしょうか。 その場合、コマンドハンドラから抜けなければ Invalidate(TRUE) が発行した再描画メッセージを処理するチャンスがやってきません。 定期的にコマンドハンドラからメッセージループに処理を戻してやるか、別スレッドを作成すると簡単になります。 ユーザー インターフェイス スレッド を検索してみてください。

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.3

性懲りも無くまた来ました。 API32では強制全画面アップデートを掛けたい場合、 以下の呪文?を唱えます。 hWnd = 該当ウィンドウのウィンドウハンドル  InvalidateRect( hWnd, NULL, FALSE );  UpdateWindow( hWnd ); 多少のヒントになれば... #実は全く意図と違っていたりして...m(_"_;m

  • papataku
  • ベストアンサー率18% (11/58)
回答No.2

UpdateData(TRUE)かUpdateData(FALSE)だったと思います。

zico
質問者

補足

ご回答ありがとうございます。 早速MSDNで検索してみたのですが、 updatedataは ダイアログボックス用のコマンドのようです。 通常のビューの場合で、お心当たりあればお願いします。

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.1

MFCのクラスだとどうやるのかな... C(API及びAPI32)の場合では、Redraw用のレクトアングル情報を与え直してからUpdateするようにしていました。

関連するQ&A