この人頭いいなと思ったエピソード

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

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

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

ループの最後に

Invalidate(TRUE)

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

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

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

どなたかご教示よろしくお願いします。

A 回答 (5件)

InvalidateRect(0,0,false); //画面全体に再描画を要求



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

これで全てのウィンドウが再描画を開始します。
実証済みです

参考URL:http://www.ne.jp/asahi/nagoya/ahomaro/builder/cp …
    • good
    • 5

これはもしかすると、コマンドハンドラの中にループ処理がかかれているのではないでしょうか。


その場合、コマンドハンドラから抜けなければ Invalidate(TRUE) が発行した再描画メッセージを処理するチャンスがやってきません。

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

性懲りも無くまた来ました。



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

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

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

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

#実は全く意図と違っていたりして...m(_"_;m
    • good
    • 2

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

この回答への補足

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

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

通常のビューの場合で、お心当たりあればお願いします。

補足日時:2001/08/01 17:39
    • good
    • 0

MFCのクラスだとどうやるのかな...



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

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A