c++ - 单击几下后 WinAPI 菜单卡住

标签 c++ c winapi

我有一个 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;
}

最佳答案

您可能在每次调用 WndProc 时创建菜单时用完句柄。这个函数被调用了很多次!

在应用程序初始化期间创建一次菜单。

关于c++ - 单击几下后 WinAPI 菜单卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13238632/

相关文章:

c++ - boost::asio::streambuf 为空?

c++ - 指向子类的指针

c++ - 使用自定义消息防止 Windows 关机

c - 我的子类化公共(public)控件工具提示是否会先于我在 WM_DESTROY 中自行销毁?

c - 从编辑控件获取 Unicode 字符串

c++ - 使用 gcc 和 termios 将 uint8_t 数组传递给 Arduino

c++ - 引用特征矩阵

C 使用 Linux shell 函数

c - Makefile:将新规则添加到其他makefile中包含的规则中

c - 使用 pthreads 并行实现高斯消元