• 如何激活一个window/dialog && 不能直接对Dialog Box使用SetFocus


    问题,症状:

    程序的主窗口CMainWnd创建了一个modal dialog,希望这个dialog能接收WM_KEYDOWN消息,但是需要点一下这个dialog窗口它才能接收到(我嫌麻烦),而且我发现,如果我保持CMainWnd处于激活状态,就没有这个问题。

    所以就希望这个dialog一创建默认就能接收到WM_KEYDOWN,当然首先想到的是SetFocus,然后就看到了下面提到的没卵用(至少是对我这个问题)的那篇blog,无论是对dialog进行setfocus或者CMainWnd进行setfocus都没有用,也尝试了该blog提到的WM_NEXTDLGCTL,还是没用。

    然后又搜到了几个解决办法,什么GotoDlgCtrl啊,PreTranslateMessage啊,统统无法解决这个问题,下面是我搜索过的资料:

    http://computer-programming-forum.com/81-vc/73468bccb8affc17.htm

    http://computer-programming-forum.com/82-mfc/ee69e2c176cdaf2c.htm

    http://computer-programming-forum.com/82-mfc/f99bbc4314038236.htm

    http://blog.163.com/lh_bbs/blog/static/1430708032011093159371/

    搞得我实在没办法了,我就想到是不是应该有个ActivateWnd之类的,果然找到一个ActivateTopParent(如图,来自CWnd,奇怪的是这货居然在MSDN中搜不到文档!),然后我在OnInitDialog中的倒数第二句(也就是return之前)写上

    this->ActivateTopParent()

    问题解决!

    后来我在OnInitDialog中试了试this->SetActiveWindow(),也没用,去调用CMainWnd的SetActiveWindow还是没有用

    ---------------------------没卵用---------------------------

    原文:http://blogs.msdn.com/b/oldnewthing/archive/2004/08/02/205624.aspx

    很棒的原创,我是说为什么在对dialog box使用SetFocus不管用呢

    简单的说,解决办法就是

    SendMessage(hdlg, WM_NEXTDLGCTL, (WPARAM)hwndControl, TRUE);

     如果是MFC,就在dialog的member中调用

    this->SendMessage(WM_NEXTDLGCTL, (WPARAM)this->GetSafeHwnd(), TRUE)

    或者

    this->GotoDlgCtrl(this)
  • 相关阅读:
    [Unity]关于Physic Material,物理碰撞
    [Unity]当多个立方体堆叠,堆叠处出现缝隙的处理方法
    反射基础
    数据库三种事务
    一、手写ORM实现数据库查询
    UDP协议
    Wireshark抓包理解APR协议
    DBeaver用户界面窗口失效 查询窗口不显示
    二、IP、路由协议
    解决图片存入时 A generic error occurred in GDI+ 报错
  • 原文地址:https://www.cnblogs.com/qrlozte/p/4740479.html
Copyright © 2020-2023  润新知