我做的是一个基于对话框的应用程序,对话框属性中添加了菜单和状态条,为了使菜单的Prompt(即菜单的提示信息)在状态条上显示,我手工加了处理WM_MENUSELECT消息的函数
void CSalaryDlg::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu)
{// 处理菜单项的Prompt
CDialog::OnMenuSelect(nItemID, nFlags, hSysMenu);
    if (nItemID != 0) // 可能为0(seperator时)
    {
CString strStatusText;
strStatusText.LoadString( nItemID );
if (!strStatusText.IsEmpty())
m_wndStatusBar.SetPaneText(0, strStatusText);//0为状态条的第一个,即显示菜单的提示信息
}
}
上面的没有错误,但当鼠标放在菜单选项时,在状态栏却没有显示提示信息,不知道为什么,请各为高手多多指教,谢谢!!

解决方案 »

  1.   

    我想可能是你的状态栏没有重载Update_Command_UI(CCmdUI* pCmdUI)
    并且设置
    pCmdUI->Enable(TRUE);
      

  2.   

    谢谢答复,请问以下,应该怎么Update_Command_UI(CCmdUI* pCmdUI),我的状态栏是手工加入的,不是自动生成的
      

  3.   

    可能应该是在Menu Item Properties (菜单设计器)的Prompt属性写 信息, 也就是当你鼠标在菜单上在状态栏上显示菜单的提示信息
      

  4.   

    我的状态拦是手工加入的,不是自动生成的,当然在Menu Item Properties (菜单设计器)的Prompt属性写了信息,增加断点。调试检查程序是没有被执行,请问一下怎么使它自动执行,谢谢
      

  5.   

    你对这个消息都自己加了些什么?就是.h和.cpp中添了啥?
      

  6.   

    WM_MENUSELECT要在WindowProc里映射,对话框本省缺省会忽略掉。
    LRESULT CALLBACK WindowProc(
      HWND hwnd,       // handle to window
      UINT uMsg,       // WM_MENUSELECT
      WPARAM wParam,   // menu item (UINT) and flags (UINT) /lower 
      LPARAM lParam    // handle to menu (HMENU)
    );(UINT) LOWORD(wParam)为nItemID;
    (UINT) HIWORD(wParam)为nFlag;
    (HMENU)lParam为hSysMenu
      

  7.   

    to   happyparrot(快乐鹦鹉) :
    在.h中直声明了void CSalaryDlg::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu)而已;
    to    kongyunzhongque(云雀) :
    请问一下LRESULT CALLBACK WindowProc()应该放在什么位置呢?我是菜鸟
      

  8.   

    那肯定不行啊。消息总得有消息号。在cpp文件中,应该有诸如WM_COMMAND等等的消息映射。如果只是你这样写,那只是一个普通的类函数而已。
      

  9.   

    你这个办法是可行的,不过好像没有执行这个函数。
    你是在类向导里面添加的这个函数么?
    如果不是的话,请确保下文中的第二行存在指定的位置。
    //{{AFX_MSG_MAP(CSalaryDlg)
    ON_WM_MENUSELECT()
    //}}AFX_MSG_MAP
      

  10.   

    好了,我没有添加消息映射,按   YunLion(静静的想) 的方法我添加了ON_WM_MENUSELECT(),问题已经解决了,谢谢大家的帮助哦!!!