如题,常规做法是在消息入口OnEnSetfocusEdit2()中直接设置(SetSel(0, -1);SetFocus();),
但经过反复试验,此方法不可行,
分析原因可能是windows会自动将输入光标设置在鼠标点击的位置,而不是全选的状态,
所以我这里采用了满天过海之计,即截获此消息,在消息处理前就做好设置,然后直接返回,代码如下:
BOOL CEditSelAllDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (WM_LBUTTONDOWN == pMsg->message)
{
// 接受焦点前,直接将此控件设置为全选(高亮)状态即可,不再继续处理直接返回
CRect rect;
((CEdit *)GetDlgItem(IDC_EDIT2))->GetWindowRect(&rect);
if (rect.PtInRect(pMsg->pt))
{
((CEdit *)GetDlgItem(IDC_EDIT2))->SetSel(0, -1);
((CEdit *)GetDlgItem(IDC_EDIT2))->SetFocus();
return TRUE;
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}