求助:对话框下OnInitDialog中使用SetTimer无效
环境VC2008,在文档视图结构中的菜单上加了菜单用于弹出一个派生自CDialog的对话框,响应加到了frame窗口中。 在OnInitDialog中使用SetTimer设置定时器,采用默认响应函数OnTimer。 问题: 1、在菜单的响应函数中使用对话框的DoModal弹出,定时器没有响应,SetTimer的返回值正常,在对话框的PreTranslateMessage函数中发现根本就收不到WM_TIMER消息。 2、将对话框使用Create,ShowWindow的形式创建非模态对话框就可以收到WM_TIMER消息,能够进入到OnTimer中。 百思不得其解!哪位给解释一下,找一下原因??多谢,多谢~~
6个回复
当使用DoModal形式创建模态对话框的时候,你所弹出的对话框和主程序处于同一个线程内,并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,在此期间无法响应其它操作,直到模态对话框销毁。 而用非模态对话框的话,实际上等于开辟了一个新的子线程,你的主程序(就是那个frme)和对话框各跑各的,自然可以响应定时器事件。
学习了,以前这点真没注意,也很少用定时器
当使用DoModal形式创建模态对话框的时候,你所弹出的对话框和主程序处于同一个线程内,并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,在此期间无法响应其它操作,直到模态对话框销毁。 而用非模态对话框的话,实际上等于开辟了一个新的子线程,你的主程序(就是那个frme)和对话框各跑各的,自然可以响应定时器事件。
并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,?? OnInitDialog时,还没弹出对话框吧?
当使用DoModal形式创建模态对话框的时候,你所弹出的对话框和主程序处于同一个线程内,并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,在此期间无法响应其它操作,直到模态对话框销毁。 而用非模态对话框的话,实际上等于开辟了一个新的子线程,你的主程序(就是那个frme)和对话框各跑各的,自然可以响应定时器事件。
不是你说的那样,我是在对话框中设置的定时器,不是在主程序里,在对话框中加的响应函数OnTimer
引用 1 楼 rxguoblp 的回复: 当使用DoModal形式创建模态对话框的时候,你所弹出的对话框和主程序处于同一个线程内,并且一旦弹出模态对话框,线程就处于堵塞(停顿)状态,在此期间无法响应其它操作,直到模态对话框销毁。 而用非模态对话框的话,实际上等于开辟了一个新的子线程,你的主程序(就是那个frme)和对话框各跑各的,自然可以响应定时器事件。 并且一旦弹出模态对话框,线程就处于堵……
上面的那位说的不太对,模态对话框和非模块对话框都是创建的新线程,因为CDialog是从CThread继承的,都是开辟的UI线程。弹出模态对话框之后,主程序就不响应了那倒是真的。
求助:对话框下OnInitDialog中使用SetTimer无效的更多相关文章
- Delphi TFindDialog TReplaceDialog对话框在Memo中的使用
Delphi TFindDialog TReplaceDialog对话框的使用 下载地址1: http://download.csdn.net/detail/teststudio/6408383 ...
- 记录下项目中常用到的JavaScript/JQuery代码一(大量实例)
一直没有系统学习Javascript和Jquery,每次都是用到的时候去搜索引擎查,感觉效率挺低的.这边把我项目中用的的记录下,想到哪写哪,有时间再仔细整理. 当然,由于我主要是写后端java开发,而 ...
- dos2unix,去掉Linux下文件中的^M
Windows系统下使用VS2010编写好的CPP文件,想放到Linux上进行编译.发现Linux上文件中的每行代码末尾都跟着^M这个符号. 为什么同一份文件在windows上和Linux上显示的不一 ...
- js中style.display=""无效的解决方法
本文实例讲述了js中style.display=""无效的解决方法.分享给大家供大家参考.具体解决方法如下: 一.问题描述: 在js中我们有时想动态的控制一个div显示或隐藏或更多 ...
- 选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中 T-SQL核心语句形式: SELECT --指定要选择的列或行及其限定 [INTO ] --INTO子句 ...
- JS 获取select(多选下拉)中所选值的示例代码
通过js获取select(多选下拉)中所选值,具体实现如下,有需要的朋友可以参考下,希望对大家有所帮助 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML ...
- 解决Ubuntu下sublime中不能输入中文的问题
解决Ubuntu下sublime中不能输入中文的问题 Ubuntu下安装sublime后,不能输入中文,而在其他软件中能正常输入,这是sublime的bug,解决方案是在通过shell在每次运行sub ...
- Android下EditText中的字体不统一问题
Android下EditText中的字体不统一问题 好久没写,今天心情好略记下解决的某bug 在一个登录界面有帐号和密码两个EditText,但是却发现两个EditText的hint的英文字体不同,看 ...
- DEBUG模式下, 内存中的变量地址分析
测试函数的模板实现 /// @file my_template.h /// @brief 测试数据类型用的模板实现 #ifndef MY_TEMPLATE_H_2016_0123_1226 #defi ...
随机推荐
- TOJ1693(Silver Cow Party)
Silver Cow Party Time Limit(Common/Java):2000MS/20000MS Memory Limit:65536KByte Total Submit: ...
- Qt 学习之路:模型-视图高级技术
PathView PathView是 QtQuick 中最强大的视图,同时也是最复杂的.PathView允许创建一种更灵活的视图.在这种视图中,数据项并不是方方正正,而是可以沿着任意路径布局.沿着同一 ...
- Java语言基础(三)
Java语言基础(三) 一. 补码 (1).之所以有补码是因为要考虑成本 就是造计算机的成本 (2).下面让我们分析一下补码 以四位补码为例 <1> 高位是符号位,它决定其是正数还是 ...
- 使用navicat 11 出现不能返回存储过程结果的问题
问题: 使用navicat 11 调试存储过程,select返回结果,总是不能返回. 原因: 经google发现,navicat仅支持返回10个resultset,超过则不现实. 解决方法: 减少存储 ...
- 基于HTML5的SLG游戏开发( 二):创建HTML5页面
HTML5游戏的开发过程中是在浏览器上进行运行调试的,所以首先我们需要建立一个html页面. 其中,我们把所有的canvas都放到一个viewporter(视图)里面,因此,在body中放置了一个id ...
- 使用 Xcode 和 Android Studio 管理 iOS 和 Android 项目版本
在移动应用开发和运营的过程中,版本管理是一个老生常谈的基础问题,一些版本的基本概念也常常会困扰我们的研发和运营人员.同时,手动管理软件版本,也常常会因为不小心导致后续的发布和更新问题. 这里,我准备了 ...
- c读mysql产生乱码问题
在编写接口API时,发现中文字utf8输入的在linux下采用c读取显示为”??”问号,这是由于编码造成的. 很简单的两个地方做修改就搞定. 1.先找到mysql的my.cnf配置文件/etc/my. ...
- HTML5 WebAudioAPI简介(一)
一.常用对象 1.AudioContext对象 AudioContext是一个专门用于音频处理的接口,并且原理是讲AudioContext创建出来的各种节点(AudioNode)相互连接,音频数据流经 ...
- VS2010在WIN7 64位系统下架设网站及路由器配置
步骤一:安装IIS 打开[控制面板]-[程序和功能],在左侧进入[打开或关闭windows功能],按照下图选择Internet信息项目下的子选项并安装: 步骤二:配置应用程序池 打开[控制面板]-[管 ...
- 完全卸载oracle
今天在网上看到有位网友写的篇日志,感觉蛮好的,一般卸载oracle有4个地方需求注意:1)Services,2)software,3eventlog,4)path. 1.关闭 oracle 所有的服务 ...