如题,常规做法是在消息入口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);
}
VC控件焦点获取时自动全选实现

本文介绍了一种解决VC中CEdit控件在接受焦点时自动全选问题的方法。通过重写PreTranslateMessage函数,当检测到WM_LBUTTONDOWN消息时,先设置编辑框全选状态,然后设置焦点,避免了Windows默认行为的影响。
最低0.47元/天 解锁文章
1812

被折叠的 条评论
为什么被折叠?



