2013-08-06 34 views
0

當我嘗試使用HANDLE_MSG宏在我的窗口過程中,我得到以下錯誤:HANDLE_MSG宏給了「HANDLE_0xXXXX未定義」

Error: identifier "HANDLE_0xXXXX" is undefined

其中0xXXXX月要看我給作爲參數傳遞給了什麼樣的信息宏(WM_CLOSE爲0x0010,WM_DESTROY爲0x0002等)。

我一直沒有發現關於類似問題的提及,同時搜索幫助。

我使用Visual Studio 2013預覽版Windows桌面上的Windows 8

(雖然同樣發生在2012 VS Express的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); 

} 
+0

'HANDLE_MSG'在'windowsx.h'中定義。你確定你通過你的.hpp包含它嗎? – simonc

+0

它看起來像'WM_CLOSE'宏在'HANDLE_MSG'宏之前展開。 'Precompiled Headers.hpp'中的'#include'命令可能存在一些問題。發佈此文件內容,或者只是嘗試更改包含行的順序。 –

+1

其實,包含行的順序並不重要。預處理器中的錯誤? HANDLE_MSG宏如何在您的計算機上的windowsx.h中定義,您可以發佈它的定義嗎? –

回答

0

我有同樣的問題,並像這三個例子展示的那樣擴大了Macro。

 //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));