• 締切済み

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

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

  • ピクチャーボックスの画像が欠けてしまいます。

    VB.NETとWinXPなのですが、 コマンドボタンを押して、ファイルダイアログボックスを開いて jpgファイルを指定するとピクチャーボックスにその 画像が表示されるようなものをつくっているのですが、 ピクチャーボックスの上に出るファイルダイアログボックスが重なっていた部分だけ画像が欠けてしまいます。 Picturebox1.Refresh()かなと思って試してみたのですが、今度は全部消えてしまいました。 良い方法があったら教えて頂きたいです。 よろしくお願いします。

  • アイコンをピクチャーボックスに表示したい・・

    かなり難しいとは思っていますが アイコンをBMP形式でリソースに取り込んであります。 ピクチャーボックスに表示させるには、どうすればいいでしょうか・・・ できればプログラムソースファイルもおねがいします・・

  • ボタンクリックでタブ内のピクチャコントロールに画像描画

    呼び出し元ダイアログ(A)と コンボボックスのあるダイアログ(B) そしてタブの中に入るダイアログ(C)があります。 それぞれのダイアログ内にあるものは以下のとおり A→ボタン1(IDC_BUTTON1)…Bを呼び出すためのもの   ボタン2(IDC_BUTTON2)…画像を呼び出すためのもの   タブ(IDC_TAB1)…Cが入るもの B→コンボボックス(IDC_COMBO1)…画像を選択するもの   ↓   dataは「picture1;picture2」   OK/CANCELボタン…略 C→ピクチャボックス(IDC_PICT1)…画像を表示させるためのもの プログラムでAのタブの中にCを入れるところを完成しました。 次に以下のようなことをやりたいのですが、どのように処理をしたらいいのかわかりません。 ボタン1を押す→Bが呼び出される→コンボボックスで画像を選択→ボタン2を押す→タブ内のピクチャボックスにコンボボックスで指定した画像が表示される。 というようにしたいです。 1つのダイアログ上で画像をピクチャボックスに表示するものはやったことがありますが、ダイアログを挟んでの表示はやったことがないためここ2日悩んでいます。 下手な説明かとは思いますがご教授の程よろしくお願いいたします。 ※コンボボックス変数→CComboBox m_combo; ピクチャボックス変数→CStatic m_picture;

  • ピクチャーボックスの大きさに合わせて画像を表示

    縦に長い画像をピクチャーボックスに表示したいのですが、 エクスプローラーの縮小表示と同じように 縦長の場合は左右に余白が出来て、画像の縦横比は 変更しないですべてを表示したいのですが、 どのようにしたら良いでしょうか。 PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage を使うと全部入るのですが、左右に余白がないように 引き伸ばしてしまうので、何の画像なのか分かりにくくなってしまいます。 よろしくおねがいします。m(__)m

  • ピクチャの画像の表示

    先日こちらで質問をして http://okwave.jp/qa/q8183443.html こちらを参考にパソコンを設定したところ http://weba03.blog96.fc2.com/blog-entry-681.html 動きがよくなったのですが ピクチャの画像の表示をしなくなり(海と島と空)が表示されるようになりました。 画像を選択すれば表示するのですが・・・ 元のように画像が見れるようにするにはどうすればいいでしょうか。 よろしくおねがいします。

  • ピクチャボックスにマウス周辺画像を表示させたい

    VB2010にて、ピクチャボックスにマウス周辺画像を表示させたいのですが、 どなたかやり方を御存じないでしょうか? 教えてください。よろしくお願いいたします。

  • ウィンドウに画像を表示するソフトを作っているのですが

    ピクチャーボックスに画像ファイルをドラッグ&ドロップすることで同ピクチャーボックスに画像を表示するソフトを作っているのですが ・実行ファイルに画像をドラッグ&ドロップすると画像を表示する ・既に画像を表示しているウィンドウ(ピクチャーボックス)に画像をドラッグ&ドロップすると、新しいウィンドウを開きそこにドロップされた画像を表示する このような動作をさせるにはどうプログラミングすればよいのでしょうか? Windows VistaでVisual Basic2008を使用しています。 よろしくお願いします。

  • Pictureで画像表示が

    Windows10です。エクスプローラから「ピクチャー」を選んでファイル名一覧でなく、そのファイルの画像が表示されるように設定したいのですが。

  • VC++のダイアログボックスに絵を描くには?

    VC++初心者なんですが、画像処理関係のプログラムをVC++で作っています。で、子ウィンドウに表示されている画像のRGBそれぞれのヒストグラムをダイアログボックスに表示したいのですが、ダイアログボックスに絵(グラフ)を描く方法がわかりません。どういう手順でやればいいですか?エディットボックスにGDIとかで絵を描くことは可能なんですか?またはピクチャーボックスですか?

  • ピクチャーボックス上に描いた円をうまく保存できません

    1.予めピクチャーボックスに画像を表示しておき 2.そのピクチャーボックス内に円を描き↓ Picture1.Circle (10, 10), 500 3.それら両方(1で予め表示しておいた画像と、2で描いた円)を保存しようと↓ SavePicture Picture1.Image, App.Path & "\Test.bmp" とすると、1で予め表示しておいた画像だけが保存され、2で描いた円が保存されません。 両方とも(1で予め表示しておいた画像の上に2で描いた円が表示されるように)保存したいのですが、どのようにすればよいでしょうか。 できれば具体的にサンプルコードなどをご教授いただけると大変ありがたく存じます。 恐れ入りますが、何卒よろしくお願いいたします(VB6.0)