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