我在右键响应中发送消息给WM_CONTEXTMENU,在OnContextMenu里处理右键菜单。我还有一些Edit用于显示TreeItem的一些参数(比如名称等),在TVN_SELCHANGED消息中显示出这些内容。现在的问题是,我右键第一次点击时,菜单能出来,Edit也能显示;如果鼠标不动,再点一下右键,那菜单能出来,但是Edit就不能显示了!开始我以为是鼠标不动就不会再发送TVN_SELCHANGED消息,但是我人为的在右键响应函数中调用TVN_SELCHANGED消息对应的函数,还是不行!困扰我好久了阿,这是什么原因阿!各位高手,敬请赐教!

解决方案 »

  1.   

    在右键响应中发送消息给WM_CONTEXTMENU,在OnContextMenu里处理右键菜单。
    -----------------------------------------------------------------------
    这句话实在不明白是啥意思用TPM_RETURNCMD标志位不是可以返回所选择的命令直接处理吗?
      

  2.   

    Edit同CTree在同一个对话框中。Edit中的内容是在TVN_SELCHANGED消息对应的函数里面显示出来的。
      

  3.   

    to :palmax(南宫煌)
    我是在右键点击的消息对应的那个函数中发送消息给OnContextMenu函数,在
    OnContextMenu中处理右键菜单,因为我的右键菜单有很多种形式,所以干脆封装在一个函数里面了。下面这样发消息没有错的,我的右键菜单完全正确。不过就是存在我上面说的那个问题。// 响应右键点击
    void CTestTreeDlg::OnNMRclickTree(NMHDR *pNMHDR, LRESULT *pResult)
    {
    // 当右键点击时,发送消息给OnContextMenu(),弹出右键菜单
    SendMessage(WM_CONTEXTMENU, (WPARAM) m_hWnd, GetMessagePos());
    *pResult = 1;
    }
    // 弹出右键菜单
    void CUserClassDlg::OnContextMenu(CWnd* pWnd, CPoint ptMousePos)
    {
    ……
    }
      

  4.   

    更改EDIT的值以后你有没有Update();还有就是一般右键菜单只做右键菜单的事.右键单击的话树型控件当前选择中项是不会改变的.你可以设断点调试看程序是怎么运行的.我现在都不太清楚你到底是要实现什么功能.要右键单击树的时候,要弹出菜单,并且EDIT的内容也要变?如果是这样的话,你可以在弹出菜单先,先判断当然的POINT值,用Hitest()获是树的结点.再SetCurSel();然后更改EDIT,再显示菜单..
      

  5.   

    to:raymonzhao更改Edit值的时候我直接用的SetWindowText,而且第一次右击的时候正确,鼠标不动再右击就不对了,好像就是第二次右击得时候没有选择到这个TreeItem了。而且更改Edit值我是在TVN_SELCHANGED对应的函数里面进行的,不知道是不是因为这个。右键菜单我就是你说的那样做的,而且右键菜单没有问题。调试的时候每次都对了的,但是运行的时候就不对了。
      

  6.   

    SetWindowText(strText)的strText参数你是怎么获得的?
    调试的时候看一下有没有正确附值
      

  7.   

    调试的时候始终都是对的,Edit也能够显示出来,但是运行的时候就出现我最开始说的那种情况了~~郁闷!
      

  8.   

    谢谢大家,我把右键的处理也放到TVN_SELCHANGED里面好像就可以了~~不知道怎么回事,对Tree的消息传递不是很了解!非常感谢大家的热心帮助!