WTL 如何给对话框中的按钮添加快捷键 F1到F12

skwayumi 2012-11-16 10:16:56
如题................
...全文
114 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
skwayumi 2012-11-16
  • 打赏
  • 举报
回复
为什么在 IDR_MAINFRAME ACCELERATORS 里添加没反应
sumos 2012-11-16
  • 打赏
  • 举报
回复
快捷键 一般是 针对整个窗口的,很少有针对某个控件的。 你可以考虑RegisterHotKey + MSG_WM_HOTKEY(OnHotKey)
gfm688 2012-11-16
  • 打赏
  • 举报
回复

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);
  }
};

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧