VC中关于处理键盘按键消息事件的问题!

腌鲜鳜鱼 2009-01-08 10:35:37
最近在VC6.0中写了个基于对话框的程序。其中要通过键盘的方向键移动对话框里Picture控件中所绘制线条的位置。
但是每次按方向键时,焦点总是会跑到其他控件上影响了对图像中线条的控制。跟踪调试时,发现按下方向键的事件
被处理了4次,请问如何排除这样干扰,使用方向键控制图像中的线时,焦点不会移动到其他地方而影响我想要的操作。
我的简略代码:
在对话框的PreTranslateMessage(MSG* pMsg)方法中处理键盘事件:
MyDialog::PreTranslateMessage(MSG* pMsg)
{
......
if (::GetKeyState(VK_LEFT)<0 && !(::GetKeyState(VK_MENU)<0))
{
//IDC_VIDEO是图像绘制的窗口,一个Picture控件
::SetFocus(this->GetDlgItem(IDC_VIDEO)->GetSafeHwnd()); //IDC_VIDEO是图像绘制的窗口
switch(isModifyParamStrand)
{
case 0:
return;
case 1:
this->Line->x--; //改变线的x坐标
break;
}
}
}
...全文
448 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuhuaqiang1118 2012-06-13
  • 打赏
  • 举报
回复
我也想用方向来控制方向,但就是焦点变了。这时要求控件的焦点不受影响。
腌鲜鳜鱼 2009-04-17
  • 打赏
  • 举报
回复
问题我几经解决,需要判断按下的键是什么,然后直接返回,跳过return CDialog::PreTranslateMessage(pMsg);
注意,不能完全跳过该语句,如果所有的消息都跳过这句,界面会死掉。如果有疑问可问我,相互学习呵呵。
levelmouse 2009-02-06
  • 打赏
  • 举报
回复
处理的时候将你的Picture控件SetFocus()
腌鲜鳜鱼 2009-02-06
  • 打赏
  • 举报
回复
好像有点问题:(
fleer 2009-01-08
  • 打赏
  • 举报
回复
把你其他控件的TabStop属性设置为false
或者处理的时候将你的Picture控件SetFocus()一下,让它一直保持焦点呢
fandh 2009-01-08
  • 打赏
  • 举报
回复
处理了你需要的消息后,直接RETURN TRUE
priest334 2009-01-08
  • 打赏
  • 举报
回复
你处理完消息之后直接return, 不要继续执行CDialog::PreTranslateMessage(MSG* pMsg)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧