OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

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

  • すぐに回答を!
  • 質問No.112210
  • 閲覧数14446
  • ありがとう数3
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 60% (48/80)

MFCでプログラミングをしています。

SDIプログラムで、
メニューを選択すると「ある操作」をするように
作っています。

「ある操作」の中でループを回しており、
各ループ終了毎に更新結果を逐次描画させたいのですが、
うまく行きません。

ループの最後に

Invalidate(TRUE)

を書いてだめだったので、

pView->SetRedraw(TRUE);
pView->RedrawWindow();
pDoc->UpdateAllViews(NULL);

なども併用してみたのですが、
通過するだけで何もされません。

どなたかご教示よろしくお願いします。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全5件)

  • 回答No.1
レベル11

ベストアンサー率 43% (133/306)

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

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


  • 回答No.2
レベル8

ベストアンサー率 18% (11/58)

UpdateData(TRUE)かUpdateData(FALSE)だったと思います。 ...続きを読む
UpdateData(TRUE)かUpdateData(FALSE)だったと思います。
補足コメント
zico

お礼率 60% (48/80)

ご回答ありがとうございます。

早速MSDNで検索してみたのですが、
updatedataは
ダイアログボックス用のコマンドのようです。

通常のビューの場合で、お心当たりあればお願いします。
投稿日時 - 2001-08-01 17:39:56
  • 回答No.3
レベル11

ベストアンサー率 43% (133/306)

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

API32では強制全画面アップデートを掛けたい場合、
以下の呪文?を唱えます。

hWnd = 該当ウィンドウのウィンドウハンドル

 InvalidateRect( hWnd, NULL, FALSE );
 UpdateWindow( hWnd );

多少のヒントになれば...

#実は全く意図と違っていたりして...m(_"_;m
  • 回答No.4
レベル5

ベストアンサー率 80% (4/5)

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

定期的にコマンドハンドラからメッセージループに処理を戻してやるか、別スレッドを作成すると簡単になります。 ユーザー インターフェイス スレッド を検索してみてください。
  • 回答No.5
レベル7

ベストアンサー率 66% (6/9)

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

似たようなプログラムを作っていたところです
HWNDを指定するところに0を渡しています
0はデスクトップ自体のHWNDを示しているので。

これで全てのウィンドウが再描画を開始します。
実証済みです
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ