note : windows message process

来源:互联网 发布:淘宝旧版本6.1.0下载 编辑:程序博客网 时间:2024/05/17 07:40

实验环境: vs2010 + WTL8.1 + dialog

实验目的:为了发生特定系统消息时,做一些额外的处理。

  e.g.

  * ALT+F4关闭程序

  * 点击任务栏上的程序图标,恢复程序

// MainDlg.h : interface of the CMainDlg class///////////////////////////////////////////////////////////////////////////////#pragma onceclass CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,public CMessageFilter, public CIdleHandler{public:enum { IDD = IDD_MAINDLG };virtual BOOL PreTranslateMessage(MSG* pMsg);virtual BOOL OnIdle();BEGIN_UPDATE_UI_MAP(CMainDlg)END_UPDATE_UI_MAP()BEGIN_MSG_MAP(CMainDlg)MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)MESSAGE_HANDLER(WM_DESTROY, OnDestroy)COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)COMMAND_ID_HANDLER(IDOK, OnOK)COMMAND_ID_HANDLER(IDCANCEL, OnCancel)MESSAGE_HANDLER(WM_SYSCOMMAND, OnSysCommand)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*/);LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);LRESULT OnSysCommand(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);void CloseDialog(int nVal);};


LRESULT CMainDlg::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled){if (WM_SYSCOMMAND != uMsg)return -1;OutputDebugStringW(L">> CMainDlg::OnSysCommand\r\n");switch (wParam){/// when maindlg show normal, click the minimize dialog on task tar, entry herecase SC_MINIMIZE: ///< the minimize button of main dialog press downOutputDebugStringW(L"SC_MINIMIZE\r\n");break;/// ALT + F4 key press downcase SC_CLOSE: ///< the close button of main dialog press downOutputDebugStringW(L"SC_CLOSE\r\n");break;case SC_RESTORE: ///< when maindlg minimized, click the minimize dialog on task tar, entry here/// if need, refresh main dialog when display resolution changedOutputDebugStringW(L"SC_RESTORE\r\n");break;default:break;}bHandled = FALSE; ///< if set bHandled to TRUE, the message process invalidOutputDebugStringW(L"<< CMainDlg::OnSysCommand\r\n");return 0;}


0 0