c++ - SendMessage() 和 PostMessage() 的正确用法

标签 c++ winapi

我在正确使用 SendMessage() 和 PostMessage() 方面遇到了问题。我想做的是 SendMessage(hWnd, WM_USER + 1, 0, 0); 在我的窗口过程中

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;

switch (message)
{
case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);
    // Parse the menu selections:
    switch (wmId)
    {
    case WM_CREATE:
        break;
    case IDM_ABOUT:
        DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
        break;
    case IDM_EXIT:
        DestroyWindow(hWnd);
        break;
    case WM_USER:
        break;
    case WM_USER + 1:
        break;
    default:
        if (grid.ProcessEvent(wmId, wmEvent))
        {
            SendMessage(hWnd, WM_USER + 1, 0, 0);
            break;
        }
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    break;
case WM_DESTROY:
    PostQuitMessage(0);
    break;
default:
    return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

我不太确定为什么它不起作用,也许有人可以提供帮助。我确定调用了 SendMessage(...) 但它不会影响使用我的参数运行 WndProc。

最佳答案

case 标签 case WM_USER + 1: 嵌套在内部 case 语句中(打开 wmId)。它需要移出到 switch (message) case 语句中,因此它与 case WM_COMMAND:case WM_DESTROY:< 处于同一嵌套级别.

以上内容也适用于 case WM_USER:

关于c++ - SendMessage() 和 PostMessage() 的正确用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27080404/

相关文章:

c - 使用 Win32 API 实现流畅的动画 - 无需控制消息泵

c++ - 在没有 'extern' 的情况下访问别处定义的变量值的最佳方法?

C++ 字符串到字节错误

C++ 线程 - 没有匹配的调用函数

c# - 未正确对齐的字段

c++ - 如何复制文件但触摸新拷贝上的时间戳?

c - 使用 `PostQuitMessage` 和只处理所有消息有区别吗?

c++ - 我可以使用 Boost.Asio 和 Boost.Beast 库发出 HTTPS 请求或 HTTP/2 请求吗?

c++ - 在 Eclipse 中使用自己的 Makefile 导入现有的 QT C++ 项目

c++ - 如何将剪贴板文本分配给 C++ 中的变量?