Простой способ назначить функциональные клавиши для диалога? - PullRequest
4 голосов
/ 15 апреля 2011

У меня есть диалоговое окно MFC, и я хотел бы назначить функциональные клавиши для различных методов.Это возможно?

Например, я хотел бы набрать F9 и получить тот же результат, что и нажатие кнопки.

Ответы [ 3 ]

4 голосов
/ 19 марта 2013

Для диалогового приложения.Создайте IDR_ACCELERATOR1 в редакторе ресурсов для вашего диалога.И добавьте ключ, который вы хотели, и создайте событие для ключа для вашего диалога.

В sampledlg.h добавьте

HACCEL m_haccel;

В sampledlg.cpp В OnInitDialog () добавьте

m_haccel = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));

В файле sampledlg.cpp В PreTranslateMessage (MSG * pMsg) добавьте

if (m_haccel)
{
  if ((::TranslateAccelerator(*this, m_haccel, pMsg))) 
  {    
      return(TRUE);
  }
}
1 голос
/ 18 апреля 2011

Проще, чем я думал. Я не знаю, является ли это лучшим решением, но это то, что я сделал:

BOOL MainDlg::PreTranslateMessage(MSG *pMsg)
{   
  if ( pMsg->message == WM_KEYDOWN)
  {
     if (( pMsg->wParam == VK_F9))
       OnBnClickedButton1(); // Delete Item
 }

  return CDialog::PreTranslateMessage(pMsg);
}

Теперь при каждом нажатии функциональной клавиши F9 вызывается функция OnBClickedButton1 ().

1 голос
/ 15 апреля 2011

Если вы имеете в виду в главном диалоговом окне диалогового приложения, вы можете проверить http://www.codeproject.com/Articles/37130/Implement-Accelerators-in-a-Dialog-Based-Applicati.aspx

Если это для диалогов в приложении doc / view: http://support.microsoft.com/kb/117500/en-us

http://support.microsoft.com/kb/222829/en-us

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...