C++ SendMessage()和PostMessage()的正确用法

C++ SendMessage()和PostMessage()的正确用法,c++,winapi,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:

我在正确使用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

SendMessage被指定为在接收者窗口处理完该消息之前不返回,因为您在自己的WndProc内并且自己在发送消息,所以它无法执行此操作。这是您应该使用PostMessage的情况之一。

案例标签
case WM\u USER+1:
嵌套在内部案例语句中(打开
wmId
)。它需要移出到
开关(消息)
case语句,因此它与
case WM\u命令:
case WM\u DESTROY:
处于相同的嵌套级别

上述内容也适用于
案例WM\u用户: