我在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中工作。
答案 0 :(得分:1)
我想你已经在你的应用程序中定义了一个加速器,它也使用了Ctrl-V。因此,在inplace编辑控件内按Ctrl + V,但这会导致从加速器生成WM_COMMAND消息。加速器执行中止就地编辑作业的东西。
在这种情况下你需要一个PreTranslateMessage处理程序来检查键盘输入是否通过Ctrl + C / Ctrl + V到达,并将此输入定向到打开的编辑控件,而不是让框架窗口加速器来处理它。
只需设置断点并查看callstack并检查inplace编辑停止时执行的内容。