今回は、扱いやすい32ビットフルカラーDIBクラスを作ってみます。また、クラスもソースとヘッダを分け、プロジェクトに追加しやすい形にしてみました。
クラスをヘッダとソースに分けるのは簡単です。クラス内の変数や関数などの宣言をヘッダに書き、関数の定義をcppソースで書くだけ。例えば、今回のクラスは
#include <windows.h> class C32DIB { public: C32DIB(DWORD,DWORD); ~C32DIB(); LPBITMAPINFO getInfo(); DWORD getPixel(DWORD,DWORD); void setPixel(DWORD,DWORD,DWORD); void draw(HDC,DWORD,DWORD); private: LPVOID lpDIB; LPBITMAPINFO lpbiInfo; LPDWORD lpPixels; DWORD dwWidth,dwHeight; };
というヘッダになっていて、各関数を
#include "cfdib.h" C32DIB::C32DIB(DWORD dwW,DWORD dwH) { dwWidth=dwW; dwHeight=dwH; // DIB用メモリ確保 lpDIB=GlobalAlloc(GPTR,sizeof(BITMAPINFO)+dwWidth*dwHeight*4); // ポインタ設定 lpbiInfo=(LPBITMAPINFO)lpDIB; lpPixels=(LPDWORD)((LPBYTE)lpDIB+sizeof(BITMAPINFO)); // BITMAPINFO設定 lpbiInfo->bmiHeader.biSize=sizeof(BITMAPINFOHEADER); lpbiInfo->bmiHeader.biWidth=dwWidth; lpbiInfo->bmiHeader.biHeight=dwHeight; lpbiInfo->bmiHeader.biPlanes=1; lpbiInfo->bmiHeader.biBitCount=32; lpbiInfo->bmiHeader.biCompression=BI_RGB; }
という感じで定義していきます。後は、ヘッダとソースを「プロジェクトに追加」しておけば、他のソースから
static C32DIB *cdib; cdib=new C32DIB(100,100);
のようにして利用する事が出来ます。
クラスの中身は前回のDIBクラスとほぼ同じなので、ソースを見れば大体処理内容をつかめると思います。今回は、このクラスのインスタンスを使ってウインドウに赤い線を描いたビットマップを表示するメインプログラムを書いてみました。
プログラムをダウンロード・解凍したら、VC++5などでcfdib.dswを開いてください。他のプロジェクトでクラスを使う場合は、cfdib.hとcfdib.cppを「プロジェクトに追加」します。