清泛IT社区

搜索
App Inventor 2 中文社区 轻松创建Apps

扫码访问移动社区 移动社区,您的掌上技术专家

关注我,精彩不错过! 关注我,精彩不错过!

扫码安装最新版AI伴侣 最新版AI伴侣v2.69

Aia Store .aia 源码一站式解决方案 发布日志AI2连接测试ai2Starter模拟器

开通VIP送小红花App Inventor 2 拓展有奖征文 VIP会员享专有教程,免费赠送基础版*技术支持服务! AI2入门必读中文文档中文教程IoT专题

查看: 842|回复: 0
打印 上一主题 下一主题

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

  • TA的每日心情
    开心
    2024-03-14 20:36
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    70

    主题

    117

    帖子

    1365

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1365
    跳转到指定楼层
    楼主
    发表于 2014-12-25 15:47:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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
    }

    至此,完美解决。

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    © 2024 tsingfun.com, Inc.  沪ICP备2020034476号-1  沪公网安备31011702000040号

    GMT+8, 2024-05-19 19:24 , Processed in 0.016389 second(s), 28 queries .