原文地址:http://www.w3c.com.cn/%E6%B1%82%E5%8A%A9%EF%BC%9A%E5%AF%B9%E8%AF%9D%E6%A1%86%E4%B8%8Boninitdialog%E4%B8%AD%E4%BD%BF%E7%94%A8settimer%E6%97%A0%E6%95%88

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

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

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

学习了,以前这点真没注意,也很少用定时器

回复3楼 – great_kevin:引用 1 楼 rxguoblp 的回复:

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

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

回复4楼 – ljbsdu:引用 1 楼 rxguoblp 的回复:

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

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

回复5楼 – ljbsdu:引用 3 楼 great_kevin 的回复:

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

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

求助:对话框下OnInitDialog中使用SetTimer无效的更多相关文章

  1. Delphi TFindDialog TReplaceDialog对话框在Memo中的使用

    Delphi TFindDialog TReplaceDialog对话框的使用 下载地址1: http://download.csdn.net/detail/teststudio/6408383   ...

  2. 记录下项目中常用到的JavaScript/JQuery代码一(大量实例)

    一直没有系统学习Javascript和Jquery,每次都是用到的时候去搜索引擎查,感觉效率挺低的.这边把我项目中用的的记录下,想到哪写哪,有时间再仔细整理. 当然,由于我主要是写后端java开发,而 ...

  3. dos2unix,去掉Linux下文件中的^M

    Windows系统下使用VS2010编写好的CPP文件,想放到Linux上进行编译.发现Linux上文件中的每行代码末尾都跟着^M这个符号. 为什么同一份文件在windows上和Linux上显示的不一 ...

  4. js中style.display=""无效的解决方法

    本文实例讲述了js中style.display=""无效的解决方法.分享给大家供大家参考.具体解决方法如下: 一.问题描述: 在js中我们有时想动态的控制一个div显示或隐藏或更多 ...

  5. 选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

    选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中 T-SQL核心语句形式: SELECT     --指定要选择的列或行及其限定  [INTO ]      --INTO子句 ...

  6. JS 获取select(多选下拉)中所选值的示例代码

    通过js获取select(多选下拉)中所选值,具体实现如下,有需要的朋友可以参考下,希望对大家有所帮助 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML ...

  7. 解决Ubuntu下sublime中不能输入中文的问题

    解决Ubuntu下sublime中不能输入中文的问题 Ubuntu下安装sublime后,不能输入中文,而在其他软件中能正常输入,这是sublime的bug,解决方案是在通过shell在每次运行sub ...

  8. Android下EditText中的字体不统一问题

    Android下EditText中的字体不统一问题 好久没写,今天心情好略记下解决的某bug 在一个登录界面有帐号和密码两个EditText,但是却发现两个EditText的hint的英文字体不同,看 ...

  9. DEBUG模式下, 内存中的变量地址分析

    测试函数的模板实现 /// @file my_template.h /// @brief 测试数据类型用的模板实现 #ifndef MY_TEMPLATE_H_2016_0123_1226 #defi ...

随机推荐

  1. 【Android - 进阶】之图片三级缓存的原理及实现

    在Android开发中,如果图片过多,而我们又没有对图片进行有效的缓存,就很容易导致OOM(Out Of Memory)错误.因此,图片的缓存是非常重要的,尤其是对图片非常多的应用.现在很多框架都做了 ...

  2. 解决方法:未能加载文件或程序集“Microsoft.Office.Interop.Excel。。

    .NET错误提示:未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToke ...

  3. centos 正确 安装 jdk

    1>先找下centos下java默认安装的情况 whereis java which java (java运行路径) echo $JAVA_HOME echo $PATH 2> 查看并卸载 ...

  4. Google Android开发入门与实战

    http://www.pc6.com/softview/SoftView_58350.html

  5. mysql 参数:[read_buffer_size] [sort_buffer_size] [read_rnd_buffer_size] [tmp_table_size]---图解

    http://imysql.cn/2008_09_27_deep_into_mysql_sort_buffer http://my.oschina.net/realfighter/blog/36442 ...

  6. windows10UWP:如何判断一个文件或者文件夹是否存在?

    使用 StorageFolder.TryGetItemAsync 方法,尝试按名称获取文件或文件夹,不需将错误捕捉逻辑添加到代码(就像使用 StorageFolder.GetItemAsync 一样) ...

  7. js多行字符串

    最基本的做法是: js 代码 var str = "111\n222\n333"; 但是这样不好排版.JavaScript 本身支持“\”的断句方式,于是可以这样写: js 代码 ...

  8. asp.net 的状态管理

    状态管理 (state management) 在Web应用程序中,一向是很重要的课题,良好的状态管理可以帮助开发人员发展出具有状态持续能力的应用程序(像是工作流程型应用程序或是电子商务应用程序),但 ...

  9. HTML - 键盘事件

    Keyboard 事件 onkeydown: 在用户按下按键时触发. onkeypress: 在用户敲击按钮时触发. onkeyup: 当用户释放按键时触发. 示例 <!DOCTYPE html ...

  10. maven常见命令总结

    1.maven vm配置 -Xms512m -Xmx1024m -XX:PermSize=256m 2.启动tomcat  clean package -Dpackage.environment=de ...