ダイアログベースで、OnPaintを使うには?

解決


ググ  2003-11-09 15:13:28  No: 52423  IP: [192.*.*.*]

プログラミング初心者です。

Visual C++6.0で、ダイアログベースで、アプリケーションを作成しております。
ダイアログに画像を表示するために、OnPaint関数にコードを書こうと思ったのですが、
void C***Dlg::OnPaint() 
{
  if (IsIconic())
  {   
              *1
         }
         else
  {   
              *2
          }
}
このようになっていて、*2の所へコードを書くように、本には書いてあるのですが、*1は、何をする時に書き込むのでしょうか?

いろいろな本や、サイトで調べましたが、「ここは別に何もしなくていい」というようなことしか書いてなかったので、よくわかりませんでした。

編集 削除
いぷ  2003-11-09 17:01:43  No: 52424  IP: [192.*.*.*]

IsIconic()
がどういう関数か調べればわかりそうなもんですが…

編集 削除
ググ  2003-11-09 17:59:53  No: 52425  IP: [192.*.*.*]

IsIconic()が、「ウインドウがアイコン化されているか判別する」っていうことは、わかっているのですが、最小化などされている時に、ダイアログに描画しても意味がないと思うので、「最小化から戻る時に*1のコードが実行される」(これは、自分のカンです。)とかの、コードが実行されるタイミングや、どういう時に使うのかを教えてもらいたいのです。

編集 削除
ヘンゼルの記憶  URL  2003-11-10 10:15:36  No: 52426  IP: [192.*.*.*]

これもカンですがこういうことは実際にやってみるのが一番速いと思われます(^^)b

というわけでウィザードにてダイアログ型テストアプリを作成し、以下の3個所にブレークを設定してみました。なお環境は、VC++6.0SP5(Windows2000)です。

1.メインダイアログ(最初にウィザードで作成されたもの)のOnPaintにおいてIsIconic()が真になったときのパス(つまり*1ですね)

2.モーダルな子ダイアログのOnPaintにおける*1

3.モードレスな子ダイアログのOnPaintにおける*1

なおそれぞれのダイアログにはリソースエディタにて「最小化ボタン」を付加しています。

結果はといいますと…1.ではなにをやってもブレークせず、2.および3.では最小化した瞬間にブレークしました。
ググさんが予想された「最小化から戻る時」にはブレークしませんでした。

と、この程度でよければ数分でテストアプリを作成して試せるのが、ウィザード + MFC のありがたいところだと思っています。

編集 削除
ググ  2003-11-10 13:29:36  No: 52427  IP: [192.*.*.*]

ヘンゼルの記憶さん、返信ありがとうございます。

僕も同じ実験をさせていただいたところ、1.の場合も最小化(アイコン化)した時にブレークしました。2.、3.は同じ結果が出ました。

とても勉強になりました。ありがとうございました。

編集 削除