在CTreeView标签中复制粘贴

时间:2015-07-27 07:52:03

标签: c++ mfc treeview copy-paste

我在MFC SDI应用程序中有一个来自CTreeView的控件(基本上包含拆分器CTreeViewCDetailsView)。对我有用的是通过处理编辑结束

来编辑树视图节点中的标签
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中工作。

1 个答案:

答案 0 :(得分:1)

我想你已经在你的应用程序中定义了一个加速器,它也使用了Ctrl-V。因此,在inplace编辑控件内按Ctrl + V,但这会导致从加速器生成WM_COMMAND消息。加速器执行中止就地编辑作业的东西。

在这种情况下你需要一个PreTranslateMessage处理程序来检查键盘输入是否通过Ctrl + C / Ctrl + V到达,并将此输入定向到打开的编辑控件,而不是让框架窗口加速器来处理它。

只需设置断点并查看callstack并检查inplace编辑停止时执行的内容。