请问如何在一个基于对话框的程序中注册一个系统热键并使用? 多谢~~~~~~

解决方案 »

  1.   

    RegisterHotkey()
    ON_MESSAGE()
      

  2.   

    DoItFreely(Freely) 的说法是正确的。同意。
      

  3.   

    如何在VC++6.0中定义热键消息 
      消息是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中调试通过。