编辑框可写入或显示大量文本信息,编辑框默认不支持全选功能,但支持Ctrl+C、Ctrl+V、Ctrl+X,因此为了快速实现复制、粘贴功能,或者实现一些自定义的快捷键,需要截获键盘消息,通过重载virtual BOOL PreTranslateMessage(MSG* pMsg)处理鼠标和键盘消息。
SendDlgItemMessage(int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam)该函数需要传入控件ID,在前面通过获取鼠标焦点,可以避免直接填写控件ID。
SHORT WINAPI GetKeyState( int nVirtKey);通过获取不同的key状态可以自定义试下多键组合
BOOL CMFCApplication1Dlg::PreTranslateMessage(MSG * pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
BOOL b = GetKeyState(VK_CONTROL) & 0x80;
CWnd *pActiveWnd = GetFocus();
DWORD nWndID = 0;
if (pActiveWnd)
{
nWndID = pActiveWnd->GetDlgCtrlID();//获取光标所在的框
}
if (b && (pMsg->wParam == 'a' || pMsg->wParam == 'A'))
{
SendDlgItemMessage(nWndID, EM_SETSEL, 0, -1);
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}