Акселераторы позволяют перенаправить сообщения на нужный элемент управления. Создаем диалоговое окно с двумя кнопками.
Код к кнопкам:
void CTestMessageDlg::OnButton2() { AfxMessageBox("Button 2"); } void CTestMessageDlg::OnButton1() { AfxMessageBox("Button 1"); }
Добавляем в ресурсы таблицу акселераторов.
В нее необходимо добавить записи. Обратите внимание, что связь происходит с определенным идентификатором.
Осталось всего три задачи. Первая описать переменную:
class CTestMessageDlg : public CDialog { // Construction ...... HACCEL ha; // Implementation protected: ...... };
Вторая загрузить акселераторы:
BOOL CTestMessageDlg::OnInitDialog() { CDialog::OnInitDialog(); ha = LoadAccelerators( AfxGetResourceHandle(), MAKEINTRESOURCE( IDR_ACCELERATOR1 ) ); ...... }
Третья - перенаправить обработку в таблицу акселераторов:
BOOL CTestMessageDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if ( TranslateAccelerator( m_hWnd, ha, pMsg ) ) return TRUE; return CDialog::PreTranslateMessage(pMsg); }
Запускаем, нажимаем на А: