绝对新手提问,请详细解释
添加了一个树控件
如:
北京
--朝阳区
--海淀区
我要实现的功能是:
单击 朝阳区,在FORM内,树的右边显示一些控件,用来添加朝阳区的信息
单击 海淀区,功能如上。
现在我不懂的是,如何添加单击事件,比如:
BOOL CCTree_sampDlg::OnInitDialog()
{
HTREEITEM beij = m_Mess.InsertItem("北京",0,0);
m_Mess.InsertItem("朝阳区",1,1,beij);
。。。。。
}
1。单击事件是应该添加上边的代码里边吗?
2。如果不是,应该在哪里添加?
3。添加之前,用不用添加成员变量?
4。用不用添加新类?
5。如果添加类,在哪里添加?
我是新手,需要详细的答案,谢谢,如果答案通过,另有分数奉送。
å¾ç®åï¼
第ä¸æ¥ï¼å¨å导ä¸ç»ä½ çæ å½¢æ§ä»¶å ³èä¸ä¸ª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");
}
}
//è¦æ¯è¿æ ·è¿æä¸å®ä½ çé®é¢ï¼æçå°±æ è¯äºï¼ç»åå§ï¼è大ï¼ååååå
第ä¸æ¥ï¼å¨å导ä¸ç»ä½ çæ å½¢æ§ä»¶å ³èä¸ä¸ª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");
}
}
//è¦æ¯è¿æ ·è¿æä¸å®ä½ çé®é¢ï¼æçå°±æ è¯äºï¼ç»åå§ï¼è大ï¼ååååå
温馨提示:答案为网友推荐,仅供参考