环境VC2008,在文档视图结构中的菜单上加了菜单用于弹出一个派生自CDialog的对话框,响应加到了frame窗口中。
    在OnInitDialog中使用SetTimer设置定时器,采用默认响应函数OnTimer。
问题:
1、在菜单的响应函数中使用对话框的DoModal弹出,定时器没有响应,SetTimer的返回值正常,在对话框的PreTranslateMessage函数中发现根本就收不到WM_TIMER消息。
2、将对话框使用Create,ShowWindow的形式创建非模态对话框就可以收到WM_TIMER消息,能够进入到OnTimer中。
百思不得其解!哪位给解释一下,找一下原因??多谢,多谢~~

解决方案 »

  1.   

    当使用DoModal形式创建模态对话框的时候,你所弹出的对话框和主程序处于同一个线程内,并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,在此期间无法响应其它操作,直到模态对话框销毁。
    而用非模态对话框的话,实际上等于开辟了一个新的子线程,你的主程序(就是那个frme)和对话框各跑各的,自然可以响应定时器事件。
      

  2.   

    并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,??
    OnInitDialog时,还没弹出对话框吧?
      

  3.   

    不是你说的那样,我是在对话框中设置的定时器,不是在主程序里,在对话框中加的响应函数OnTimer
      

  4.   

    上面的那位说的不太对,模态对话框和非模块对话框都是创建的新线程,因为CDialog是从CThread继承的,都是开辟的UI线程。弹出模态对话框之后,主程序就不响应了那倒是真的。
      

  5.   

    安装了SP1的补丁之后莫名其妙的就可以响应了,也不知道到底是什么原因,系统是WIN7 x64的