今回はビットマップ用ハンドルの登録用関数を作っている際、上手くいかなかったため質問しました。以下、質問内容です。
ビットマップファイルをロードし、ウィンドウ上に表示するためには次のようなプロセスが必要だと思います。
************************************
ハンドルの宣言→ハンドルの登録→bmp画像の描画→ハンドルの破棄
************************************
//宣言
static HDC hDC;
static HBITMAP hBMP;
static BITMAP BMP;
//登録
hDC = CreateCompatibleDC(NULL);
hBMP = (HBITMAP)LoadImage(NULL , TEXT("hoge.bmp") , IMAGE_BITMAP , 0 , 0 , LR_LOADFROMFILE);
GetObject(hBMP , sizeof(BITMAP) , &BMP);
SelectObject(hDC , hBMP);
//描画
BitBlt()等を用いて描画(質問とは直接関係しないため割愛)
//破棄
DeleteDC(hDC);
DeleteObject(hBMP);
しかし、bmpファイルをロードする度にこの工程を踏んでいたのではあまりにもソースが長くなってしまうため、これを関数にしてみようと思いました。
//宣言
static HDC hDC;
static HBITMAP hBMP;
static BITMAP BMP;
//ビットマップハンドル登録用の関数
void RegisterBitmapHandle(HDC hDC , HBITMAP hBMP , BITMAP* BMP , TCHAR* BitmapName ) {
hDC = CreateCompatibleDC(NULL);
hBMP = (HBITMAP)LoadImage(NULL , BitmapName , IMAGE_BITMAP , 0 , 0 , LR_LOADFROMFILE);
GetObject(hBMP , sizeof(BITMAP) , BMP);
SelectObject(hDC , hBMP);
}
//(使用例) RegisterBitmapHandle(hDC , hBMP , &BMP , TEXT("hoge.bmp") );
//ビットマップハンドル破棄用の関数
void DeleteBitmapHandle(HDC hDC , HBITMAP hBMP) {
DeleteDC(hDC);
DeleteObject(hBMP);
}
//(使用例) DeleteBitmapHandle(hDC , hBMP);
問題は自分がポインタを完璧に理解できていない点にあると思うのですが、具体的にどのように定義すればこの関数は正しく動作してくれるのでしょうか。
開発環境:
OS:Windows Vista Home Premium
コンパイラ名:VC++ 2010 Express