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