如题:
首先插入一按钮,将其visible属性设为False,ID如设为:IDC_BTN_FASTKEY;
然后双击它,进入代码编辑界面,编辑代码,实现所要的功能;
最后如下操作添加加速键:
1 插入一个新的Accelerator(加速键)到资源中,把加速键和对应的响应控件(这里是一个按钮,其ID为:IDC_BTN_FASTKEY)与您选择的组合键设好关联起来,如可以与Ctrl+Alt+空格关联起来;
2 在按钮所在对话框的CPP文件所对应的头文件中public声明:
HACCEL m_hAccel;
virtual BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) ; //重载
3 在对话框的构造函数里初始化m_hAccel
m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1)); //IDR_ACCELERATOR1就是刚才的加速键资源ID;
4 然后在其CPP文件中实现重载对话框的PreTranslateMessage函数即:
BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)
{
if (m_hAccel)
{
if (::TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
{
OnBtnFastKey(); //隐藏按钮处理的函数;
return(TRUE);
}
}
return CDialog::PreTranslateMessage(pMsg);
}
此时,将程序界面运行起来后,同时按Ctrl+Alt+空格 三个键,就相当于点击了那个被隐藏了的按钮。功能与点击按钮无异。
另一方法:
在隐藏按钮所在的对话框所对应的函数如XXXDlg.Cpp所对应的.h文件中添加如下:
afx_msg LRESULT OnHotKey(WPARAM wParam, LPARAM lParam);
然后在其XXXDlg.cpp中添加消息映射,如下:
ON_MESSAGE(WM_HOTKEY,OnHotKey)
ON_MESSAGE(WM_CREATE,OnCreate)
ON_MESSAGE(WM_DESTROY,OnDestroy)
然后再实现这三个函数如下:
/// 向系统注册热键
void CBackupDlg::OnCreate()
{
RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT,'A');
RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_SHIFT,'a');
}///
// 程序运行完毕后解除热键
void CBackupDlg::OnDestroy()
{
UnregisterHotKey(m_hWnd,1001);
UnregisterHotKey(m_hWnd,1002);
}
/ 处理热键
LRESULT CBackupDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if(wParam==1001||wParam==1002)
{
CWnd::SetForegroundWindow();//使得被激活窗口出现在前景
//用户在此添加代码处理事务,如下,
OnBtnReset(); //这里就是隐藏按钮所处理的函数;
}
return 0;
}