大家好,我现在想给树控件做个右键菜单,其中菜单内容包括对节点的增加,删除,修改节点名字,在我的工程里面,树的构建是通过读数据库动态生成的,现在我想做一颗通过通过点击鼠标的右键来实现对树的控制,我写的代码如下:
void CMainDlg::OnRclickMyTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code her
   
CPoint point;
    GetCursorPos( & point );
    CMenu menuPopup;
    menuPopup.CreatePopupMenu();  
    menuPopup.AppendMenu( MF_STRING, ID_zengjiajiedian, _T(""增加"));
    menuPopup.AppendMenu( MF_SEPARATOR );
    menuPopup.AppendMenu( MF_STRING, ID_shanchujiedian, "删除");
    menuPopup.AppendMenu( MF_SEPARATOR );
    menuPopup.AppendMenu( MF_STRING, ID_MENUITEM_EXIT, "修改");
    menuPopup.AppendMenu( MF_SEPARATOR );
    menuPopup.AppendMenu( MF_STRING, ID_tuichu, "退出" );  menuPopup.TrackPopupMenu( TPM_LEFTALIGN |  TPM_RIGHTBUTTON | TPM_RETURNCMD, point.x, point.y, AfxGetMainWnd() );
    switch( nCmd )
    {
    case ID_shanchujiedian:        break;    case ID_zengjiajiedian:
        {
Ctianjia_Dlg m_dlg;
m_dlg.DoModal();
break;
}
    case ID_tuichu:
    default:   
break;

    } 
*pResult = 0;
}这种方法可以做到弹出菜单,但是我想通过菜单的增加事情去将tianjia_Dlg 对话框调出来,但是我的这种方法不行,不能这样能不能实现,希望大家能帮帮忙。。非常感谢

解决方案 »

  1.   

    OnRclickMyTree 这个函数在你右键tree弹出菜单的时候就已经走完了。。
    你要响应下面的操作就要自己再加消息。。
      

  2.   

    switch( nCmd )
        {
        case ID_shanchujiedian:        break;    case ID_zengjiajiedian:
            {
    Ctianjia_Dlg m_dlg;
    m_dlg.DoModal();
    break;
    }
        case ID_tuichu:
        default: 
    break;    } 
    这段代码是从别的地方扣出来的吧。。囧
    nCmd  是什么?
      

  3.   

    Ctianjia_Dlg m_dlg; 设为全局
      

  4.   

    nCmd=menuPopup.TrackPopupMenu( TPM_LEFTALIGN |  TPM_RIGHTBUTTON | TPM_RETURNCMD, point.x, point.y, AfxGetMainWnd() ); 
    不好意思,上面是nCmd的值,打上去的忘了
      

  5.   

    TrackPopupMenu 的返回值是 BOOL,不是所点击菜单的 ID 值,可以在对话框中手动添加菜单的响应函数://菜单的消息映射。 afx_msg void Onshanchujiedian();                 //.h文件 ON_COMMAND(ID_shanchujiedian, Onshanchujiedian)  //.cpp文件 
      

  6.   

    添加到对话框的头文件(找一找):// Generated message map functions
    //{{AFX_MSG(CMfc1Dlg)...
    afx_msg void Onshanchujiedian();  //添加到这里。//}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    添加到对话框的实现文件:
    BEGIN_MESSAGE_MAP(CMfc1Dlg, CDialog)
    //{{AFX_MSG_MAP(CMfc1Dlg)        ...
             ON_COMMAND(ID_shanchujiedian, Onshanchujiedian) //添加到这里。 //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
      

  7.   

    //最后写菜单项目的响应函数。
    void CMainDlg::Onshanchujiedian()
    {
       ...
    }