我在 win32 中有一个应用程序,它的主窗口中有一个顶部菜单,这个菜单有 2 个选项,每个选项都有子菜单。
问题是..点击它的选项后它突然冻结。应用程序的其余部分保持正常响应,但是当我单击菜单选项时,按钮会像按下一样向下,并且子菜单不会出现,我需要重新启动应用程序,否则它将不再工作。
我认为这与内存分配有关,也许我需要释放一些分配,但由于我是这种编程的新手,我可以说只是看着它。
一些代码..我认为它在我操作 WM_COMMAND 的窗口过程中出现了问题:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
HMENU hMenubar = CreateMenu();
HMENU hFile = CreateMenu();
HMENU hEDIT = CreateMenu();
HMENU hHelp = CreateMenu();
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case ID_FILE_DIALOG2:
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG2), hWnd, Add);
break;
case ID_FILE_TESTE:
Check();
break;
case ID_FILE_DIALOG1:
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, Conf);
break;
case ID_OPEN:
Open();
break;
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
break;
case WM_CLOSE:
DestroyWindow(hWnd);
PostQuitMessage(0);
break;
case WM_DESTROY:
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}