• 締切済み

ピクチャボックスに画像表示 画像が表示されない

http://suger-poem.blog.so-net.ne.jp/2008-07-19 のサイトを参考に画像表示のプログラムを組みました。 実行してファイルダイアログは表示されるものの ピクチャボックスに一瞬表示されすぐに消えてしまいます。 これは何が原因なのでしょうか?

みんなの回答

回答No.2

 こんにちは。 >>これは何が原因なのでしょうか?  多分、ReleaseDC()に指定したウィンドウハンドルが、間違っているのかなと・・・。  其のまま真似しているならば、「(1)OnPaint()の処理」の以下の「オブジェクトの開放」部分を以下の様に書き換えて見て下さい。  ただし、此れで万事解決かどうかは、分かりません。   // オブジェクトの開放 ::ReleaseDC(m_pict.GetSafeHwnd(), hDC);

  • momenlara
  • ベストアンサー率60% (6/10)
回答No.1

ソースコードの提示がないので詳細は分かりませんが、 どうも参考にされているコードに問題がある気がします。 まず、OnPaint()は再描画の必要があると何度でも呼ばれる可能性があります。 ウィンドウの上をマウスカーソルが通っただけでも再描画の必要があります。 その点をふまえて、微妙なのは「(1) OnPaint()の処理」の中の以下です。 (ちなみに元サイトではOnPrintと書かれていますが、おそらく誤りでしょう) > // 画像の準備ができていなければリターン > if (m_img.IsNull()) return; いや、この処理自体は必要だと思いますが、 OnPaintの最後でm_imgを削除してしまっています。 > m_img.Destroy(); ボタンを押してイメージがロードされた後、 最初のOnPaint()ではm_imgが有効なので描画がおこなわれます。 しかし、OnPaint()の最後でm_imgを削除しているので、 それ以降のOnPaint()では画像の準備ができていないとして、 returnしていると思われます。 ちなみに元から書かれているCDialog::OnPaint()では、 ダイアログの描画を全てクリアしていたと思います。 わたしがこのコードを修正するとしたら、 m_img.Destroy()をOnPaintではなく、終了処理の中に書きます。 ダイアログベースのMFCだとOnClose辺りでしょうか。 詳しくはダイアログを閉じるときの処理について 調べてみることをおすすめします。

関連するQ&A