MFC中添加快捷键

MFC中的快捷键是一资源的方式,建立起一个快捷键表,表中的内容就是对于键的id号。首先要加载这个加速器资源,和menu一样,要使用就要加载。然后是在消息预处理函数中添加一些东西,来响应键盘事件,这就需要重载 virtual BOOL PreTranslateMessage(MSG* pMsg)函数,最后就是建立起快捷键的事件,实现映射函数。

先是加载:

  1. //HACCEL hAcc; 定义为一个私有变量 ,可以加在在init函数中,m_hAcc只要加载一次
  2.  m_hAcc=LoadAccelerators(AfxGetApp()->m_hInstance,MAKEINTRESOURCE
  3. (IDR_ACCELERATOR1));

然后重载PreTranslateMessage函数

  1. BOOL CCalculatorDlg::PreTranslateMessage(MSG* pMsg)
  2. {
  3.       int iRet=0;
  4.     // 处理键盘消息
  5.     switch(pMsg->message)
  6.     {
  7.     case WM_KEYDOWN: 
  8.     case WM_SYSKEYDOWN:
  9.         iRet= TranslateAccelerator(m_hWnd,m_hAcc,pMsg); 
  10.         if(iRet) 
  11.             return TRUE;
  12.     }  
  13.     return CDialog::PreTranslateMessage(pMsg);
  14. }

假如在资源IDR_ACCELERATOR1中有一个id为ID_A_COPY的快捷键,那么添加了消息映射

  ON_COMMAND(ID_A_COPY, &CCalculatorDlg::OnACopy) 后,在OnACopy就能实现拷贝功能的快捷键了。

可以看出PreTranslateMessage函数是在SDK中的TranslateMessage函数之前执行,然后才调用它。所以可以在这个地方来预处理一些消息,改变他们的走向。

 if(pMsg->message == WM_KEYDOWN && pMsg->wParam == 'Q') 
 {
  AfxMessageBox(_T("Q被按下"));
  return TRUE;
 }

以上代码放在PreTranslateMessage函数开始处,将有机会获得Q键被按下,然后结束消息的传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值