我是想当创建了一个Dialog以后,Edit对话框立即相应ON_UPDATE_COMMAND_UI这个消息,这样就要先响应WM_KICKIDLE这个消息。
但是,我发现,当Dialog是OnModal出来的,WM_KICKIDLE这个消息就可以相应,当Dialog是Create出来的时候,WM_KICKIDLE这个消息没有办法响应,ON_UPDATE_COMMAND_UI这个消息自然也没有办法响应。
如何解决这个问题啊?
谢谢各位大虾了

解决方案 »

  1.   

    OnModal出来的Dialog是线程阻塞的,就是暂停当前线程执行直到Dialog关闭,这样子才会出现空闲IDLE,WM_KICKIDLE这个消息就可以响应;
    当Dialog是Create出来的时候,当前线程继续执行,WM_KICKIDLE这个消息自然就没法响应了。
      

  2.   

    请问楼上的大虾
    我也知道这个问题,当Dialog是Create出来的时候,当前线程继续执行,WM_KICKIDLE这个消息自然就没法响应了。
    但是,我好像看书上说其实,DoModal and Create其实好像都是非模态对话框的,只是DoModal是把父窗体是屏蔽了?还是什么的
    但是,我现在的问题是,我现在是Create出来的,我如何去解决这个问题。
    想要响应WM_KICKIDLE, ON_UPDATE_COMMMAND_UI这两个消息呢?
    谢谢啦
      

  3.   

    我具体想当Dialog生成的时候,我Edit对话框如果被控制要打上钩,它就已打上钩,
    ON_UPDATE_COMMAND_UI这个消息就是来控制对话框是否被打上钩的阿
    这样,我在界面上一些要生成的东西都自动能实现。
      

  4.   

    create以后窗口show或者domodal出来了没?没有的话怎么让窗口接收消息?
      

  5.   

    create以后当然要窗口show啦,问题的核心还是在消息循环上啊
    就像MeridaWarrior()说的,
    OnModal出来的Dialog是线程阻塞的,就是暂停当前线程执行直到Dialog关闭,这样子才会出现空闲IDLE,WM_KICKIDLE这个消息就可以响应;
    当Dialog是Create出来的时候,当前线程继续执行,WM_KICKIDLE这个消息自然就没法响应了
    但是,难道vc就没有办法能解决这个问题吗?
    create出来的Dialog就没有办法响应WM_KICKIDEL这个消息吗?
    我想VC肯定是有办法的吧
    只是我们现在还不知道吧
      

  6.   

    打勾,那不是checkbox吗?
    那你的edit干嘛用啊?是不是响应相应checkbox?然后传值?
    如果这样那直接判断checkbox状态就可以了.
      

  7.   

    那你手工发送一个消息不就是了:
    SendMessageToDescendants(WM_IDLEUPDATECMDUI,
    (WPARAM)TRUE, 0, TRUE, TRUE);
      

  8.   

    在app类中重载OnIdle虚函数
    然后m_Dlg.SendMessage(WM_KICKIDLE, MSGF_DIALOGBOX, lIdleCount++)
      

  9.   

    你好,我现在遇到了一个和你差不多的问题,请问你解决了吗?
    我用create方法(必须用create方法,不能DoModal)创建了一个dialog窗体,
    而且用ctrl+d也调好了,各个控件之间的Tab顺序,而且也设置了Tabstop属性为true
    可是为什么按tab键的时候不管用呢(不能切换且获得tab焦点)?
    而且窗体类重载的PreTranslateMessage(MSG* pMsg)函数也不管用。
    我不太清楚,用sky++截获消息,发现比domodal少了很多。。尤其是响应键盘的
    请问如何在create创建出来的窗体上,实现tab键可以切换控件呢?