CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

在PreTranslateMessage中如果拦截ALT+p按键,应该如何表达.....

楼主zhaohuiguang(晓晓)2006-03-02 13:57:30 在 VC/MFC / 基础类 提问

在PreTranslateMessage中如果拦截ALT+p按键,应该如何表达..... 问题点数:100、回复次数:8Top

1 楼ouyh12345(五岭散人)回复于 2006-03-02 14:08:57 得分 0

组合键好象是先按ALT,再按p吧。  
  如果是这样的话,分别捕捉这两个键盘信息,然后判断时间差Top

2 楼ydfivy(我就是一送外卖的)回复于 2006-03-02 14:20:34 得分 0

二)组合键的用法:(本例响应Ctrl+X键)  
  BOOL   CMydilog::PreTranslateMessage(MSG*   pMsg)    
  {  
    //   TODO:   Add   your   specialized   code   here   and/or   call   the   base   class  
     
    if   (pMsg->message   ==   WM_KEYDOWN)  
    {  
      switch   (pMsg->wParam)  
      {      
      case   VK_ESCAPE:  
        SetFocus   ();  
        return   TRUE;  
      case   ´P´:  
        if(::GetKeyState(VK_ALT)   <   0)//  
                                                                                                                           
          MessageBox("hello");  
        return   TRUE;  
         
      }  
    }  
    return   CDialog::PreTranslateMessage(pMsg);  
  }  
  Top

3 楼kelinwang19(kelin)回复于 2006-03-02 14:37:32 得分 0

楼上正解Top

4 楼ydfivy(我就是一送外卖的)回复于 2006-03-02 14:44:09 得分 0

BOOL   CMydilog::PreTranslateMessage(MSG*   pMsg)    
  {  
    //   TODO:   Add   your   specialized   code   here   and/or   call   the   base   class  
     
    if   (pMsg->message   ==   WM_KEYDOWN)  
    {  
      switch   (pMsg->wParam)  
      {      
      case   VK_ESCAPE:  
        SetFocus   ();  
        return   TRUE;  
      case   'P'       //这里应该是这样.刚才那个拷错了.  
        if(::GetKeyState(VK_ALT)   <   0)//  
                                                                                                                           
          MessageBox("hello");  
        return   TRUE;  
         
      }  
    }  
    return   CDialog::PreTranslateMessage(pMsg);  
  }Top

5 楼Atomictry(天影)回复于 2006-03-02 14:53:07 得分 0

不是正解,ALT虚拟键是VK_MENU,同时即使用的是VK_MENU,也不能正常工作。Top

6 楼Atomictry(天影)回复于 2006-03-02 15:03:20 得分 0

楼上都忽略了WM_SYSKEYDOWN消息,正解是下面的,MSDN中有篇文章对此有说明。  
          if   ((WM_KEYDOWN   ==   pMsg->message)   ||   (WM_SYSKEYDOWN   ==   pMsg->message))    
          {  
                  switch   (pMsg->wParam)  
                  {  
                  case   'P':  
                          if(::GetKeyState(VK_LMENU)   <   0)  
                                  MessageBox("hello");  
                          return   TRUE;  
                  default:  
                          break;  
                  }  
          }Top

7 楼Atomictry(天影)回复于 2006-03-02 15:04:42 得分 0

ALT键虚拟码有:VK_MENU,VK_LMENU,VK_RMENUTop

8 楼ydfivy(我就是一送外卖的)回复于 2006-03-02 15:16:20 得分 0

Atomictry说的对.  
  只记得有VK_CONTROL,忘了没有VK_ALT的定义.  
  这个是靠FLAG中的位来确定的.误导楼主.抱歉.Top

相关问题

  • 使用PreTranslateMessage()拦截快捷键遇到的一个奇怪问题
  • 如何通过TWMKey拦截CTRL、ALT等组合键(比如CTRL-N)?
  • 拦截退出
  • 在PreTranslateMessage()里能屏蔽Ctrl+Alt+Del吗?
  • P
  • &*p
  • 用vb拦截ie?
  • 用vb拦截ie ?
  • 用vb拦截ie ?
  • 用vb 拦截 ie ?

关键词

  • pretranslatemessage
  • alt
  • getkeystate
  • pmsg
  • vk
  • 应该
  • wparam
  • case

得分解答快速导航

  • 帖主:zhaohuiguang

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo