windows_键盘消息

键盘消息分为2种:

系统键盘消息 和 普通系统消息

 

virtual LRESULT OnKeyUp(WPARAM wParam, LPARAM lParam);//普通键盘弹起


virtual LRESULT OnKeyDown(WPARAM wParam, LPARAM lParam);//普通键盘按下


virtual LRESULT OnChar(WPARAM wParam, LPARAM lParam);//普通字符


virtual LRESULT OnSysKeyUp(WPARAM wParam, LPARAM lParam);//系统按键弹起


virtual LRESULT OnSysKeyDown(WPARAM wParam, LPARAM lParam);//系统按键按下

virtual LRESULT OnSysChar(WPARAM wParam, LPARAM lParam);//



case WM_KEYUP:
{

return OnKeyUp(wParam, lParam);
}
break;

case WM_KEYDOWN:
{
return OnKeyDown(wParam, lParam); 
}
break;

case WM_CHAR:
{
return OnChar(wParam, lParam); 
}
break;
case WM_SYSKEYUP:
{
return OnSysKeyUp(wParam, lParam); 
}
break;
case WM_SYSKEYDOWN:
{
return OnSysKeyDown(wParam, lParam);
}
break;
case WM_SYSCHAR:
{
return OnSysChar(wParam, lParam); 
}
break;
virtual LRESULT OnKeyUp(WPARAM wParam, LPARAM lParam);//普通键盘弹起


virtual LRESULT OnKeyDown(WPARAM wParam, LPARAM lParam);//普通键盘按下


virtual LRESULT OnChar(WPARAM wParam, LPARAM lParam);//普通字符


virtual LRESULT OnSysKeyUp(WPARAM wParam, LPARAM lParam);//系统按键弹起


virtual LRESULT OnSysKeyDown(WPARAM wParam, LPARAM lParam);//系统按键按下

virtual LRESULT OnSysChar(WPARAM wParam, LPARAM lParam);//



case WM_KEYUP:
{

return OnKeyUp(wParam, lParam);
}
break;

case WM_KEYDOWN:
{
return OnKeyDown(wParam, lParam); 
}
break;

case WM_CHAR:
{
return OnChar(wParam, lParam); 
}
break;
case WM_SYSKEYUP:
{
return OnSysKeyUp(wParam, lParam); 
}
break;
case WM_SYSKEYDOWN:
{
return OnSysKeyDown(wParam, lParam);
}
break;
case WM_SYSCHAR:
{
return OnSysChar(wParam, lParam); 
}
break;
virtual LRESULT OnKeyUp(WPARAM wParam, LPARAM lParam);//普通键盘弹起


virtual LRESULT OnKeyDown(WPARAM wParam, LPARAM lParam);//普通键盘按下


virtual LRESULT OnChar(WPARAM wParam, LPARAM lParam);//普通字符


virtual LRESULT OnSysKeyUp(WPARAM wParam, LPARAM lParam);//系统按键弹起


virtual LRESULT OnSysKeyDown(WPARAM wParam, LPARAM lParam);//系统按键按下

virtual LRESULT OnSysChar(WPARAM wParam, LPARAM lParam);//



case WM_KEYUP:
{

return OnKeyUp(wParam, lParam);
}
break;

case WM_KEYDOWN:
{
return OnKeyDown(wParam, lParam); 
}
break;

case WM_CHAR:
{
return OnChar(wParam, lParam); 
}
break;
case WM_SYSKEYUP:
{
return OnSysKeyUp(wParam, lParam); 
}
break;
case WM_SYSKEYDOWN:
{
return OnSysKeyDown(wParam, lParam);
}
break;
case WM_SYSCHAR:
{
return OnSysChar(wParam, lParam); 
}
break;

 

系统消息 是在程序按住 alt  + 其他键的时候,才会产生系统消息

 

那么这个onchar是怎么产生的呢?那就是在我们输入可见字符的时候会产生

::TranslateMessage(&msg); 这个消息会把键盘消息转换为onchar消息,前提是这个字符是可见的

 

下面上实例:

拦截系统消息  和 拦截 普通按键组合消息

 

 

LRESULT QMainFrame::OnKeyUp(WPARAM wParam, LPARAM lParam){//当按键弹起的时候会发送这个消息
    strAll+=_T("WM_KEYUP\r\n");
    ::InvalidateRect(m_hWnd,NULL,TRUE);
    return QWnd::OnKeyUp(wParam,lParam);
}//普通键盘弹起


LRESULT QMainFrame::OnKeyDown(WPARAM wParam, LPARAM lParam){//这个消息如果一直按着的话,那么他就会一直发送这个按键消息
    strAll+=_T("WM_KEYDOWN\r\n");
    ::InvalidateRect(m_hWnd,NULL,TRUE);

    //如果是一般消息的话,则会进入这个方法,在这个方法里面判断ctrl+shift这些按键是否被按下,我们可以通过一个函数来判断;

    if(wParam=='A'){
        BOOL IsPress = ((GetKeyState(VK_CONTROL)& (1<<(sizeof(SHORT)*8-1))) != 0);//取出来和进行&运算,2个为1才为1,否则为0,如果为0表示他没按下
                if(IsPress){
                    PostQuitMessage(0);
                    return QWnd::OnDestroy(wParam,lParam);
                }
    }


    return QWnd::OnKeyDown(wParam,lParam);
}//普通键盘按下


LRESULT QMainFrame::OnChar(WPARAM wParam, LPARAM lParam){//能打印出的字符将会进入这个消息中,
    char c = (char)wParam;
    string temp;
    temp = c;
    strAll+="WM_ONCHAR"+temp;
    strAll+="\r\n";
    return QWnd::OnChar(wParam,lParam);
}//普通字符

LRESULT QMainFrame::OnSysKeyUp(WPARAM wParam, LPARAM lParam){//按住alt+其他键的时候,系统按键弹起会进入这个消息中,里面的全是大写
    
    return QWnd::OnSysKeyUp(wParam,lParam);
}//系统按键弹起


LRESULT QMainFrame::OnSysKeyDown(WPARAM wParam, LPARAM lParam){
    char c = (char)wParam;
    string temp;
    temp = c;
    strAll+="OnSysKeyDown"+temp;
    strAll+="\r\n";

    if(wParam == VK_F4){//拦截alt+f4关闭消息
        return true;
    }else if(wParam == VK_F5){//关闭
        wParam = VK_F4;
    }

    return QWnd::OnSysKeyDown(wParam,lParam);
}//系统按键按下

LRESULT QMainFrame::OnSysChar(WPARAM wParam, LPARAM lParam){//按住alt+其他键的时候会进入这个方法,里面全是大写
    /*char c = (char)wParam;
    string temp;
    temp = c;
    strAll+="OnSysChar"+temp;
    strAll+="\r\n";*/
    return QWnd::OnSysChar(wParam,lParam);
}//系统字符

 

 

 

 

posted @ 2013-08-17 23:39  宝贝,我永远都在  阅读(320)  评论(0)    收藏  举报