BOOL CdynamicApp::PreTranslateMessage(MSG* msg )
{
 if(msg->message == WM_COMMAND)
 {
                   if(LOWORD(msg->wParam) == ID_FILE_OPEN)
AfxMessageBox("OPEN!");
 if(LOWORD(msg->wParam) == ID_FILE_SAVE)
AfxMessageBox("SAVE");
 }
 return CWinApp::PreTranslateMessage(msg);}
用上面的函数能够捕获用户选择菜单栏和加速健的消息,msdn上说WM_COMMAND是选择菜单栏和加速健后系统发送的消息 。拿用户单击工具栏後系统发送的消息名是什么呢?是不是PreTranslateMessage不捕获工具栏的消息阿,因为我用下面的函数处理的时候(没有判断),当单击菜单兰的时候还是没有反应。请指点阿,先谢乐!
BOOL CdynamicApp::PreTranslateMessage(MSG* msg )
{

 
       if(LOWORD(msg->wParam) == ID_FILE_OPEN)
AfxMessageBox("OPEN!");
       if(LOWORD(msg->wParam) == ID_FILE_SAVE)
AfxMessageBox("SAVE");
 
 return CWinApp::PreTranslateMessage(msg);}

解决方案 »

  1.   

    消息和按菜单一样,但在PreTranslateMessage是没有的。
    不过可以替换MainFrame的窗口过程截获到。
    long OldProc = NULL;
    LRESULT CALLBACK WindowProce(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    if(uMsg == WM_COMMAND && wParam == ID_FILE_OPEN)
    AfxMessageBox("Open");
    return CallWindowProc((WNDPROC)OldProc, hWnd, uMsg, wParam, lParam);
    }在CMainFrame::OnCreate里加上
    OldProc = SetWindowLong(this->GetSafeHwnd(), GWL_WNDPROC, (long)(WindowProce));
      

  2.   

    aaasng真实高手,立即结帖,50分全部奉上!不知道能不能交个朋友?[email protected],期盼你的答复!