这个问题比较难 ?CTreeCtrl 控件的重命名问题?

lzn2 2006-11-28 06:59:22
CTreeCtrl 控件,在创建的时候已经设置了TVS_EDITLABELS属性,也映射了TVN_BEGINLABELEDIT TVN_ENDLABELEDIT消息。
可以重命名,但是必须是失去焦点后才能重命名有效,按回车不响应无效。如何才能使按回车就能重命名。就像资源管理器你的文件夹一样。
...全文
248 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hpp1981 2006-11-30
  • 打赏
  • 举报
回复
我给个简单的:
先想方设法得到Enter的消息,我这里也用CMyTreeCtrl::PreTranslateMessage。

switch(pMsg->message)
{
case WM_KEYDOWN:
if (pMsg->wParam == VK_RETURN)
{
this->SetFocus();
//SetFocus()可以触发TVN_ENDLABELEDIT消息

}
break;
}
dawnwinds 2006-11-29
  • 打赏
  • 举报
回复
如果你的类从CTreeCtrl继承的,例如CMyTreeCtrl,可以在BOOL CMyTreeCtrl::PreTranslateMessage(MSG* pMsg)方法里做如下处理。
switch(pMsg->message)
{
case WM_KEYDOWN:
if (pMsg->wParam == VK_RETURN)
{
CEdit *pEdit = this->GetEditControl();
if (NULL != pEdit)
{
pEdit->GetWindowTextA(str);
NMTVDISPINFO msg;
msg.hdr.hwndFrom = this->m_hWnd;
msg.hdr.idFrom = this->GetDlgCtrlID();
msg.hdr.code = TVN_ENDLABELEDIT;
msg.item.mask = TVIF_TEXT;
msg.item.pszText = str.GetBuffer(0);
msg.item.cchTextMax = str.GetLength();

if (this->GetParent())
{
this->GetParent()->SendMessage(WM_NOTIFY, (WPARAM)msg.hdr.idFrom, (LPARAM)&msg);
}
}
}
break;
}

15,975

社区成员

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

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