我把这个问题简化一下说吧:一个CTreeCtrl框框里面有2个item,一个叫做
aaa,一个叫做bbb,现在aaa选中,我用鼠标点bbb,在点中bbb的时候弹出一个
YESNO的messageBox,如果选择yes,那么bbb处于选中状态,如果选择no,那么
原来的aaa还处于选中状态。
问题是:如果我在OnSelectedChanged或者OnSelectedChanging里面弹出
MessageBox,那么无论我怎么写,在OnSelectedChanged(或者OnSelectedChanging)
结束后,都会自动的把bbb选中。怎么办呀?
求求各位帮帮我,送多少分都可以,十万分感谢!!

解决方案 »

  1.   

    为什么不在OnLButtonDown中试试!
    要先调用CTreeCtrl::OnLButtonDown(nFlags, point);
    在后面加!
      

  2.   

    设你的对话框类CYourDlg,有CTreeCtrl成员变量m_tree,映射该控件的TVN_SELCHANGING消息,根据消息对话框的结果来给*pResult赋值。如果为1,表示取消动作。void CYourDlg::OnSelchangingTree1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        NM_TREEVIEW* pnmtv = (NM_TREEVIEW*)pNMHDR;
            if(m_tree.GetItemText(pnmtv->itemNew.hItem) == "bbb")
        {
            if(MessageBox("确定选择bbb?", "测试", MB_YESNO|MB_ICONQUESTION) == IDNO)
            {
                *pResult = 1;
                return;
            }
        }    *pResult = 0;
    }
      

  3.   

    这样试一下:
    void CCTreeControlDemoDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

    if (MessageBox("If use current node as focus node?",NULL,MB_YESNO) == IDYES)
    {
    m_treeTest.SetItemState(pNMTreeView->itemNew.hItem ,TVIS_SELECTED,TVIS_SELECTED);
    }
    else 
    {
    m_treeTest.SetItemState(pNMTreeView->itemOld.hItem ,TVIS_SELECTED,TVIS_SELECTED);
    m_treeTest.SetItemState(pNMTreeView->itemNew.hItem ,0,TVIS_SELECTED);
    }
    *pResult = 0;
    }