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);
}//系统字符

浙公网安备 33010602011771号