アプリ版:「スタンプのみでお礼する」機能のリリースについて

再描画の一般的な方法を教えてください。


セレクトボックスとテキストボックスが2つずつ。

□■□□
2番が選択されています

□□□■
4番が選択されています

こんな窓が、別窓に隠れてから復活して再描画する場合、
case WM_PAINT: でセレクトボックスのチェック状態を
調べるのはよくなく、再描画のために、フラグを用意して、
セレクトボックスに変化があった場合はフラグを書き替えて、
テキストボックスの描画はフラグの値を参照した方がいいと
思いました。
この例の場合はセレクトボックスを調べるだけだから
セレクトボックスを調べてもいいと思うけど、もっと複雑な計算をしたり
大きなファイルを読み込ませた結果でテキストボックスの値が決まる場合の
ことを考えたら、フラグを用意するのがいいと思いました。

でも、セレクトボックスとテキストボックスがもっとたくさんあったり
した場合には、フラグの数が多くなるから、フラグを参照するより、
再描画のために、表示に変化があった場合には、窓のクライアント全体を
メモリに保存しておいて、再描画ではメモリから表示した方がいいとも
思いました。

たくさんの種類のセレクトボックスとか文字とかがある窓は
普通はどんな風に再描画させているんですか?

A 回答 (1件)

またまた、お邪魔します。


以前の質問と同じような回答になるのですが、これも別ウィンドウですから、親ウィンドウの WM_PAINT とは無関係です。それぞれのコントロールは無効領域が発生すると勝手に再描画します。標準のコントロールだけを貼り付けたダイアログボックを作成する場合、おそらく描画処理は一切必要無いでしょう。

状態の取得に関しては、そのたびに SendMessage するのでもいいのですが、コントロールによっては変更された事を親ウィンドウに通知してくるものもあるので、そのメッセージを拾って変数に保存するようにすれば、よりイベントドリブンな無駄の少ないプログラムになると思います。
    • good
    • 0
この回答へのお礼

まだそれを作ってなくて、想像だけで再描画が大変だと
思っていたけど、これもそれぞれのオブジェクトが別窓
だから再描画の必要がなかったんですねー。
それを考えたら、TextOut( ) がたくさんある hWnd の
再描画は、TextOut( ) を hWnd でなく、
CreateWindow( ) で別窓に書けば、条件による
書き換えとか再描画が楽になると思いました。

状態の取得は SendMessage(hWnd, ... がよさそうですか。
ありがとうございます。

お礼日時:2002/01/12 23:06

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