清泛IT社区
标题:
OnInitDialog()中SetFocus()设置焦点不起作用解决方法
[打印本页]
作者:
zqp2013
时间:
2014-12-25 15:47
标题:
OnInitDialog()中SetFocus()设置焦点不起作用解决方法
BOOL Cxxx::OnInitDialog()
{
...
::SetFocus(m_wndEdit); // 不起作用,请参照如下VS自动生成的注释。
...
return TRUE;
// 除非将焦点设置到控件,否则返回 TRUE
}
当然,改为return FALSE;能解决问题,但是感觉不太优雅,使用SendMessage解决,如下:
::SetFocus(m_wndEdit); ->
::SendMessage(m_wndEdit, WM_SETFOCUS, 0, 0);
这时,你会发现,输入框确实获得了焦点,但是此时键盘无法输入内容,因此此方法不可行。
-----------------------------解决方法-----------------------------
使用自定义用户消息的方法,如下:
#define
WM_USER_SETFOCUS_MSG
(WM_USER+1)
BEGIN_MESSAGE_MAP(CMainDlg, CDialogEx)
...
ON_MESSAGE(
WM_USER_SETFOCUS_MSG
, OnUserSetFocus)
END_MESSAGE_MAP()
LRESULT CMainDlg::OnUserSetFocus(WPARAM wParam, LPARAM lParam)
{
::SetFocus(m_wndEdit);
return S_OK;
}
BOOL Cxxx::OnInitDialog()
{
...
PostMessage(WM_USER_SETFOCUS_MSG, 0, 0);
...
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
至此,完美解决。
欢迎光临 清泛IT社区 (https://bbs.tsingfun.com/)
Powered by Discuz! X3.3