|
お初です。早速ですが、教えてください。
ゲームを作ろうとしています。しかし、肝心のタイトル表示から転んでます。
DirectXは使わずにAPIだけで作っています。OSはXP。使ってるソフトはVC6++です。
ソースは下に載せてあります。処理内容は見ていただければわかると思うので、症状を説明します。
そのままSelectObject(*hMemDC,hTitle)で描画しようとすると、サイズ指定はできないものの、ビットマップはビットマップと同サイズで描画されます。問題なのは、hTitleを一時的にhBackに入れて、それをBitBltで一部だけ切り取ってから
、hMemDCに入れると、描画したときに画面が真っ白になります。(ビットマップが描画されていない)
ビットマップの一部だけを切り取って描画する方法を教えてください。お願いします。真っ白になる原因もできればお願いします。
ちなみに、InitTitle関数はゲーム開始時に1度しか通らない関数です。
描画はGameMain関数です。BitBltで描画してます。
よろしくお願いします。
void GameMain(HWND hWnd)
{
HDC hdc;
static HDC hMemDC;
InitTitle(hWnd,&hMemDC);
hdc = GetDC(hWnd);
BitBlt(hdc,0,0,512,480,hMemDC,0,0,SRCCOPY);
ReleaseDC(hWnd,hdc);
}
void InitTitle(HWND hWnd,HDC *hMemDC)
{
HDC hdc = NULL;
HDC hBackDC = NULL;
HBITMAP hTitle = NULL;
hdc = GetDC(hWnd);
*hMemDC = CreateCompatibleDC(hdc);
hBackDC = CreateCompatibleDC(hdc);
hTitle = (HBITMAP)LoadImage(NULL,"title.bmp" ,IMAGE_BITMAP,512,480,LR_LOADFROMFILE);
PatBlt(*hMemDC,0,0,512,480,WHITENESS);
SelectObject(hBackDC,hTitle);
BitBlt(*hMemDC,0,0,100,100,hBackDC,120,120,SRCCOPY);
DeleteObject(hTitle);
DeleteDC(hBackDC);
ReleaseDC(hWnd, hdc);
}
|