zoukankan      html  css  js  c++  java
  • 如何激活一个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)
  • 相关阅读:
    LaTeX技巧22:LaTeX文档中的参考文献初级
    latex 三个不同的图放在一行且每个图都有注释
    CTeX学习心得总结
    latex不能识别eps图片
    山东大学《运筹学》课程课件
    高级算法设计讲义 Lecture Notes for Advanced Algorithm Design
    《计算复杂性》课件
    全球知名大学课件下载地址汇总
    用LaTeX写线性规划
    有感北大校长王恩哥的十句话
  • 原文地址:https://www.cnblogs.com/qrlozte/p/4740479.html
Copyright © 2011-2022 走看看