2013-11-04 122 views
1

我遇到这个问题:错误:未申报LOWORD

LOWORD未申报

与这段代码:

case WM_COMMAND: 
     { 
      if (lParam==0) 
      { 
       if ((LOWORD)wParam==IDM_HELLO) 
        MessageBox(0, L"Hello", (LPCSTR)szClassName, MB_OK); 
      } 
     break; 
     } 

我不知道我的损失。任何人都帮助我?

+1

'LOWORD'是一个“函数”宏。我保证你投给'LPCSTR'会把你的文字搞砸。 – chris

+0

您使用'LOWORD'就好像它是您可以投入的类型一样,就像'DWORD'让我微笑......这是我在20年前开始使用WinAPI时会犯的一种错误,很久以前有像这样的互联网网站可以提供帮助。进步是美好的。这是一个宏,如果你想知道 - 它会给你一个DWORD的低位字节。 –

+1

@chris,当你使用函数宏作为对象时,它基本上根本不被识别。你没有得到一个函数宏被错误使用的诊断。例如,这允许'(getchar)()'调用真正的C函数而不是宏(如果有的话),而不必'#undef getchar'。 – Kaz

回答

2

LOWORD不是您将变量赋予变量的类型,而是提取32位值的低16位的宏。如果将其更改为:您的代码可能会编译为:

case WM_COMMAND: 
{ 
    if (lParam==0) 
    { 
     if (LOWORD(wParam) == IDM_HELLO) 
     { 
      MessageBox(0, L"Hello", (LPCSTR)szClassName, MB_OK); 
     } 
    } 
    break; 
} 
+0

** + 1 **这对解决这个问题有一半的作用......它当然比试图转换为LOWORD更好,但我认为值得一提的是宏定义在'Windef.h ',你可以通过包含'Windows.h'来隐式包含它。很难想象在不包含'Windows.h'的情况下定义'WM_COMMAND'的情况,但你永远不知道。 –