windowsAPI 画像の表示
画像が表示できません。
表示は
LoadBitmap()
と
BitBlt()
だと思うんですけど。。。
何回やってもできません。
LRESULT CALLBACK WindowProc (
HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
) {
HMENU hMenu, hSubMenu;
MENUITEMINFO mii;
HDC hdc,hBuffer;
RECT rect;
TEXTMETRIC tm;
PTSTR pstr;
PAINTSTRUCT ps;
static HFONT hFont;
static HDC hMemDC;
static HBITMAP hBitmap,hPrevBitmap;
static BITMAP bitmap;
switch(uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CLOSE:
if(MessageBox(hWnd,TEXT("ゲームを終了しますか?"),TEXT("アスパラインフォメーション"),MB_YESNO | MB_ICONINFORMATION) == IDYES){
DestroyWindow(hWnd);
}
return 0;
case WM_COMMAND: //有効なメニューが選択され、メニューの選択が終了した
switch(LOWORD(wParam)) {
case IDM_NEW:
pstr = TEXT("新しくゲームを始めますか?");
if(MessageBox(hWnd , pstr , TEXT("アスパラインフォメーション") , MB_YESNO | MB_ICONINFORMATION) == IDYES){
gamesystem = 1;
InvalidateRect(hWnd,NULL,TRUE);
}
break;
case IDM_OPEN:
pstr = TEXT("ゲームをロードしますか?");
if(MessageBox(hWnd , pstr , TEXT("アスパラインフォメーション") , MB_YESNO | MB_ICONINFORMATION) == IDYES){
}
break;
case IDM_CLOSE:
pstr = TEXT("ゲームを終了しますか?");
if(MessageBox(hWnd , pstr , TEXT("アスパラインフォメーション") , MB_YESNO | MB_ICONINFORMATION) == IDYES){
DestroyWindow(hWnd);
}
break;
default:
return 0;
}
return 0;
case WM_MENUSELECT: //メニュー項目が選択された
switch (LOWORD(wParam)) {
case IDM_NEW:
pstr = TEXT("新しくゲームを開始します");
break;
case IDM_OPEN:
pstr = TEXT("ゲームをロードします");
break;
case IDM_CLOSE:
pstr = TEXT("ゲームを終了します");
break;
default:
pstr = TEXT("ポップアップメニューが選択されています");
break;
}
hdc = GetDC(hWnd);
GetClientRect(hWnd , &rect);
GetTextMetrics(hdc , &tm);
Rectangle(hdc , 0 , rect.bottom - tm.tmHeight * 2, rect.right , rect.bottom);
TextOut(hdc , 5 , rect.bottom - tm.tmHeight * 1.5 , pstr , lstrlen(pstr));
ReleaseDC(hWnd , hdc);
return 0;
case WM_CREATE:
mii.cbSize = sizeof(MENUITEMINFO);
mii.fMask = MIIM_TYPE | MIIM_ID;
mii.fType = MFT_STRING;
hMenu = CreateMenu();
hSubMenu = CreatePopupMenu();
mii.dwTypeData = TEXT("ニューゲーム(&N)");
mii.wID = IDM_NEW;
InsertMenuItem(hSubMenu , 0 , TRUE , &mii);
mii.dwTypeData = TEXT("ロード(&O)");
mii.wID = IDM_OPEN;
InsertMenuItem(hSubMenu , 1 , TRUE , &mii);
mii.dwTypeData = TEXT("終了(&X)");
mii.wID = IDM_CLOSE;
InsertMenuItem(hSubMenu , 2 , TRUE , &mii);
mii.fMask = MIIM_TYPE | MIIM_SUBMENU;
mii.hSubMenu = hSubMenu;
mii.dwTypeData = TEXT("ファイル(&F)");
InsertMenuItem(hMenu , 0 , TRUE , &mii);
SetMenu(hWnd , hMenu);
hFont = CreateFont(
40,0,0,0,750,
FALSE,FALSE,FALSE,
SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
VARIABLE_PITCH | FF_ROMAN,NULL);
hBitmap = LoadBitmap(
((LPCREATESTRUCT)lParam)->hInstance ,
TEXT("KYARA")
);
return 0;
case WM_KEYDOWN:
InvalidateRect(hWnd,NULL,FALSE);
gamesystem += 1;
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
hBuffer = CreateCompatibleDC(hdc);
SelectObject(hBuffer , hBitmap);
BitBlt(hdc , 100 , 100 , 34 , 32 , hBuffer , 70 , 80 , SRCCOPY);
DeleteDC(hBuffer);
if(gamesystem == 1){
・・・・・・・・・・・・・・・・・
といった感じです。
間違えがあれば、ご指摘お願いします。
また、わかりやすいサンプルコードを載せていただけたら嬉しいです。
お礼
お返事ありがとうございます。 おっしゃられた通り、SelectObjectでもとの設定に戻してDeleteObjectしたら上手くいきました。