信息产业培训网
[当前位置]:首页--专家点评--林锐RSS订阅按钮

VC如何在对话框中响应键盘按键

http://www.miiceic.org.cn   2008-8-28 10:38:31   中程在线   浏览数:
关键字:VC 对话框 按键

  我们首先想到的是响应WM_KEYDOWN消息,但实际运行却发现没有任何效果。

 

  原因是对话框里的控件需要首先对按键作出响应,比如多行编辑框必须首先

 

  处理回车,不至于回车使对话框关闭。

 

  我们要想在第一时间对对话框的按键做出响应,需要重载PreTranslateMessage,

 

  以下的代码实现了在对话框中显示虚拟键值(virtual-key code)

 

  BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)

 

  {

 

  if(pMsg->message == WM_KEYDOWN)

 

  {

 

  ///或者直接调用OnKeyDown

 

  CString strwParam;

 

  strwParam.Format("%d ",pMsg->wParam);

 

  CDC* pDC = GetDC();

 

  pDC->TextOut(10,10,strwParam);

 

  ReleaseDC(pDC);

 

  }

 

  return CDialog::PreTranslateMessage(pMsg);

 

  }

 

  此方法也适用于FORMVieW或其它控件中对键盘按键的响应,以下的代码来自MSDN,

 

  实现了当按下上下左右方向键时调用OnKeyDown,我们可以在OnKeyDown中作相应处理。

 

  BOOL CSampleControl::PreTranslateMessage(LPMSG lpmsg)

 

  {

 

  BOOL bHandleNow = FALSE;

 

  switch (lpmsg->message)

 

  {

 

  case WM_KEYDOWN:

 

  switch (lpmsg->wParam)

 

  {

 

  case VK_UP:

 

  case VK_DOWN:

 

  case VK_LEFT:

 

  case VK_RIGHT:

 

  bHandleNow = TRUE;

 

  break;

 

  }

 

  if (bHandleNow)

 

  OnKeyDown(lpmsg->wParam, LOWORD(lpmsg ->lParam), HIword(lpmsg->lParam));

 

  break;

 

  }

 

  return bHandleNow;

 

  }

来源:中程在线
相关连接
最新评论
*以下网友发言不代表中程在线网站的观点和看法
    我要评论

    请您注意
    1、遵守中华人民共和国的各项有关法律规定
    2、承担一切因您的行为而导致的法律责任
    3、本网留言管理人员有权删除其管辖留言内容
    4、您在本网的留言本网有权在网站内转载和引用
    5、参与本留言即表明您已经阅读并接受上述条款
    我爱研发网中电华信阿里西西JAVA爱好者北京英才网全球大学查询网
    中国人的网站导航中国电脑论坛信息产业部新浪科技搜狐IT信息产业部电子教育与考试中心
    IT世界网软件项目交易网中国软件交易网国信培训网亚远景科技....[更多]
    关于我们 | 网站地图 | 周边住宿 | 行车路线 | 联系我们 | 网站律师 | 意见反馈 | 虚位以待 | 友情链接
    中程在线(北京)科技有限公司 版权所有
    总 部:北京市海淀区青东商务楼A座西四层
    企业培训部:010-52636110 52636106 就业培训部:010-68716925 68716926
    邮 件:training@miiceic.org.cn
    京ICP备06053134号
    Copyright © 2005-2008 Miiceic.org.cn All Rights Reserved