自定义组合键

作者在 2006-10-25 16:51:00 发布以下内容

  [解决方法]
    RegisterHotKey函数原型及说明:
    BOOL RegisterHotKey(
    HWND hWnd,                    // 接收WM_HOTKEY的窗口句柄
    int id,                       // hot key的ID号.
    UINT fsModifiers,             // 响应那个热键.
    UINT vk                       // 与热键配合的键.

    其中:
      1)id的说明:
      id为你自己定义的一个ID值,对一个线程来讲其值必需在0x0000 - 0xBFFF范围之内,对DLL来讲其值必需在0xC000 - 0xFFFF 范围之内,在同一进程内该值必须唯一

      2)fsModifiers的取值如下:
        .MOD_ALT
        .MOD_CONTROL
        .MOD_SHIFT
        .MOD_WIN

  [程序实现]
    建立名为My的对话框工程.本例要用到RegisterHotKey()实现Alt+D的快捷键组合功能.在调用该函数后你的进程会在ALT+D按下时比系统先得到通知.你需要处理的消息是WM_HOTKEY.
    如下:

    在MyDlg.h中:
    class CMyDlg : public CDialog
    {
         // Construction
         public:
             int m_nHotKeyID;//为你自己定义的一个hot key的ID值,在整个程序唯一.
         ........
         protected:
             HICON m_hIcon;

         // Generated message map functions
         //{{AFX_MSG(CMyDlg)
         virtual BOOL OnInitDialog();
         afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
         afx_msg void OnPaint();
         afx_msg HCURSOR OnQueryDragIcon();
         afx_msg LONG OnHotKey(WPARAM wParam,LPARAM lParam);//手动加入.
         //}}AFX_MSG  
         DECLARE_MESSAGE_MAP()
    };
   
    在MyDlg.cpp中:
    #define VK_D 68

    ..............
    BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
         //{{AFX_MSG_MAP(CHotKey1Dlg)
         ON_WM_SYSCOMMAND()
         ON_WM_PAINT()
         ON_WM_QUERYDRAGICON()
         ON_BN_CLICKED(IDOK, OnRegisterHotKey)
         ON_BN_CLICKED(IDCANCEL, OnUnregisterHotKey)
         ON_MESSAGE(WM_HOTKEY,OnHotKey)                     //手动加入.
         //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    BOOL CMyDlg::OnInitDialog()
    {
        

开发经验 | 阅读 2678 次
文章评论,共0条
游客请输入验证码
浏览69435次