加载资源(MFC的Dialog Based中):
HACCEL hAcc = LoadAccelerators (m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));但是该加速键表不起作用,如何才能让它发挥作用?

解决方案 »

  1.   

    需要在
    PreTranslateMessage中一行
    if (TranslateAccelerator(GetSafeHwnd(), m_hAcc, pMsg))return TRUE;
      

  2.   

    LoadAccelerators的结果最好保存在一个成员变量中。
      

  3.   

    方法一:
    http://support.microsoft.com/?kbid=222829
    1 插入一个新的Accelerator到资源里,把加速键和对应的响应控件(如一个按钮)关联
    2 在对话框头文件中声明:
      HACCEL m_hAccel;
    3 在对话框的构造函数里初始化m_hAccel
      m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
    4 然后重载对话框的PreTranslateMessage函数,在
    BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg) 
    {
       if (m_hAccelTable) 
       {
          if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg)) 
          {
             return(TRUE);
          }
       }
       return CDialog::PreTranslateMessage(pMsg);
    }也可以用RegisterHotKey,在FAQ里找,有详细的步骤