c++ - 在 CTreeView 标签中复制粘贴

标签 c++ mfc treeview copy-paste

我在 MFC SDI 应用程序中有一个从 CTreeView 派生的控件(主要包含拆分器、CTreeViewCDetailsView)。对我有用的是通过处理编辑结束来编辑 TreeView 节点中的标签

ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, &CNavigationView::OnTvnEndlabeledit)

我想使用 Ctrl+CCtrl+V 添加复制/粘贴功能。我认为这涉及 TVN_BEGINLABELEDITTVN_KEYDOWN 但我无法弄清楚如何使它正常工作,可能是一些想法或示例?

void CNavigationView::OnTvnEndlabeledit(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
    if (pTVDispInfo && pTVDispInfo->item.pszText)
    {
    }
}

当我尝试从记事本粘贴文本时,根据调试器,pTVDispInfo->item.pszTextNULL

我在 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/

相关文章:

c++ - 为什么 Doxygen 文档只出现在多个相邻组的最后一个?

vs2017中MFC开发

c++ - 使用属性页数组 MFC C++ 创建无模式属性表

c# - WPF 如何将自引用数据集绑定(bind)到 TreeView

qt - 如何使用 QML Qt 5.5 正确显示 Treeview

c++ - HashTable 实现 Get 和 Set 运算符重载

c++ - SendMessage() WINAPI 在用于连接到 DDE 服务器时挂起

c++ - Qt QLCDNumber 定时器

visual-c++ - CMenu 和基于对话框的应用程序

javascript - 如何在包含展开和折叠的html页面中创建 TreeView