我在 MFC SDI 应用程序中有一个从 CTreeView
派生的控件(主要包含拆分器、CTreeView
和 CDetailsView
)。对我有用的是通过处理编辑结束来编辑 TreeView 节点中的标签
ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, &CNavigationView::OnTvnEndlabeledit)
我想使用 Ctrl+C
和 Ctrl+V
添加复制/粘贴功能。我认为这涉及 TVN_BEGINLABELEDIT
和 TVN_KEYDOWN
但我无法弄清楚如何使它正常工作,可能是一些想法或示例?
void CNavigationView::OnTvnEndlabeledit(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
if (pTVDispInfo && pTVDispInfo->item.pszText)
{
}
}
当我尝试从记事本粘贴文本时,根据调试器,pTVDispInfo->item.pszText
为 NULL
。
我在 Visual Studio 2013、Windows 8 中工作。
最佳答案
我想您已经在您的应用程序中定义了一个也使用 Ctrl-V 的加速器。因此,在就地编辑控件中,您按 Ctrl+V 但这会导致从加速器生成 WM_COMMAND 消息。加速器执行一些中止就地编辑作业的操作。
在这种情况下,您需要一个 PreTranslateMessage 处理程序来检查键盘输入是否通过 Ctrl+C/Ctrl+V 到达,并将此输入定向到打开的编辑控件,而不是让框架窗口加速器处理它。
只需设置一个断点并查看调用堆栈并检查就地编辑停止时执行的内容。
关于c++ - 在 CTreeView 标签中复制粘贴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31647660/