还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

OnInitDialog()中SetFocus()设置焦点不起作用解决方法

来源:清泛原创     2016-06-07 13:07:40    人气:     我有话说( 0 人参与)

BOOL Cxxx::OnInitDialog(){ ... ::SetFocus(m_wndEdit); 不起作用,请参照如下VS自动生成的注释。 ... return TRUE; ...

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
}

至此,完美解决。

SetFocus 焦点

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: