如何在系统中定义并使用热键

ZDNet软件频道 时间:2002-08-22 作者:闻怡洋 |  我要评论()
本文关键词:wenyiyang
本文介绍如何使用VC在系统中定义并使用热键。

第一步:
在你希望接受热键的窗口中添加下面的函数定义和函数体,这个例子中我们选择了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
  前部分和后部分之间通过下划线 _ 进行连接



本文转自VCHelp

责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134