为什么 Ctrl + A 在 CEdit 中不起作用?
Why doesn't Ctrl + A work in CEdit?
我一直在 MFC 项目中工作,我发现 Ctrl + A
不适用于该项目中使用的任何 CEdit。
但是如果我在项目的 StdAfx.h 文件中添加以下行,突然它开始工作了。
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
现在我从这段代码片段中了解到,我们明确告诉链接器我们想要使用 ComCtl32.dll 版本 6.0。
这是否意味着,如果没有这一行,我的项目使用的 ComCtl32.dll 的早期版本没有 Ctrl + A
支持?
看起来 Ctrl-A
在那个版本中默认没有处理。如果你想要 Ctrl-A
支持,你需要从 CEdit 扩展并实现 PreTranslateMessage
See here.
void CEditExtended::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYUP )
{
if ( (LOWORD(pMsg->wParam) & VK_CONTROL) == VK_CONTROL )
{
SetSel(0, -1);
}
}
return CEdit::PreTranslateMessage(pMsg);
}
原因可能是您在主应用程序中定义了一个加速器。
并且这个加速器处理这个击键。
我一直在 MFC 项目中工作,我发现 Ctrl + A
不适用于该项目中使用的任何 CEdit。
但是如果我在项目的 StdAfx.h 文件中添加以下行,突然它开始工作了。
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
现在我从这段代码片段中了解到,我们明确告诉链接器我们想要使用 ComCtl32.dll 版本 6.0。
这是否意味着,如果没有这一行,我的项目使用的 ComCtl32.dll 的早期版本没有 Ctrl + A
支持?
看起来 Ctrl-A
在那个版本中默认没有处理。如果你想要 Ctrl-A
支持,你需要从 CEdit 扩展并实现 PreTranslateMessage
See here.
void CEditExtended::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYUP )
{
if ( (LOWORD(pMsg->wParam) & VK_CONTROL) == VK_CONTROL )
{
SetSel(0, -1);
}
}
return CEdit::PreTranslateMessage(pMsg);
}
原因可能是您在主应用程序中定义了一个加速器。
并且这个加速器处理这个击键。