社区
界面
帖子详情
如何实现右击树控件某项,在弹出的菜单中选择"重命名"后实现NM_BEGINLABELEDIT和NM_ENDLABELEDIT那样的编辑功能?
lizifong
2004-12-31 03:35:37
如题,如何在"重命名"函数中做到像资源管理器中那样的重命名操作.
...全文
105
6
打赏
收藏
如何实现右击树控件某项,在弹出的菜单中选择"重命名"后实现NM_BEGINLABELEDIT和NM_ENDLABELEDIT那样的编辑功能?
如题,如何在"重命名"函数中做到像资源管理器中那样的重命名操作.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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外的地方单击,前者系统会自己处理,后者需要自己处理
树
形
控件
的
重命名
问题
树
控件
在很多时候都可以用得到,本来觉得网上应该有很多资料,可以找个例子几行行代码就可以解决了的, 但是google了一下,关键字“
树
形
控件
重命名
”搜到的网页都不是我想要的,找了两个左右有用的网页看了一下,感觉都没有完全说清楚, 我决定先把必要的东西加上,然后边调边试,总算成功了,不说废话,看下面 首先加上
树
形
控件
的两个通知消息:TVN_BE
GIN
LABEL
EDIT
,TVN_
CListCtrl
控件
主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
LVN_BE
GIN
DRAG 鼠标左键正在被触发以便进行拖放操作(当鼠标左键开始拖拽列表视图
控件
中的项目时产生) LVN_BE
GIN
RDRAG 鼠标右键正在被触发以便进行拖放操作(当鼠标右键开始拖拽列表视图
控件
中的项目时产生) LVN_BE
GIN
LABEL
EDIT
开始
编辑
项的文本 LVN_COLUMNCLICK 单击列(当鼠标单击列表视图
控件
列标题时产生)
NM
_CLICK 当鼠标
MFC的所有
控件
的事件和属性
1、CButton: 事件: BCN_HOTITEMCHANGE 当鼠标进入或离开此按钮空间区域时发生该事件 2、CListCtrl: 2.1事件:
NM
_CLICK 用户单击列表时发送此消息
NM
_DBLCLK 用户双击列表时发送此消息
NM
_RCLICK 用户右键单击列表时发送此消息
NM
_RDBLCLK 用户右键双击列表时发送此消息
NM
_KILLFOCUS 列表失去焦点时发送此消息
NM
_OUTOFMEMORY 当内存溢出时产生
NM
_SETFOCUS 当列表视图
控件
获得焦点时产生 LVN_BEGI
CListCtrl
控件
主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理[转]
VN_BE
GIN
DRAG 鼠标左键正在被触发以便进行拖放操作(当鼠标左键开始拖拽列表视图
控件
中的项目时产生) LVN_BE
GIN
RDRAG 鼠标右键正在被触发以便进行拖放操作(当鼠标右键开始拖拽列表视图
控件
中的项目时产生) LVN_BE
GIN
LABEL
EDIT
开始
编辑
项的文本 LVN_COLUMNCLICK 单击列(当鼠标单击列表视图
控件
列标题时产生)
NM
_CLICK 当鼠标单击列表视...
CTreeCtrl标签的
编辑
如果
树
形
控件
含有TVS_
EDIT
LABEL
S样式,用户就可以直接
编辑
这个
控件
的项标签。用户可以通过点击项标签开始进行
编辑
,而程序通过使用
Edit
Label
()成员函数开始进行
编辑
。当开始
编辑
、取消或完成时,
树
形
控件
就会发送一个通知消息。当
编辑
完成时,你需要响应更新项标签。 当标签
编辑
开始时,
树
形
控件
会发送一个TVN_BE
GIN
LABEL
EDIT
通知消息。通过处理这个消息,你可以允许一些...
界面
15,979
社区成员
115,897
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章