• 如何激活一个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)
  • 相关阅读:
    妈妈之歌 The Mom Song 中文字幕
    40个实用的轻量级JavaScript库
    2009超强流行词汇
    60+CSS技巧教程资源大全
    关于zindex的那些事儿
    FF和IE之间7个JavaScript的差异
    IE6 不支持PNG问题
    邮件营销EDM模板制作规范
    css层的定位position、absolute、relative层叠加的五条叠加法则
    IE8的CSS hack
  • 原文地址:https://www.cnblogs.com/qrlozte/p/4740479.html
Copyright © 2020-2023  润新知