第壹步:在向導中給妳的樹形控件關聯壹個CTreeCtrl的變量(就像妳代碼中的m_Mess)
第二步:在向導中,添加該樹形控件的NM_Click消息(就是鼠標單擊消息,以下假設函數名為OnClickTree)
第三步:在代碼中添加妳的數據(主要是在初始化樹形控件的數據的函數中,如妳代碼中的OnInitDialog()就可以)
HTREEITEM hRoot = m_ctrlTree.InsertItem("北京");
m_ctrlTree.SetItemData(hRoot, 1);
HTREEITEM hChild = m_ctrlTree.InsertItem("朝陽區", hRoot);
m_ctrlTree.SetItemData(hChild, 2);
hChild = m_ctrlTree.InsertItem("海澱區", hRoot);
m_ctrlTree.SetItemData(hChild, 3);
註意:我在上面用了SetItemData函數,主要是給不同的節點添加不同的標記
,在下面的單擊消息函數中就可以看出它的作用
第四步:在OnClickTree函數中添加鼠標單擊消息響應代碼
CPoint pt = GetCurrentMessage()->pt; //獲取當前鼠標點擊消息的坐標點
m_ctrlTree.ScreenToClient(&pt); //將鼠標的屏幕坐標,轉換成樹形控件的客戶區坐標
UINT uFlags = 0;
HTREEITEM hItem = m_ctrlTree.HitTest(pt, &uFlags);//然後做點擊測試
if ((hItem != NULL) && (TVHT_ONITEM & uFlags))//如果點擊的位置是在節點位置上面
{
m_ctrlTree.SelectItem(hItem);
//獲取開始我們設置的數據,註意這就是我為什麽開始要每個節點設置不同的數據的原因。當然,如果妳的數據節點比較少,妳也可以通過獲取節點的文字,如上面設置的"海澱區",然後通過字符串比較來判斷點擊了哪個節點
int nDat = m_ctrlTree.GetItemData(hItem);
//然後根據不同的節點,妳完成不同的動作即可
switch (nDat)
{
case 1:
AfxMessageBox("北京");
break;
case 2:
AfxMessageBox("北京->朝陽區");
break;
case 3:
AfxMessageBox("北京->海澱區");
break;
default:
AfxMessageBox("ERROR");
}
}
//要是這樣還搞不定妳的問題,我真就無語了,給分吧,老大,哈哈哈哈哈