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

键盘按键事件,请大侠指教...

楼主lidujun(无名)2003-12-01 16:50:45 在 VC/MFC / 基础类 提问

我从CListCtrl派生出一个CListCtrlEx  
  我希望能捕捉到用户按下(Alt+方向键下键)时事件处理用户操作  
  如何才能捕捉到本消息,请大侠指教,多谢! 问题点数:40、回复次数:4Top

1 楼arvid_gs(west)回复于 2003-12-01 17:17:51 得分 0

RegisterHotKey  
  UnregisterHotKeyTop

2 楼arvid_gs(west)回复于 2003-12-01 17:24:09 得分 40

VC中热键功能的实现  
    消息是windows操作系统和应用程序之间进行通信的载体,操作系统将包括用户在内的各种事件以消息的形式发送至目标,目标系统再根据消息具体的内容进行相应的处理。  
   
    在VC++6.0中,大多数的窗口消息可以从ClassWizard中找到,但是一些不常用的消息在ClassWizard中并没有封装,比如热键处理消息(WM_HOTKEY),用户必须事先定义热键,然后不论该程序在前台或后台运行,只要用户按下了这个热键,该程序就会立即在前台运行,并收到热键消息,消息处理函数执行热键中定义的操作。要实现这些功能,用户必须在代码级进行工作,也就是说要手工编写代码。具体步骤如下:  
   
    假设用户已经用AppWizard生成了一个单文档界面框架,在工程中主要有下列几个文件,向导为应用程序创建了如下类:  
    CtestView   CtestDoc   CtestApp   CmainFrame   CAboutDlg  
    请按下列步骤进行:  
    1、在视图类的声明文件中,即testview.h文件中,找到消息映射的声名处,在下列语句处加入热键处理函数声明:(划线部分)  
   
       //{{AFX_MSG(CTestView)  
       afx_msg   int   OnCreate(LPCREATESTRUCT   lpCreateStruct);  
       //}}AFX_MSG  
    LRESULT   OnHotKey(WPARAM   wParam,LPARAM   lParam);  
       DECLARE_MESSAGE_MAP()  
   
    2、在视图类的实现文件,即TestView.cpp文件中,找到消息映射的定义处,这里是使函数和消息发生关联的地方,当发生某消息时,会调用这里定义的相应消息处理函数,也就是说用消息映射宏使消息与相应的处理函数发生关系。  
   
    下面的语句说明WM_HOTKEY消息和OnHotkey函数发生关联。  
   
       BEGIN_MESSAGE_MAP(CTestView,   CView)  
       //{{AFX_MSG_MAP(CTestView)  
       ON_WM_CREATE()  
       //}}AFX_MSG_MAP  
       //   Standard   printing   commands  
       ON_COMMAND(ID_FILE_PRINT,   CView::OnFilePrint)  
       ON_COMMAND(ID_FILE_PRINT_DIRECT,   CView::OnFilePrint)  
       ON_COMMAND(ID_FILE_PRINT_PREVIEW,   CView::OnFilePrintPreview)  
       ON_MESSAGE(WM_HOTKEY,OnHotkey)   //消息和函数发生关联  
    END_MESSAGE_MAP()  
   
    3、在OnCreate函数中加入初始化代码,向系统登记热键。  
       RegisterHotKey(hWnd,1001,MOD_CONTROL|MOD_ALT,‘z’);  
       RegisterHotKey(hWnd,1002,MOD_CONTROL|MOD_ALT,‘Z’);  
    本例中定义的热键为Ctrl+Alt+z。  
   
    4、在OnHotkey()处理函数中处理热键,即检查是否是所期望的热键,如果是,这里为了简单,弹出一个对话框,显示“You   Press   Ctrl+Alt+z(Z)”。  
   
    LRESULT   CTestView::OnHotkey(WPARAM   wParam,LPARAM   lParam)  
    {  
       if(wParam==1001||wParam==1002)  
       MessageBox(“You   Press   Ctrl+Alt+z(Z)”);  
    return   0;  
    }  
    注意:OnHotkey()函数必须有返回值。  
   
    5、最后,不要忘了在OnDestroy()函数中解除函数登记,释放系统资源。  
    UnregisterHotKey(m_hWnd,1001);  
    UnregisterHotKey(m_hWnd,1002);  
   
    这样程序运行后,无论程序在前台或后台运行,只要你按下Ctrl+Alt+z,就会执行热键处理函数中的代码,这里弹出对话框。读者可以自行在自己的热键处理函数中加入需要的代码来完成特定的功能。该程序在Pwin98平台上,在Visual   C++6.0中调试通过。    
  Top

3 楼bluenet21(net21)回复于 2003-12-01 17:25:12 得分 0

在你自己的控件中处理WM_GETDLGCODE消息,  
  并返回值:  
   
  The   return   value   is   one   or   more   of   the   following   values,   indicating   which   type   of   input   the   application   processes.    
   
  Value   Meaning    
  DLGC_BUTTON   Button.    
  DLGC_DEFPUSHBUTTON   Default   push   button.    
  DLGC_HASSETSEL   EM_SETSEL   messages.    
  DLGC_RADIOBUTTON   Radio   button.    
  DLGC_STATIC   Static   control.    
  DLGC_UNDEFPUSHBUTTON   Non-default   push   button.    
  DLGC_WANTALLKEYS   All   keyboard   input.    
  DLGC_WANTARROWS   Direction   keys.    
  DLGC_WANTCHARS   WM_CHAR   messages.    
  DLGC_WANTMESSAGE   All   keyboard   input   (the   application   passes   this   message   in   the   MSG   structure   to   the   control).    
  DLGC_WANTTAB   TAB   key.    
  Top

4 楼arvid_gs(west)回复于 2003-12-01 17:27:20 得分 0

在    
  MessageBox(“You   Press   Ctrl+Alt+z(Z)”);  
  处发送你要选中的项目的消息即可!Top

相关问题

  • 怎样响应键盘按键事件?
  • 键盘按键
  • 请问怎样取得在一个键盘按键事件中用户按下的键的ascII码值??
  • 如何按键盘响应TLabel的OnClick()事件?
  • 怎样不断的检查键盘的按键事件呢?
  • 按键盘delete键,如何响应程序中的“删除”事件?
  • 请问如何通过代码发送一键盘按键?
  • 一个禁用键盘按键的问题,高高手请进
  • 请问:键盘上"DEL"按键的内码是多少?
  • 请问高手,如何模拟键盘按键PAGEDOWN?

关键词

  • 函数
  • 消息
  • 代码
  • 用户
  • 映射
  • 文件
  • 热键
  • dlgc
  • onhotkey
  • 处理

得分解答快速导航

  • 帖主:lidujun
  • arvid_gs

相关链接

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

广告也精彩

反馈

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