是关于给树控件加tooltip的。我先是在OnCreate函数里加入这段代码
          HTREEITEM hItem,hSubItem;
CTreeCtrl* pTree = (CTreeCtrl*)GetDlgItem(IDC_TREECTRL);
hItem = pTree->InsertItem("ºÃÓÑ",TVI_ROOT);
hSubItem = pTree->InsertItem(Contactors[0],hItem);
hSubItem = pTree->InsertItem(Contactors[1],hItem,hSubItem);
hSubItem = pTree->InsertItem(Contactors[2],hItem,hSubItem);
hSubItem = pTree->InsertItem(Contactors[5],hItem,hSubItem);
hSubItem = pTree->InsertItem(Contactors[6],hItem,hSubItem);
        pTree->ModifyStyle(TVS_NOTOOLTIPS, TVS_INFOTIP); 
if (!m_ctrlTree.Create(WS_CHILD|WS_VISIBLE|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS|TVS_INFOTIP, CRect(0, 0, 0, 0), this, IDC_TREECTRL))
   {
      TRACE0("Failed to create instant bar child\n");
      return -1;
   }
其次加入映射消息声明,如下所示:
void CMainFrame::OnGetInfoTip(NMHDR* pNMHDR, LRESULT* pResult) 
{   CTreeCtrl* pTree = (CTreeCtrl*)GetDlgItem(IDC_TREECTRL);
*pResult = 0;
NMTVGETINFOTIP* pTVTipInfo = (NMTVGETINFOTIP*)pNMHDR;
LPARAM itemData = (DWORD) pTVTipInfo->lParam;
HTREEITEM hItem = pTVTipInfo->hItem;
CString tip;
HTREEITEM hRootItem = m_chassisTree.GetRootItem();
if (hRootItem != pTVTipInfo->hItem)
{
    tip = "显示字";
}
else
{
    tip = "显示的字";
}
strcpy(pTVTipInfo->pszText, (LPCTSTR) tip);
}
以上代码是参考的别人的,我加了之后,编译通过,但是运行后我把鼠标移到树控件处就弹出一个报错窗口。我在给消息处理函数下断点,发现运行到HTREEITEM hRootItem = m_chassisTree.GetRootItem();时报错窗口弹出。
请问是哪里出问题,该怎么改??

解决方案 »

  1.   

    哈哈,已经解决了。m_chassisTree是树控件的一个变量而已。
      

  2.   

    去掉了if (!m_ctrlTree.Create(WS_CHILD|WS_VISIBLE|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS|TVS_INFOTIP, CRect(0, 0, 0, 0), this, IDC_TREECTRL)) 
    然后消息处理函数改成
    void CMainFrame::OnGetInfoTip(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    CTreeCtrl* pTree = (CTreeCtrl*)GetDlgItem(IDC_TREECTRL);
    NMTVGETINFOTIP* pTVTipInfo = (NMTVGETINFOTIP*)pNMHDR;
        HTREEITEM hItem = pTVTipInfo->hItem;
        lstrcpyn(pTVTipInfo->pszText, pTree->GetItemText(hItem), pTVTipInfo->cchTextMax);
    *pResult = 0;
    }
    就行了