C++ HANDLE#u MSG宏给出';句柄0xXXXX未定义';

C++ HANDLE#u MSG宏给出';句柄0xXXXX未定义';,c++,winapi,C++,Winapi,当我尝试在我的窗口过程中使用HANDLE_MSG宏时,出现以下错误: 错误:标识符“HANDLE_0xXXXX”未定义 其中0xXXXX取决于我作为宏参数给出的消息(0x0010表示WM_CLOSE,0x0002表示WM_DESTROY,依此类推) 在谷歌寻求帮助时,我甚至没有发现任何关于类似问题的提及 我正在Windows 8上使用Visual Studio 2013 Windows桌面预览版(尽管在VS 2012 Express for WD中也会发生同样的情况) 代码片段: #includ

当我尝试在我的窗口过程中使用HANDLE_MSG宏时,出现以下错误:

错误:标识符“HANDLE_0xXXXX”未定义

其中0xXXXX取决于我作为宏参数给出的消息(0x0010表示WM_CLOSE,0x0002表示WM_DESTROY,依此类推)

在谷歌寻求帮助时,我甚至没有发现任何关于类似问题的提及

我正在Windows 8上使用Visual Studio 2013 Windows桌面预览版(尽管在VS 2012 Express for WD中也会发生同样的情况)

代码片段:

#include "Precompiled Headers.hpp"    // includes i. a. Windows.h and windowsx.h

#include "MainWindowProcedure.hpp"

LRESULT __stdcall MainWindowProcedure(HWND mainWindow,
                                      UINT receivedMessage,
                                      WPARAM wordParameter,
                                      LPARAM longParameter)
{

    switch (receivedMessage)
    {

        HANDLE_MSG(mainWindow, WM_CLOSE, MainWindowOnClose);

        ...

        default:
            return DefWindowProc(mainWindow,
                                 receivedMessage,
                                 wParam,
                                 lParam);
        break;

    }

    return 0;

}

void MainWindowOnClose(HWND mainWindow)
{

    DestroyWindow(mainWindow);

}

我遇到了同样的问题,只是像下面三个例子那样扩展了宏

     //HANDLE_MSG(hwnd, WM_INITDIALOG, OnInitDialog);
case (WM_INITDIALOG) : return HANDLE_WM_INITDIALOG((hwnd), (wParam), (lParam), (OnInitDialog));
    //HANDLE_MSG(hwnd, WM_COMMAND, OnCommand);
case (WM_COMMAND) : return HANDLE_WM_COMMAND((hwnd), (wParam), (lParam), (OnCommand));
    //HANDLE_MSG(hwnd, WM_PAINT, OnPaint);
case (WM_PAINT) : return HANDLE_WM_PAINT((hwnd), (wParam), (lParam), (OnPaint));

HANDLE\u MSG
windowsx.h
中定义。您确定要通过.hpp包含它吗?它看起来像是在
HANDLE\u MSG
宏之前展开的
WM\u CLOSE
宏。
预编译头.hpp中的include
顺序可能有问题。发布此文件内容,或者只是尝试更改包含行的顺序。实际上,包含行的顺序并不重要。预处理器中的Bug?如何在您的计算机上的windowsx.h中定义HANDLE#MSG宏,您可以发布其定义吗?HANDLE#MSG定义:#定义HANDLE#MSG(hwnd,message,fn)\case(message):返回HANDLE#message((hwnd),(wParam),(lParam),(fn))是否尝试禁用预编译头?