回 帖 发 新 帖 刷新版面

主题:[原创]组合键问题

请教各位个问题:
如何捕获组合键的消息? 
我在PreTranslateMessage(MSG* pMsg)
if(pMsg->message == WM_KEYDOWN) 
    {
        if(pMsg->wParam==VK_CONTROL)
        {    
            if(LOWORD(pMsg->lParam)==VK_SHIFT)
            {
                //my code
            }
        }
    } 
 
LOWORD(pMsg->lParam)不能得到第二个键的参数。
怎么得到第二个键的参数呢?

回复列表 (共4个回复)

沙发

如果是想得到功能键是否按下可以用GetKeyState(VK_LSHIFT),返回值If the high-order bit is 1, the key is down; otherwise, it is up. 
查下msdn就知道了

板凳

    if(pMsg->wParam==VK_CONTROL)
    {    
        if (GetKeyState(VK_SHIFT))
        {
            //my code
        }
    }
这样可以实现,但有个问题就是:GetKeyState()只是判断是否按下过,也就是说不是同时按下两个键的时候(按下shift 松开 再按ctrl )my code也会执行,我想捕获的是同时按下的情况。查了下MSDN lparam的第29位是对ALT键的介绍:
Specifies the context code. The value is 1 if the ALT key is held down while the key is pressed; otherwise, the value is 0.

有更好的方法么?请不吝赐教!

3 楼

问题已解决!谢谢 风奉 !

4 楼

if( (pMsg->wParam==VK_CONTROL) &&  GetKeyState(VK_SHIFT))
    {    
         
       
            //my code
     
    }

我来回复

您尚未登录,请登录后再回复。点此登录或注册