我定义了两个HOTKEY:
IDHotKey1 = GlobalAddAtom("registerHotKeyWindow1");
 IDHotKey2 = GlobalAddAtom("registerHotKeyWindow2");
 RegisterHotKey(hwnd, IDHotKey1, MOD_CONTROL|MOD_ALT, VK_F1);
 RegisterHotKey(hwnd, IDHotKey2, MOD_CONTROL|MOD_ALT, VK_F2);
消息中如下处理:
case M_HOTKEY:
 switch(wParam)
 {
 case IDHotKey1:
 
 ShowWindow (hwnd, SW_SHOWNORMAL) ;

 return 0;
 case IDHotKey2:
 ShowWindow (hwnd, SW_HIDE) ;
 return 0;
                    }编绎就这样:
D:\win32ѧϰ\123\123.c(207) : error C2051: case expression not constant
D:\win32ѧϰ\123\123.c(212) : error C2051: case expression not constant
Error executing cl.exe.123.exe - 2 error(s), 0 warning(s)说是什么类型不运行啊的,我查了MSDN上,wParam定义的是INT啊,GlobalAddAtom返回的也是INT,为什么会出现这个问题?
还有,我改成这样:
if(wParam==IDHotKey1)
 {
 
 ShowWindow (hwnd, SW_SHOWNORMAL) ;

 return 0;
 }
 else{
 
 ShowWindow (hwnd, SW_HIDE) ;
 return 0;
 }
就通过了,但是只是执行ELSE里的,HOTKEY1就冒得用了,为么事啊,望高手解答!
顺便想问一哈,任务管理器结束进程发送的是什么消息啊,我试了的,不是WM_QUERYENDSESSION和WM_ENDSESSION,SPY了一下,说是一个未知消息,有人知道么?先谢了!

解决方案 »

  1.   

    case中要求是常量,你可以加const定义
      

  2.   

    #define CUSTOM_HOTKEY     1001RegisterHotKey(hwnd, CUSTOM_HOTKEY, MOD_CONTROL|MOD_ALT, VK_F1);
    RegisterHotKey(hwnd, CUSTOM_HOTKEY + 1, MOD_CONTROL|MOD_ALT, VK_F2);...
    case M_HOTKEY:
     switch(wParam)
     {
     case CUSTOM_HOTKEY:
     
     ShowWindow (hwnd, SW_SHOWNORMAL) ; return 0;
     case CUSTOM_HOTKEY + 1:
     ShowWindow (hwnd, SW_HIDE) ;
     return 0;
                        }
      

  3.   

    http://msdn.microsoft.com/msdnmag/issues/1200/c/default.aspxQ100770:
    How to use accelerator keys and a main menu on the dialog box in Visual C++
    http://support.microsoft.com/kb/100770/en-us