如何设置键盘响应函数?诸如同时按下 Ctrl 加 <-(左移)
或同时按下 Alt + -> (右移) 这样的复合系统消息键消息?以Ctrl加 <-(左移键)为例吧。怎么设置呢?
(在VC.net中添加消息函数)具体说一下步骤。谢谢。
我只会添加OnKeyDown()一类的单键消息。
或同时按下 Alt + -> (右移) 这样的复合系统消息键消息?以Ctrl加 <-(左移键)为例吧。怎么设置呢?
(在VC.net中添加消息函数)具体说一下步骤。谢谢。
我只会添加OnKeyDown()一类的单键消息。
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_LEFT:
if(::GetKeyState(VK_CONTROL) < 0)
MessageBox("hello");
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
就像添加WM_KEYDOWN是在某个类的“属性”里面点击“消息”的小图标可以出现添加WM_KEYDOWN 函数一样,
是不是直接在WM_KEYDOWN() 函数里面的case VK_LEFT: 后面直接添加
if(::GetKeyState(VK_CONTROL) < 0)来判断VK_CONTROL的状态就行了呢?
不是在WM_KEYDOWN.
对话框重载PreTranslateMessage(vc2003消息傍边不是有个"重写"小图标吗)
void CMydilog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar==VK_LEFT&&::GetKeyState(VK_CONTROL))
{
MessageBox("left","test",MB_OK);
}
…………
}
void CMydilog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar==VK_LEFT&&::GetKeyState(VK_CONTROL))
{
MessageBox("left","test",MB_OK);
}
…………
}
这样也可以。不过却有个BUG
就是在不按下Ctrl 键的情况下也会响应Ctrl+ ->键组合
因为必须要再按一次Ctrl 键,if(GetKeyState(VK_CONTROL))才会失效