加速键表的使用

加速键表的作用:

加速键表是用来实现用户按指定键或者组合键时,让此键盘消息响应用户的指定功能,而不是去实现windows默认的功能。

例如:Ctrl+C,windows默认实现的功能是复制,但是利用加速键表,可以让该组合键消息实现其他非复制的功能。


加速键的使用:
   1、引入加速键表,Resource View页里边右击xxx.rc -> 选择Add Resource -> 选择Accelerator -> 点击New。

       此时可以看到xxx.rc下多出一项叫Accelerator,此时正确引入加速键表。


2、展开Accelerator,会看到一项IDR_ACCELERATOR1 双击进入,进行加速键的定义,
(1)、ID填写需要设置实现功能的ID,以ACC开头,例如mybutton的ID是 IDC_MY_BUTTON,但是这里必须写成 ACC_MY_BUTTON。
(2)、Modifier项选择是否需要ctrl、shift、alt等这些键,以便和后边的key组成组合键,这个可以从下拉框中选择,不需要选空。
(3)、Key项可以自己写字母键,例如写个C,表示和前边的ctrl组成组合键Ctrl+C;一般如果前边是None,则这块选系统默认的Key,例如回车的Key是VK_RETURN;往右的Key是VK_RIGHT等。

(4)、Type项选VIRTKEY,表示都是键盘消息。


3、此时将加速键表成功引入,接下来如何用代码去按下组合键去实现用户指定功能。
       .h头文件中 定义  HACCEL m_hAccel; (加速键成员变量)
virtual BOOL PreTranslateMessage(MSG* pMsg);//因为要实现用户指定的函数,所以,必须用此接口得到消息,然后将消息分给用户指定的函数

      .cpp文件中:

   BEGIN_MESSAGE_MAP(CButtonColorDlg, CDialogEx)
     ON_COMMAND(ACC_MY_BUTTON, OnBnClickedMyButton)//将响应函数和加速键消息连接起来
   END_MESSAGE_MAP()


//
 BOOL  CButtonColorDlg::OnInitDialog()

{

                     。。。。。。。。

                       //加载加速键表

m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));                                                 //IDR_ACCELERATOR1是加速键表的资源ID
}

///
BOOL CButtonColorDlg::PreTranslateMessage(MSG* pMsg)
{
	if(m_hAccel) 
	{   
		if(::TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
		{   
			return TRUE;   //屏蔽Windows去执行默认的功能
		} 
	}  
	return CDialogEx::PreTranslateMessage(pMsg);
}

///

//当用户按下Ctrl+c组合键时,windows就会执行OnBnClickedMyButton,而不是默认的复制功能

                void CButtonColorDlg::OnBnClickedMyButton()
                 {
                          //do something
                 }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值