主题:[原创]组合键问题
			 bandit008
				 [专家分:30]  发布于 2008-04-23 21:43:00
 bandit008
				 [专家分:30]  发布于 2008-04-23 21:43:00							
			请教各位个问题:
如何捕获组合键的消息? 
我在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个回复)
		
								
				沙发
				
					 风奉 [专家分:260]  发布于 2008-04-24 11:36:00
风奉 [专家分:260]  发布于 2008-04-24 11:36:00				
				如果是想得到功能键是否按下可以用GetKeyState(VK_LSHIFT),返回值If the high-order bit is 1, the key is down; otherwise, it is up. 
查下msdn就知道了
							 
						
				板凳
				
					 bandit008 [专家分:30]  发布于 2008-04-24 20:54:00
bandit008 [专家分:30]  发布于 2008-04-24 20:54:00				
				    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 楼
				
					 bandit008 [专家分:30]  发布于 2008-04-25 15:21:00
bandit008 [专家分:30]  发布于 2008-04-25 15:21:00				
				问题已解决!谢谢 风奉 !
							 
						
				4 楼
				
					 vfdff [专家分:740]  发布于 2008-05-24 00:52:00
vfdff [专家分:740]  发布于 2008-05-24 00:52:00				
				if( (pMsg->wParam==VK_CONTROL) &&  GetKeyState(VK_SHIFT))
    {    
         
       
            //my code
     
    }
							 
									
			
我来回复