在OnKeyDown()中,除了上、下、左、右键,其它键都响应,怎么回事,帮我解决一下。
解决方案 »
- 如何在WIN32控制台程序中编写文件的读入和写入
- matlab的代码实现的功能能在VC6.0上实现吗
- 用ADO连接数据的出现类型不匹配?
- 单文档的MFC程序,怎样为工具栏按钮添加图标呢
- 类的设计问题,高内聚低耦合 怎么处理 谢谢
- 多线程串口通讯问题
- 检测 64 位可移植性问题→您打开了吗?顺求:VS2003 英文版下载地址
- winsocket api 连接连接错误:错误代码10038,套接字句柄无效,求教高手该如何处理!
- 运行别人的程序时,提示CJ60libd.dll找不到,各位大侠,帮帮忙,这是什么原因啊?
- 连接错误
- VC里面计算平方根的API是什么?
- ADO连Access 2000问题(初学者问题)?
{
if(pMsg->message == WM_KEYDOWN)
{
}
}
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch(nChar)
{
case VK_LEFT:
{
if((GetKeyState(VK_CONTROL) & 0xFF00) != 0)
{
AfxMessageBox("VK_LEFT+CTRL");
}else
{
AfxMessageBox("VK_LEFT");
}
}
break;
case VK_RIGHT:
{
if((GetKeyState(VK_CONTROL) & 0xFF00) != 0)
{
AfxMessageBox("VK_RIGHT+CTRL");
}else
{
AfxMessageBox("VK_RIGHT");
}
}
break;
case VK_UP:
{
if((GetKeyState(VK_CONTROL) & 0xFF00) != 0)
{
AfxMessageBox("CTRL+VK_UP");
}else
{
AfxMessageBox("VK_UP");
}
}
break;
case VK_DOWN:
{
if((GetKeyState(VK_CONTROL) & 0xFF00) !=0)
{
AfxMessageBox("VK_DOWN+CTRL");
}else
{
AfxMessageBox("VK_DOWN");
}
}
break;
case VK_ESCAPE:
{
//退出十字光标
;
}
break;
default:
break;
} CWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
{
if(pMsg->message == WM_KEYDOWN) {}
{
CParent::PreTranslateMessage(MSG *pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
}
}
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
AfxMessageBox("ddd");
UINT nChar = pMsg->wParam;
switch(nChar)
{
case VK_LEFT:
{
if((GetKeyState(VK_CONTROL) & 0xFF00) != 0)
{
AfxMessageBox("VK_LEFT+CTRL");
}else
{
AfxMessageBox("VK_LEFT");
}
}
break;
case VK_RIGHT:
{
if((GetKeyState(VK_CONTROL) & 0xFF00) != 0)
{
AfxMessageBox("VK_RIGHT+CTRL");
}else
{
AfxMessageBox("VK_RIGHT");
}
}
break;
case VK_UP:
{
if((GetKeyState(VK_CONTROL) & 0xFF00) != 0)
{
AfxMessageBox("CTRL+VK_UP");
}else
{
AfxMessageBox("VK_UP");
}
}
break;
case VK_DOWN:
{
if((GetKeyState(VK_CONTROL) & 0xFF00) !=0)
{
AfxMessageBox("VK_DOWN+CTRL");
}else
{
AfxMessageBox("VK_DOWN");
}
}
break;
case VK_ESCAPE:
{
//退出十字光标
;
}
break;
default:
break;
} } return CDialog::PreTranslateMessage(pMsg);
}
{
AfxMessageBox("ddd"); // 这行是测试用的代码,可以删除
UINT nChar = pMsg->wParam;
。下面的代码其实和你在OnKeyDown里面写的一样。
不知道你是在哪里处理WM_KEYDOWN消息的?
当然,你也可以在主框架里处理PreTranslateMessage
怎样方便就看你自己了!(我一般在VIEW里就都解决了)
在PreTranslateMessage()里面
{
if(pMsg->message == WM_KEYDOWN)
{
//处理键盘消息
}
}
因为在 OnKeyDown 处理消息时实际上很多按键消息已经被过滤掉了
PreTranslateMessage(MSG *pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_LEFT:
....
retrun;
case VK_RIGHT:
...
return;
default:
break;
}
}
}