SDK-MFC 備忘録 |
Windows SDKやMFCに関するメモです。
(記載内容について正しいことを保証するものではありません。MSDN等で確認してください)
作成:2009/9/20
mfcにはCImageという非常に便利なクラスがあります。このクラスの実装に関するちょっとしたメモです。
1)Create方法
CImageのCreate方法は様々な方法があるが最も簡単なのは、サイズと1pxのビット数を指定する方法です。
CImage Image;
:::::
BOOL ret = Image.Create(100, 50, 16);
上記は、幅100px,高さ50pxの16bitカラーのCImageオブジェクトを作成しています。
2)CDCを取得する。
CImageのオブジェクトからHDCの取得は、GetDC()関数で取り出します。ただmfcではCDCの方が何かと便利なので、さらにCDCに変換してやると便利です。
CDC* pDC = CDC::FromHandle(Image.GetDC()); //描画を行う。 pDC->Rectangle(0, 40, 100, 50); Image.ReleaseDC();//必ず開放する事! //GetDC()を行ったときは必ずReleaseDC()で開放する必要があります。
3)CBitmapを取得する
CDCの場合と同様にCImageから直接取得できるのHBITMAPです。これをCBitmapに変換したほうが何かと便利です。
CBitmap* pBitmap = CBitmap::FromHandle((HBITMAP)Image);
4)その他
CImageはGDI+の機能を使用していますがCImageクラス内でGDI+の開始と終了処理を行っています。終了処理は最後のCImageクラスが破棄されたときに行うのでアンロードされない可能性があるようなDLL内での使用する場合は宣言位置に注意する必要があります。アンロードが不確かな場合は明示的にnewとdeleteでオブジェクト生成&破棄を行った方が良いでしょう。
CImageで16ビットビットマップをデフォルト作成した場合のRGBの形式はRGB555となるようです。
(MSDNのどこかに書いてました。場所は忘れました。)
CImageから取り出したHDCに対してGD+のAPIを適用するには別途アプリケーション側でGDI+の開始と終了の処理は必要です。