将一个CTreeCtrl上的节点进行编辑,我发现只有在节点离开焦点或者输入回车,此节点才结束编辑状态。现在我想自己用代码来结束它的编辑状态,比如输入一个字符"Q",就结束编辑。怎么实现呢?难道发一个WM_NOTIFY (TVN_ENDLABELEDIT)来通知自己?
解决方案 »
- activemovie控件做的播放器在选择文件后出现Debug Assertion Failed!!
- 这个是使用类成员变量好呢还是使用类方法中的局部变量好?
- parallel port.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。
- 固定窗体尺寸
- 使用InstallShield8.0如何改变对话框中的图像, 接分大家一起来
- 求教ActiveX编程书籍
- 请问五天内有没有一般性的可能用NETMEETING的SDK做好语音和视频通讯?
- 在xp上用MFC怎么模拟管理员权限运行程序
- 高手们~能否告诉小弟VC入门应该买什么书????迫切需要~~~~~
- 常量指针
- List Control的困惑
- MFC下用户界面线程和工作者线程的区别?
//直接在结束编辑后设置文本为刚输入文本
void CTreeCtrl::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult)
{
TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
if (pTVDispInfo->item.pszText)
{
pTVDispInfo->item.mask=TVIF_TEXT;
SetItem(&pTVDispInfo->item);
}
*pResult = 0;
}
//截取消息 这里可以自己定义想要以什么方式结束
BOOL CTreeCtrl::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN)
{
if(GetEditControl()
&& (pMsg->wParam==VK_RETURN || pMsg->wParam==VK_DELETE
|| pMsg->wParam==VK_ESCAPE || GetKeyState(VK_CONTROL)))
{
::TranslateMessage(pMsg);
::DispatchMessage(pMsg);
return TRUE;
} } else if(WM_LBUTTONDOWN == pMsg->message) {
if(MK_CONTROL & pMsg->wParam)
{
CPoint point(LOWORD(pMsg->lParam),HIWORD(pMsg->lParam));
TVHITTESTINFO info;
info.flags=0;
info.pt=point;
HitTest(&info);
SelectItem(info.hItem);
}
}
return CTreeCtrl::PreTranslateMessage(pMsg);
}
这个方法很标准,其实有个函数啊,好像就叫 EndEdit吧?好久不弄了,都记不清了。