加速键表的作用:
加速键表是用来实现用户按指定键或者组合键时,让此键盘消息响应用户的指定功能,而不是去实现windows默认的功能。
例如:Ctrl+C,windows默认实现的功能是复制,但是利用加速键表,可以让该组合键消息实现其他非复制的功能。
1、引入加速键表,Resource View页里边右击xxx.rc -> 选择Add Resource -> 选择Accelerator -> 点击New。
此时可以看到xxx.rc下多出一项叫Accelerator,此时正确引入加速键表。
(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,表示都是键盘消息。
.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
}