如题,如何在"重命名"函数中做到像资源管理器中那样的重命名操作.
解决方案 »
- 请问如何实现单文档上的文本字体随窗口的伸缩而变化
- 如何在Win32程序中使用GDI+
- 一个关于窗体控制的问题,请大家进来帮帮忙!!!
- 请问磁盘管理中的”更改驱动器名和路径“功能是如何实现的???
- SQL语句执行有问题。(VC++和SQL server)
- 我想用VC做一个类似课件的程序,不知如何动手?各位提点意见。
- 请问 怎么从mdb里 用程序获得 表的名称?
- 一个十分怪的问题!请大家帮忙分析一下?在线等待,欢迎大家进来讨论!
- 请问如何获得窗口句柄
- IOCP模式中,在socket上同时投递WSARecv和WSASend的问题?
- 请问如何在使用treectrl时,对树中的项目点击右键时,显示右键菜单
- 简单问题!帮我一下!
2、响应OnBeginlabeledit()函数,该函数在命名前调用,在里面记录当前选中的Item和名字;
3、响应OnEndlabeledit()函数,该函数在命名结束时调用,判断新名字是否符合标准,如果不符合标准,就返回到第一步,继续命名,如果符合,则将选中的Item的名字设置为新名字至于怎么结束命名,一般有两种方法:响应回车键和响应鼠标在该Item外的地方单击,前者系统会自己处理,后者需要自己处理
至于怎么结束命名,一般有两种方法:响应回车键和响应鼠标在该Item外的地方单击,前者系统会自己处理,后者需要自己处理
我发现如果不用重命名这个函数,系统倒是会处理回车;现在的情况正好与你上面所说的相反,前者系统不处理,后者系统处理了?
该在何处处理这个回车? PreTranslateMessage, OnKeyDown, OnEndLabelEdit?
1、用树控件的GetEditControl()函数获取重命名的编辑框,如果返回值不为NULL,则表示正在命名;
2、判断是否按下了回车键,如果是,就用SetFocus()函数将焦点设置到树控件上,这和左键单击的作用是一样的,所以可以结束命名,它会自动调用那个OnEndlabeledit()函数
{
CEdit *pEdit = m_treeCtrl.GetEditControl();
if (pEdit != NULL)
{
if (pMsg->lParam == 0x000D) // 这样判断回车怎么没反应?
m_treeCtrl.SetFocus();
}
m_TipCtrl.RelayEvent(pMsg);
return CWnd::PreTranslateMessage(pMsg);
}
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;
}
}
}
//...
搞定