我有一段代码,基本任务是在TreeCtrl的一个项目被单击时执行一定的操作。我的CTreeCtrl是在程序运行过程中手动创建的,在98下面运行正常,但是在2000和XP下就不正确,表现为没有对应的操作。
另外,我有实现了一个很短的代码段,完全可行。
哪位大虾知道为什么么?出错的代码段:
void CExView::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here
CExDoc* pDoc=GetDocument();
HTREEITEM  hsel=m_tr1->GetSelectedItem();
CMainFrame *pMain=(CMainFrame*)GetParentFrame(); CString str; if(hsel>=0)
{
str=m_tr1->GetItemText(hsel);
//GetDocument()->SetTitle(str);
} if(str=="Item1" )
         {
pMain->Func1();
pDoc->showflag=false;
}
if(str=="Item2")
{
pMain->Func();
                  pDoc->showflag=false;
} *pResult = 0;
}

解决方案 »

  1.   

    在2000下跟踪m_trl和str的值试试
      

  2.   

    压根没有对CTreeCtrl的响应,就是不管如何点都没有对这个的执行。整体结构:
    头文件中手动消息映射,在protected中
    afx_msg void OnSelchangedTree2(NMHDR* pNMHDR, LRESULT* pResult);
    在cpp文件中有:
    BEGIN_MESSAGE_MAP(CEx001View, CFormView)
    //{{AFX_MSG_MAP(CEx001View)
    ……………………
    ON_NOTIFY(TVN_SELCHANGED, IDC_TREE2, OnSelchangedTree2)
    //}}AFX_MSG_MAP
    ……………………
    END_MESSAGE_MAP()最后就是上面的执行OnSelchangedTree2了,老大们看看少了什么没有
    3x
      

  3.   

    我发现了一个问题。我的可以正确执行的版本的View类继承自CView,而不能正确执行的继承的是CFormView类。因此我把原来不能执行的代码换成CView的话,就成功执行了。
    只是不明白为什么用CFormView类在2000和xp下面就是不能用,而在98下面一切正常。
    哪位老大知道的,麻烦看看,找到出错原因就结贴
      

  4.   

    本问题得到解决,原来是NT的Bug(^_^微软的MSDN中这么说的)
    就是我选择的基类是CFormView或者CDialog时,如果动态创建一些公共控件的话就会不能接受父窗体的消息。在NT平台下的问题,因此在2000和xp下有问题而98下就没有问题。想知道具体问题的话查MSDN
    标题:
    PRB: No ANSI Notifications from Control Created in OnCreate
      

  5.   

    haha
    工程做完拉.
    来总结拉