现在已实现了右键单击树节点,并弹出了右键菜单,且菜单项里也有“重命名”,请问如何实现点击菜单项“重命名”后实现该功能。需要在“重命名”对应的函数里面做什么处理啊?
我已将EditLabel设置为了true,然后添加了TVN_BEGINLABELEDIT 和 TVN_ENDLABELEDIT 。亦需要重载它们两个对应的事件函数?
有实例代码帮助理解最好了。谢谢解答。
我已将EditLabel设置为了true,然后添加了TVN_BEGINLABELEDIT 和 TVN_ENDLABELEDIT 。亦需要重载它们两个对应的事件函数?
有实例代码帮助理解最好了。谢谢解答。
case 1: xxxxx;if( aaaa1 == aaaa) switch(1)
http://blog.sina.com.cn/s/blog_4b44e1c00100d4lr.html
void CMyTreeCtrl::OnTvnBeginlabeledit(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult=1;
CEdit*pEdit=GetEditControl();
ASSERT(pEdit);
if (pEdit)
{
pEdit->LimitText(15);
*pResult=0;
}
}
void CMyTreeCtrl::OnTvnEndlabeledit(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码 BOOL bValidItem=FALSE;
CString strItem=pTVDispInfo->item.pszText;
if (0<strItem.GetLength())
{
HTREEITEM hParent=GetParentItem(pTVDispInfo->item.hItem);
bValidItem=!DoesItemExist(hParent,strItem);
}
*pResult = bValidItem;
}
// Show the edit control on the label of the selected item.
// The tree control must have the TVS_EDITLABELS style set.
HTREEITEM hSel = m_TreeCtrl.GetSelectedItem();
CEdit* pmyEdit = m_TreeCtrl.EditLabel(hSel);
ASSERT(pmyEdit != NULL);
}
2.在新类中添加CEdit m_edit,然后在新类中重载PruSubClassWindow这个函数,然后在这个函数中添加如下代码:
CRect rcEdit;
rcEdit.left=10; //Edit大小随便定义,大小对后面的操作没影响
rcEdit.top=10;
rcEdit.right=20;
rcEdit.bottom=20;
m_edit.Create(WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN | ES_LEFT,rcEdit,this,1);
m_edit.ShowWindow(SW_HIDE);
3.在新类中添加:HTREEITEM hItem; //用这个来记录鼠标选中项..
4.在新类中添加鼠标右键的消息,在消息的响应函数中添加:
hItem=GetSelectedItem();
CMenu menu;
menu.LoadMenu(你的菜单ID);
CMenu *pSubMenu=menu.GetSubMenu(0); //假设你的要弹出的菜单创建在主菜单的第一个主菜单下
pSubMenu->TrackPopMenu(........); //对菜单进行显示 ,具体参数可参考MSDN
4.在新类中创建一个新的函数void ShowEdit();
在函数中添加:
CRect rcItem;
GetItemRect(hItem,rcItem,true);
CString strText;
GetItemText(hItem,strText);
m_edit.MoveWindow(rcItem);
m_edit.ShowWindow(SW_SHOW);
m_edit.SetWindowText(strText);
m_edit.BringWindowToTop();
}
5.在新类中消息映射中添加:ON_EN_KILLFOCUS(1,OnEnKillFocusEdit) // 数字1是前面创建Edit时的ID.
在类中添加:afx_msg void OnEnKillFocusEdit();
然后添加
void CMyCtreeCtrl::OnEnKilkFocusEdit()
{
POINT pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
CRect rcItem;
GetItemRect(hItem,rcItem,true);
if(!rcItem.PtInRect(pt))
{
CString strText;
m_edit.GetWindowText(strText);
SetItemText(hItem,strText);
m_edit.ShowWindow(SW_HIDE);
}
}
这个函数起到的作用是,点击鼠标左键实现树项目文本修改.(鼠标要点击在修改项之外,才能实现修改项的文本)..
5.在对话框中添加树控件,把树控件和CMyTreeCtrl关联起来..关联的变量名为:m_treectrl,在你的菜单项“重命名”的映射函数中添加如下代码:
m_treectrl.ShowEdit();
添加了以上的步骤,相信就应该能实现你想要实现的效果...嘻嘻...