vs2005 MFCです
ダイアログベースでPNGを描画させたいのですが方法として
gid+を使おうと考えています。
1.GdiplusStartup()
2.ImageとしてPNGを読み込む
3.Gdiplus::Graphics() で描画させるDCを取得する
4.3のDCでDrawImage()で描画
という流れで処理しようとしています。が、描画できません。
概要ソース
Gdiplus::Image *pImage = new Image(Lc:\\test.png);
Gdiplus::Graphics Mydc(this->m_hWnd);
Mydc.DrawImage(pImage,0,0);
で描画できません。ご教授ください。
picture boxに描画させたいのですがpicture boxのdcでできなかったので
ダイアログに描画させようとしています。
描画コードはどこに書いているか?
PNGファイルは正しく読み込めているか?
(GDI+オブジェクトのnewは例外を投げないので
pImageがNULLでないこととGetLastStatus()の値を確認)
DrawImageでエラーになっていないか?
(戻り値がGdiplus::Okになっているか確認)
といったあたりを調べてみてはどうでしょうか。
>描画コードはどこに書いているか?
Dlgの::OnPaint()以外で書いていました。OnPaint()の中で書くと描画できました。
OnPaint()以外の部分でコードを書いてしまうとDlgの::OnPaint()
の処理で描画を上書きされているようです。
Gdi+を使うときはOnPaint()の中に処理を書かなければならないのでしょうか?
今の作りではそれは難しいです。
OnPaint()以外で処理して描画更新とかできないのでしょうか?
PNGの読み込みはImage::FromFile()としました。
GDI+とか関係なしに、一般的には裏画面と呼ばれるものに描画し、
OnPaintでそれを表画面に転記するようなつくりにします。
CreateCompatibleBitmap CreateCompatibleDC BitBlt
あたりをキーワードに調べてみてください。
>OnPaint()以外で処理して描画更新とかできないのでしょうか?
読み込みはOnPaint以外でやるべきですが、描画については
OnPaintでないとOSからの描画要求に応答できません。
プログラムからはInvalidateやInvalidateRectで
任意のタイミングで再描画できます。
#GDI+かどうかは関係ありません。
お二方、ありがとうございました。
描画設定、描画処理を切り分けるように変更しました。
解決です