Ctrl+不是像+和+A这样的内置加速器。这就是您看到定义了 WM_CUT、WM_PASTE 和 WM_COPY 消息但没有 WM_SELECTALL 的原因。CtrlCCtrlV
您必须自己实现此功能。我在我的 MFC 应用程序中是这样的:
static BOOL IsEdit( CWnd *pWnd )
{
if ( ! pWnd ) return FALSE ;
HWND hWnd = pWnd->GetSafeHwnd();
if (hWnd == NULL)
return FALSE;
TCHAR szClassName[6];
return ::GetClassName(hWnd, szClassName, 6) &&
_tcsicmp(szClassName, _T("Edit")) == 0;
}
BOOL LogWindowDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN)
{
if ( pMsg->wParam=='A' && GetKeyState(VK_CONTROL)<0 )
{
// User pressed Ctrl-A. Let's select-all
CWnd * wnd = GetFocus() ;
if ( wnd && IsEdit(wnd) )
((CEdit *)wnd)->SetSel(0,-1) ;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
注意,我从这个页面偷了 IsEdit:http: //support.microsoft.com/kb/145616
我指出这一点,部分原因是我想表扬,部分原因是我认为 IsEdit 函数(比较类名字符串)很笨拙,我想指责。