我在Dialog上添加ToolBar,ToolBar其中一个按钮点击通过TrackPopupMenu显示出一个弹出菜单,但菜单每项点击都没反映,但是通过Dialog属性中General页的Menu设置就可以触发点击消息。为什么?

解决方案 »

  1.   

    把你添加toolbar的代码贴出来看看
      

  2.   

    说的不太清楚,没法帮你具体说出原因。
    你看下:
    _____________________________
    利用调用TrackPopupMenu函数,手工添加弹出菜单:
    1)用资源管理器添加一个菜单资源
    2)在鼠标右键消息响应函数中,加载菜单资源,并获得要显示的子菜单指针,并用该指针调用TrackPopupMenu函数便完成任务(但要注意:鼠标响应函数传进来的坐标是客户区坐标,而TrackPopupMenu函数中使用的是屏幕坐标,在调用TrackPopupMenu前要调用ClientToScreen客户区坐标到屏幕坐标的转换)
    事例代码:
    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    CMenu *pPopup=menu.GetSubMenu(0);
    ClientToScreen(&point);
    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);
    说明:
    CWnd::ClientToScreen(..);//将一个坐标点或一个矩形区域坐标转换成屏幕坐标。
    CMenu::TrackPopupMenu(..);//在指定位置以指定的方式显示弹出菜单。
    CWnd::ScreenToClient(..);
    //Converts the screen coordinates of a given point or rectangle on the display to client coordinates.
      

  3.   

    代码如下:
    载入
    moSwitchMenu.LoadMenu(IDR_SWITCHMENU);
    弹出:
    void CMainBarDialog::OnSwitchMenu()
    {//ID_SWITCH_MENU映射的函数,ID_SWITCH_MENU为ToolBar其中一个按钮ID
    // TODO: Add your command handler code here
    RECT lrtItemRect;
    moToolBar.GetToolBarCtrl().GetRect(ID_SWITCH_MENU, &lrtItemRect);
    moSwitchMenu.GetSubMenu(0)->TrackPopupMenu(省略
    }void CMainBarDialog::OnMenuOverview()
    {//菜单IDR_SWITCHMENU中一子菜单映射函数,就是此函数无效,调试环境断不下
    // TODO: 在此添加命令处理程序代码
    CMainForm *lpMainForm = NULL;
    lpMainForm = ((CNeiMengYiLiDlg*)AfxGetApp()->m_pMainWnd)->moMainFormList.at(0);
    if(NULL != lpMainForm)
    lpMainForm->ShowWindow(SW_SHOW);
    }
      

  4.   

    TrackPopupMenu  的父窗口指针你写的是什么? 是不是this?
      

  5.   

    进行映射了,通过Dialog属性中General页的Menu设置就可以触发点击消息striking(硬撑者) :我写的是this
      

  6.   

    那你在TrackPopupMenu 加上TPM_RETURNCMD, 当选择菜单时, 查看它的返回值, 看看是否是你选择的菜单的id。int nCmd = moSwitchMenu.GetSubMenu(0)->TrackPopupMenu(TPM_RETURNCMD....
      

  7.   

    那就直接处理
    switch menuid
    {
     case:ID_MENU_1:
    break;。。
    }