三种方法实现快捷键编程

本文介绍了在Visual C++中实现快捷键功能的三种常见方法:使用Accelerator资源,通过PreTranslateMessage和GetKeyState组合检测按键状态,以及直接加载Accelerator资源并进行消息映射。这些方法适用于不同类型的程序结构,例如基于对话框的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VC中至少有三种快捷键编程的方法,通常在SDI,MDI结构的程序中通过加入Acclelerator资源的消息响应,快速地实现快捷键功能;
除些之内,还有另两种方法.通常用在基于对话框的程序中.
1.
  1. #defineIsCTRLpressed()((GetKeyState(VK_CONTROL)&(1<<(sizeof(SHORT)*8-1)))!=0)//判断Ctrl键是否按下.
  2. BOOLCTDlg::PreTranslateMessage(MSG*pMsg)
  3. {
  4. if(pMsg->message==WM_KEYDOWN)
  5. {
  6. if(IsCTRLpressed())
  7. {
  8. switch(pMsg->wParam)
  9. {
  10. case'A'://ctrl+A键按下
  11. AfxMessageBox("youpressctrl+a");
  12. break;
  13. case'B'://ctrl+B键按下
  14. AfxMessageBox("youpressctrl+b");
  15. break;
  16. }
  17. }
  18. }
  19. returnCDialog::PreTranslateMessage(pMsg);
  20. }
.2.先添加Accelerator资源,比如:IDR_ACCELERATOR1,在其中添加要使用的快捷键资源:如
ID:IDR_CTRLTEST
Key:Ctrl + K
Type:VIRTKEY
  1. //TDlg.h
  2. HACCELm_hAcc;
  3. //TDlg.h
  4. BOOLCTDlg::OnInitDialog()
  5. {
  6. ....
  7. m_hAcc=LoadAccelerators(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1));
  8. }
  9. BOOLCTDlg::PreTranslateMessage(MSG*pMsg)
  10. {
  11. intiRet;
  12. switch(pMsg->message)
  13. {
  14. caseWM_KEYDOWN:
  15. caseWM_SYSKEYDOWN:
  16. iRet=TranslateAccelerator(m_hWnd,hAcc,pMsg);
  17. if(iRet)
  18. {
  19. returnTRUE;
  20. }
  21. }
  22. returnCDialog::PreTranslateMessage(pMsg);
  23. }
  24. 然后手工添加快捷资源的消息响应:
  25. 比如:
  26. //TDlg.h
  27. //{{AFX_MSG(CTDlg)
  28. afx_msgvoidOnTest();
  29. //}}AFX_MSG
  30. DECLARE_MESSAGE_MAP()
  31. //TDlg.cpp
  32. BEGIN_MESSAGE_MAP(CTDlg,CDialog)
  33. ON_COMMAND(IDR_CTRLTEST,OnTest)
  34. END_MESSAGE_MAP()
  35. voidCTDlg::OnTest()
  36. {
  37. AfxMessageBox("youpressctrl+k");
  38. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值