如何实现右击树控件某项,在弹出的菜单中选择"重命名"后实现NM_BEGINLABELEDIT和NM_ENDLABELEDIT那样的编辑功能?

lizifong 2004-12-31 03:35:37
如题,如何在"重命名"函数中做到像资源管理器中那样的重命名操作.
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gogowhy 2005-03-08
  • 打赏
  • 举报
回复
m
lizifong 2005-01-01
  • 打赏
  • 举报
回复
//... In PreTranslateMessage
if( pMsg->message == WM_KEYDOWN )
{
if(pMsg->hwnd == m_treeCtrl.GetEditControl()->m_hWnd)
{
if ( pMsg->wParam == VK_RETURN )
{
m_treeCtrl.GetEditControl()->LimitText(128);
m_treeCtrl.GetEditControl()->GetWindowText(strText);
m_treeCtrl.SetFocus();
return TRUE;
}
}
}
//...
搞定
lizifong 2004-12-31
  • 打赏
  • 举报
回复
BOOL CLwndBar::PreTranslateMessage(MSG* pMsg)
{
CEdit *pEdit = m_treeCtrl.GetEditControl();
if (pEdit != NULL)
{
if (pMsg->lParam == 0x000D) // 这样判断回车怎么没反应?
m_treeCtrl.SetFocus();
}


m_TipCtrl.RelayEvent(pMsg);
return CWnd::PreTranslateMessage(pMsg);
}
fengqinggao 2004-12-31
  • 打赏
  • 举报
回复
呵呵,是我看错了,我用的是PreTranslateMessage(),在其中判断分两步:
1、用树控件的GetEditControl()函数获取重命名的编辑框,如果返回值不为NULL,则表示正在命名;
2、判断是否按下了回车键,如果是,就用SetFocus()函数将焦点设置到树控件上,这和左键单击的作用是一样的,所以可以结束命名,它会自动调用那个OnEndlabeledit()函数
lizifong 2004-12-31
  • 打赏
  • 举报
回复
谢谢:
至于怎么结束命名,一般有两种方法:响应回车键和响应鼠标在该Item外的地方单击,前者系统会自己处理,后者需要自己处理
我发现如果不用重命名这个函数,系统倒是会处理回车;现在的情况正好与你上面所说的相反,前者系统不处理,后者系统处理了?
该在何处处理这个回车? PreTranslateMessage, OnKeyDown, OnEndLabelEdit?
fengqinggao 2004-12-31
  • 打赏
  • 举报
回复
1、在你的重命名函数中,调用CEdit* EditLabel( HTREEITEM hItem );函数,就可以实现编辑功能;
2、响应OnBeginlabeledit()函数,该函数在命名前调用,在里面记录当前选中的Item和名字;
3、响应OnEndlabeledit()函数,该函数在命名结束时调用,判断新名字是否符合标准,如果不符合标准,就返回到第一步,继续命名,如果符合,则将选中的Item的名字设置为新名字

至于怎么结束命名,一般有两种方法:响应回车键和响应鼠标在该Item外的地方单击,前者系统会自己处理,后者需要自己处理

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧