求助:对话框下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 ...
随机推荐
- 设置U盘为第一启动顺序
本文转载:http://u.diannaodian.com/Article/1004.html 盘安装系统的首要步骤就是设置U盘为第一启动顺序.下面电脑店官网就来说说到底如何来设置U盘启动顺序吧. ...
- enum类型被intent所携带时需要注意的地方
一般我们在Activity之间传递对象时多用Parcelable.比如写一个class,在这个class上标明implements Parcelable并实现接口就可以用Intent.putExtra ...
- C. Tourist Problem
http://codeforces.com/problemset/problem/340/C 赛时没想出赛后却能较快想出深深的教育自己做题一定要静下心来,不要轻易放弃,认真思考,不要浮躁着急,不要太容 ...
- [Firebase + PWA] Keynote: Progressive Web Apps on Firebase
Link : Video. 1. Firebase Auth: provides simple login with Github, Google, Facebook, Twittr. Link 2. ...
- 常见的浏览器Hack技巧总结(转)
如果你经常需要做前端页面,那么你一定多多少少需要解决页面的浏览器兼容问题.而浏览器兼容问题大部分也集中在对IE系列的兼容.这里就总结一下对IE系列的CSS Hack,记录一下,方便以后查阅. IE H ...
- 提取DLL类库代码
@SET destFolder=.\bin@XCOPY /I /Y %SYSTEMDRIVE%\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.Pro ...
- iOS-你真的会用UIMenuController吗?(详细)
UIMenuController的介绍 什么是UIMenuController? UIMenuController是UIKit里面的控件 UIMenuController的作用在开发中弹出的菜单栏 后 ...
- document.documentElement.style判断浏览器是否支持Css3属性
1.document.documentElement.style 属性定义了当前浏览器支持的所有Css属性 包括带前缀的和不带前缀的 例如:animation,webkitAnimation,msAn ...
- vs2010 web 发布
1.在服务器上安装web deploy,这时iis中右侧功能中就多了“导入应用程序” 2.在代码的项目中,点击项目属性,将debug改为release,选择对应的平台.目标平台,主要用来区分32位还是 ...
- HibernateTool的安装和使用(Eclipse中)
http://blog.sina.com.cn/s/blog_919273e20101g1t7.html