如果按下 shift 键,我试图让我的程序切换一个布尔值。但是,由于某种原因,它似乎没有收到消息,因为我已经将 MessageBoxes 放在 KEYDOWN 和 KEYUP 情况下,并且它们不会被触发。这感觉像是一个菜鸟问题,但任何帮助将不胜感激。
BOOL CALLBACK CreateRoom(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
static char *achTileDetails = new char[100,100];
static POINT *pDimensions = new POINT, *pMonsterLocations = new POINT[10], *pMinDisplay = new POINT, *pMaxDisplay = new POINT;
static HBITMAP *pahbmTileset = new HBITMAP[4];
static bool *pbShowBars = new bool;
switch(Message)
{
case WM_INITDIALOG:
g_hDialogInUse = hwnd;
SetFocus(hwnd);
for (int iii = 0; iii < 100; iii++)
for(int jjj = 0; jjj < 100; jjj++)
achTileDetails[iii,jjj] = 'g';
(*pDimensions).x = 20;
(*pDimensions).y = 10;
(*pMinDisplay).x = 0;
(*pMinDisplay).y = 0;
(*pMaxDisplay).x = 20;
(*pMaxDisplay).y = 10;
for (int iii = 0; iii < 4; iii++)
pahbmTileset[iii] = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_CLEAR_GROUND + iii));
return TRUE;
case WM_PAINT:
DisplayRoom(hwnd, achTileDetails, *pMaxDisplay, *pMinDisplay, pahbmTileset, *pbShowBars);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDCANCEL:
delete[] achTileDetails;
delete pDimensions;
delete[] pMonsterLocations;
delete pMinDisplay;
delete pMaxDisplay;
delete[] pahbmTileset;
delete pbShowBars;
EndDialog(hwnd, IDCANCEL);
break;
}
break;
case WM_LBUTTONDOWN:
break;
case WM_KEYDOWN:
MessageBox(hwnd, "Down", "", NULL);
switch (wParam)
{
case VK_SHIFT:
*pbShowBars = true;
InvalidateRect(hwnd, NULL, TRUE);
UpdateWindow(hwnd);
break;
}
break;
case WM_KEYUP:
{
MessageBox(hwnd, "Up", "", NULL);
switch(wParam)
{
case VK_SHIFT:
*pbShowBars = false;
InvalidateRect(hwnd, NULL, TRUE);
UpdateWindow(hwnd);
break;
}
}
break;
default:
return FALSE;
}
}
消息循环:
while(GetMessage(&Msg, NULL, 0, 0) != 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
现在这是此回调的完整代码。我知道顶部的各种静态动态变量可能不是最有效的方法,但可以满足我的目的。