【发布时间】:2015-07-27 07:52:03
【问题描述】:
我在 MFC SDI 应用程序中有一个源自 CTreeView 的控件(基本上包含分离器、CTreeView 和 CDetailsView)。对我有用的是通过处理编辑结束来编辑树视图节点中的标签
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-p 并专注于您的控件时,一次添加多个项目?如果它只是通过复制/粘贴处理编辑项目,则无需任何特殊代码即可工作(即,当有人开始编辑项目并按 ctrl-v 时,剪贴板的内容将被粘贴到编辑控件中显示何时开始编辑)。
-
@Roel 不,我的意思是例如从记事本复制字符串并将其粘贴到正在树视图中编辑的标签中。然后向后,复制树视图项目中标签的内容并粘贴到记事本(任何其他应用程序)
-
那么我不确定问题出在哪里 - 处理复制/粘贴与处理其他编辑相同。在其最基本的形式中,您执行 tree.SetItemText(pTVDispInfo->item.hItem, pTVDispInfo->item.pszText);从 TVN_ENDLABELEDIT 中。复制/粘贴没什么特别的 - 这是由编辑控件处理的。
-
问题是当我从另一个应用程序粘贴文本时 pTVDispInfo->item.pszText 为 NULL
-
粘贴时标签上的文字有变化吗?因为 item.pszText 的内容是你在“结束编辑”之前看到的。您是否尝试过从记事本粘贴?也许其他应用程序没有将 CF_TEXT 格式的内容放入剪贴板。只是在这里推测,我尝试了一个新的测试应用程序,只有一个树控件(Win8.1,VS2013)并且它适用于我(TM)。
标签: c++ mfc treeview copy-paste