1. 首先创建一个菜单,ID分别为IDM_FILE_NEW,IDM_FILE_OPEN,IDM_FILE_CLOSE。

  2. 分别对菜单各项进行响应。

  3. 在OnInitDialog()中,添加标题栏菜单:

    HMENU hMenu = ::LoadMenu(::GetModuleHandle(nullptr), MAKEINTRESOURCE(IDR_MENU1)); ::SetMenu(this->GetSafeHwnd(), hMenu);

  4. 创建一个Accelerator资源,添加如下内容:

      ID               Modifier        Key        Type

    IDM_FILE_NEW        None           ^N         ASCII

    IDM_FILE_OPEN       None          VK_BACK     VIRTKEY

    IDM_FILE_CLOSE      None           ^E         ASCII

    这样,就把键盘加速键和菜单各个选项联系在一起了。接下来,就要加载一下Accelerator资源文件。

  5. 在OnInitDialog()中,加载资源文件IDR_ACCELERATOR:

    m_hAccelerator = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR));

    注:private:

HACCEL m_hAccelerator;

7.重载虚函数PreTranslateMessage():

BOOL CAcceleratorDemoDlg::PreTranslateMessage(MSG* pMsg)

{

// TODO: Add your specialized code here and/or call the base class

if (m_hAccelerator)

{

if (::TranslateAccelerator(this->GetSafeHwnd(), m_hAccelerator, pMsg))

return TRUE;

}

return CDialogEx::PreTranslateMessage(pMsg);

}

经过以上步骤,便实现了菜单键盘加速键。