如题................

解决方案 »

  1.   

    快捷键 一般是 针对整个窗口的,很少有针对某个控件的。
    你可以考虑RegisterHotKey + MSG_WM_HOTKEY(OnHotKey)
      

  2.   

    为什么在 IDR_MAINFRAME ACCELERATORS 里添加没反应
      

  3.   


    HACCEL _Haccel;class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
                     public CMessageFilter, public CIdleHandler
    {
    public:
      enum { IDD = IDD_MAINDLG };  virtual BOOL PreTranslateMessage(MSG* pMsg)
      {
        return (!::TranslateAccelerator(m_hWnd, _Haccel, pMsg) && !CWindow::IsDialogMessage(pMsg)) ? FALSE : TRUE;
      }  virtual BOOL OnIdle()
      {
        return FALSE;
      }  BEGIN_UPDATE_UI_MAP(CMainDlg)
      END_UPDATE_UI_MAP()  BEGIN_MSG_MAP(CMainDlg)
       MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
       COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
       COMMAND_ID_HANDLER(IDOK, OnOK)
       COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
      END_MSG_MAP()  // Handler prototypes (uncomment arguments if needed):
      // LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
      // LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
      // LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)  LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
      {
       // center the dialog on the screen
       CenterWindow();   // set icons
       HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), 
       IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
       SetIcon(hIcon, TRUE);
       HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), 
       IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
       SetIcon(hIconSmall, FALSE);
        
        _Haccel = LoadAccelerators(_Module.GetModuleInstance(), MAKEINTRESOURCE(IDR_MAINFRAME));
       // register object for message filtering and idle updates
       CMessageLoop* pLoop = _Module.GetMessageLoop();
       ATLASSERT(pLoop != NULL);
       pLoop->AddMessageFilter(this);
       pLoop->AddIdleHandler(this);   UIAddChildWindowContainer(m_hWnd);   return TRUE;
      }  LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
      {
       CAboutDlg dlg;
       dlg.DoModal();
       return 0;
      }  LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
      {
       // TODO: Add validation code 
       CloseDialog(wID);
       return 0;
      }  LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
      {
       CloseDialog(wID);
       return 0;
      }  void CloseDialog(int nVal)
      {
       DestroyWindow();
       ::PostQuitMessage(nVal);
      }
    };