我想在受到这个消息时执行一个自己定义的函数,
但是同时又想让原本可以执行的哪个函数也能够
执行,应该怎么做啊?

解决方案 »

  1.   

    重载窗口的PreTranslateMessage.
    BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)  //消息预处理
    {
       if (pMsg->message == WM_CLOSE)
       {
         ...... //some thing you will do
       }
       return CDialog::PreTranslateMessage(pMsg);
    }用::GetDesktopWindow()可以得到桌面窗口的句柄
      

  2.   

    WM_MAXIMIZE,WM_MINIMIZE这两个消息找不到他们的定义啊,
    这是为什么?WM_CLOSE就可以找到#define WM_CLOSE 0x10
      

  3.   

    找不到是因为根本没有这两个消息。其实只要重载WM_CLOSE消息的相应方法OnClose()就可以了,在后面调用基类的OnClose()。HWND GetDesktopWindow(VOID);
      

  4.   

    BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
    {


    if (pMsg->message==WM_CLOSE||pMsg->lParam==WM_CLOSE||pMsg->wParam==WM_CLOSE)
       {
       MessageBox("close");
        
       }
       if (pMsg->message==SC_MINIMIZE||pMsg->lParam==SC_MINIMIZE||pMsg->wParam==SC_MINIMIZE)
       {
       ShowWindow(SW_HIDE);
       }
    return CFrameWnd::PreTranslateMessage(pMsg);
    }
      

  5.   

    重载CMainFrame::WindowProc函数
    LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_CLOSE:
            MessageBox("close");
            break;
        case WM_SYSCOMMAND:
            switch (wParam)
            {
            case SC_MINIMIZE:
                 ShowWindow(SW_SHOWMINIMIZED);
                 return 0;
            case SC_MAXIMIZE:
                 ShowWindow(SW_SHOWMAXIMIZED);
                 return 0;
            }
            break;
    }