[VC]CEidt 控件接受焦点时,自动设置为全选(高亮)状态
2010-09-15 09:42
369 查看
如题,常规做法是在消息入口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);
}
但经过反复试验,此方法不可行,
分析原因可能是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下利用Picture控件实现png图片按钮(鼠标初始、按下、松开、获得焦点四种状态)
- VC下利用Picture控件实现png图片按钮(鼠标初始、按下、松开、获得焦点四种状态)
- Edit控件换行、自动滚屏、设置焦点技巧
- VC下利用Picture控件实现png图片按钮(鼠标初始、按下、松开、获得焦点四种状态)
- EditText控件设置只读,动态控制EditText状态 输入框不自动打开输入法
- Edit控件换行、自动滚屏、设置焦点技巧
- VC下利用Picture控件实现png图片按钮(鼠标初始、按下、松开、获得焦点四种状态)
- VC++获取控件焦点和设置焦点
- VC下利用Picture控件实现png图片按钮(鼠标初始、按下、松开、获得焦点四种状态)
- 设置页面的默认焦点控件和默认接受事件控件How Do I Set the DefaultFocus or DefaultButton in a Page Based on a Master Page in ASP.NET 2.0
- 设置输入法弹出时,处于焦点状态的控件所在界面保持原样
- 设置页面的默认焦点控件和默认接受事件控件
- 如何设置VC Edit控件的编辑框滚动条自动往下滚
- VC++ 如何在显示对话框的时候,指定焦点控件!
- 设置vim语法高亮显示和自动缩进
- [BuildRelease]Mozilla Build Tools(自动设置VC环境)
- Dxexpress 的GridControl控件中一次选择一行并且不显示单元格焦点的设置 (转自C#之旅)
- 解决listview的item中有Button、ImageButton等自动获取焦点的控件时,item获取不到焦点问题
- ubuntu设置vim语法高亮显示和自动缩进 zz
- [C#]Winform下回车或Tab键自动切换下一个控件焦点