- ベストアンサー
MFCの画像表示でBMP表示がよくわからない
- MFCの画像表示でBMP表示について詳細に紹介しているHPを教えてください。
- 下記のプログラムの画像の扱いで問題があるかどうか教えてください。
- 画像を敷き詰めるプログラムですが、問題なく動作しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
int topX=-100-5; int topY=0; int hLen=100; int wLen=100; int yoko=0; CDC *pDC=mPict.GetDC(); // bmpDC自体はループの外で宣言しておく CDC bmpDC; bmpDC.CreateCompatibleDC(pDC); CBitmap *pBitmap=CBitmap::FromHandle(hBitAry.GetAt(0)); // poldbmpは 初回のみ記憶すればいい CBitmap* poldbmp ~ bmpDC.SelectObject( pBmitmap ); BITMAP BMP; for(int i=0; i<hBitAry.GetCount(); i++) { pBitmap=CBitmap::FromHandle(hBitAry.GetAt(i)); pBitmap->GetBitmap(&BMP); if(yoko<3) { topX+=100+5; yoko++; } else { topX=0; topY+=100+5; yoko=0; } pDC->SetStretchBltMode(COLORONCOLOR); pDC->StretchBlt(topX,topY,100,100,&bmpDC,0,0,BMP.bmWidth,BMP.bmHeight,SRCCOPY); // bmpDCの状態を戻すのはループの外でいい // bmpDC.SelectObject(oldbmp); // ここでのDeleteObjectは pBitmapのメンバーで行う // ::DeleteObject(CBitmap::FromHandle(hBitAry.GetAt(i))); pBitmap->DeleteObject(); } // ここで戻す bmpDC.SelectObject(oldbmp); bmpDC.DeleteDC(); ReleaseDC(pDC); といった具合かと …
お礼
丁寧にご添削頂きありがとうございました。 どうも、上記で言えば、bmpDC.SelectObject(oldbmp) の仕組みがよくわからず悩んでいました。 お教え頂いたおかげで少しだけ"流れ"はわかったような気がします。 …ところで、あつかましついでですが、 この仕組みを紹介しているサイト等ご存じ ないでしょうか? 多くのページで"戻す"等の記述は見られるのですが、 なぜそうするのかという説明を見つけられませんでした。 こういったことを紹介しているHPがご存じであれば お教えください。 よろしくお願い致します。 *あと、2,3日でこの質問を切らせて頂くつもりです。 本当にありがとうございました。