第一步:
    在你希望接受热键的窗口中添加下面的函数定义和函数体,这个例子中我们选择了View(视图)窗口。
    
    头文件中添加
    
    class CHkTestView : public CView
    {
    ...
        /// 热键
        void RegisterHK(void);
        void UnRegisterHK(void);
        UINT m_uAtomTest1,m_uAtomTest2;
    ...
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CHkTestView)
    ...
        afx_msg LONG OnHotkey(WPARAM wP,LPARAM lP);
        //}}AFX_VIRTUAL
    ...
    };
    
    CPP文件中添加
    
     void CHkTestView::RegisterHK(void)
    {
    //解释表示热键的字符串,每个字符串由以下部分组成ACWS_KEY,例如A_W__F表示 Alt+Win+F
        // config hotkey
        if(!CHotkeyEnhance::AddAtomAndRegisterHK(GetSafeHwnd(),m_uAtomTest1,"AC___1")) 
    //alt+ctrl+a
            m_uAtomTest1=0;
        if(!CHotkeyEnhance::AddAtomAndRegisterHK(GetSafeHwnd(),m_uAtomTest2,"_C___27")) 
    //ctrl+f1
            m_uAtomTest2=0;
    }
    
    void CHkTestView::UnRegisterHK(void)
    {
        if(m_uAtomTest1)
            UnregisterHotKey(GetSafeHwnd(),m_uAtomTest1);
    
        if(m_uAtomTest2)
            UnregisterHotKey(GetSafeHwnd(),m_uAtomTest2);
    }
    
    第二步:
    添加消息处理相关代码。
    头文件中添加
    
    class CHkTestView : public CView
    {
    ...
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CHkTestView)
    ...
        afx_msg LONG OnHotkey(WPARAM wP,LPARAM lP);
        //}}AFX_VIRTUAL
    ...
    };
    
    CPP文件中添加
    
    BEGIN_MESSAGE_MAP(CHkTestView, CView)
        ON_MESSAGE(WM_HOTKEY,OnHotkey)
        //消息映射,必须添加,否则无法接收消息
    ...
    END_MESSAGE_MAP()
    
    LONG CHkTestView::OnHotkey(WPARAM wP,LPARAM lP)
    {
        TRACE("hot key press %d
",wP);
        if(wP== m_uAtomTest1)
        {//判断热键
            AfxMessageBox("test 1");
        }
        else if(wP== m_uAtomTest2)
        {
            AfxMessageBox("test 2");
        }
        else
        {
            AfxMessageBox("unknown hotkey");
        }
        return 0;
    }
    
    
第三步:
    Windows系统允许用户自己定义热键,定义热键时先添加利用AddAtom一个原子Atom,然后使用RegisterHotKey注册热键。一个热键可以由Alt,Shift,Alt,Win与F1-F12,A-Z组合而成。
    当热键被按下时,系统会发送WM_HOTKEY消息给注册热键时指定的窗口,消息中的第一个参数就是热键对应的原子值。
    理解CHotkeyEnhance的用法,CHotkeyEnhance是我自己开发的一个类,封装了部分HotKey的函数。
    CHotkeyEnhance使用字符串来表示热键,每个字符串由以下部分组成ACWS_KEY,例如A_W__6表示 Alt+Win+F
      ACWS 分别代表 alt ctrl win shift
      最后一个字符 代表由 A-Z 的数字,1 代表A,26代表Z
      如果大于26 则表示F1-F12 27代表F1
      前部分和后部分之间通过下划线 _ 进行连接
欢迎评论或投稿