• ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>エディットボックスにGDIとかで絵を描くことは 可能な >んですか?またはピクチャーボックスですか? CWnd::GetDC() で CDC へのポインタを取得してやれば、ピクチャーボックスやエディットボックスといわず、どこへでも CDC の豊富な描画関数群で何でも描くことはできます。描き終わったら CWnd::ReleaseDC() で解放してやればいいです。問題は OnPaint() などで上書きされてしまうことです。(折角描いても再描画で消えてしまう)だから、OnPaint()にも同じような描画ロジックを組み込む必要があるかも知れません。 OnPaint() では CWnd::GetDC()や CWnd::ReleaseDC() 使ってはいけないのがポイントです。すでに OnPaint()では描画用のデバイスコンテキストがあるはずなのでそれを使ってください。 OnPaint()や自前でCWnd::GetDC()で描画ロジックを組み込むと SelectObject() で最初のオブジェクトに戻し忘れたり、DeleteObject() 忘れたりしてメモリーリークの原因になりがちなので気をつけてください。

mkmarimo
質問者

お礼

たびたびスイマセン。先ほどの補足ですが、できました。プログラムに励みますので、また私の質問を見かけたらご回答お願いします。SpiralGalaxyさんのような専門家の方に教えていただきますと、上達が早いような気がします。ありがとうございました。

mkmarimo
質問者

補足

回答ありがとうございます。エディットボックスでもどこでも描画関数を使うことができるんですね。で、早速プログラムに取り掛かってみたんですが、新たな疑問ができました。例えば、MoveTo(x,y), LineTo(x,y)などを用いて線を引く場合、線を引く対象をどうやってダイアログボックス内のエディットボックスにするのですか?クラスウィザードで線を引く予定のエディットボックスにコントロール型のメンバ変数を割り当ててそれをどこかで使うのかな?と思ったのですがどうもよくわかりません。もし、また時間があればご回答願います。

関連するQ&A