非模态对话框中操作影响定时器

weixin_40994171 2017-11-08 08:52:50
MFC基于对话框的应用程序,在主对话框声明用SetTimer一个定时器,在定时器响应函数中绘图。在主对话框上添加一个按钮,点击按钮,弹出一个非模态对话框,非模态对话上有下拉列表控件。
以上为程序基本功能,程序编译通过,开始运行,一切OK.。点击按钮,弹出非模态对话框。此时也一切OK,拖动非模态对话框或者点击下拉列表控件,主对话框里定时器中绘图工作就停止了,时间一长,程序直接卡死了都。
为解决这个问题,我把定时器去掉,在主程序中开一个线程来进行绘图,成功解决这个问题。
但是,实际应用中必须用定时器(SetTimer)来进行绘图,所以只能在非模态对话框上想办法了,实在是没招了,跪求论坛大牛指导。
...全文
632 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2018-03-01
  • 打赏
  • 举报
回复
30 ms 定时器 太 短了, 改 3 秒 试试
www_boyunyun_com 2018-03-01
  • 打赏
  • 举报
回复
你是窗口本覆盖了吧,被覆盖了的窗口在没有修改前是没有重绘操作的,为了节省资源
叶恭介叶恭介 2017-11-22
  • 打赏
  • 举报
回复
联系我,看看怎么解决。 主对话框的定时器,跟非模态对话框有什么关系!!!!
weixin_40994171 2017-11-20
  • 打赏
  • 举报
回复
绘图代码放在OnPaint里 定时器中调用重绘
向立天 2017-11-18
  • 打赏
  • 举报
回复
引用 9 楼 weixin_40994171 的回复:
放OnPaint里试了 依然不行
你怎么试的?
weixin_40994171 2017-11-13
  • 打赏
  • 举报
回复
放OnPaint里试了 依然不行
mk_lucifer 2017-11-13
  • 打赏
  • 举报
回复
引用 3 楼 xianglitian 的回复:
绘图操作应该全部写在OnPaint函数里 定时器只是修改参数调用Invalid来激活重绘
真理,不放在OnPaint里的绘图都是瞎球画。。。
sichuanwww 2017-11-10
  • 打赏
  • 举报
回复
1 其实,你的线程都实现了,线程时可以替换定时器的。 2 试试 CreateWaitableTimer
schlafenhamster 2017-11-09
  • 打赏
  • 举报
回复
定时器消息优先度最低 !
chen_JADE 2017-11-09
  • 打赏
  • 举报
回复
我之前也遇到这样的问题。 后面找到解决方法:在要需要调出对话框时先把定时器关掉 KillTimer,然后在子对话框的初始化函数里面,再获取主对话框的指针,并将那个定时器开启。
weixin_40994171 2017-11-09
  • 打赏
  • 举报
回复
引用 5楼schlafenhamster 的回复:
试试 使用多媒体定时器 timeSetEvent() 函数
试过的 目前状况是只必须用SetTimer 只能在非模态对话框这边想办法
schlafenhamster 2017-11-09
  • 打赏
  • 举报
回复
试试 使用多媒体定时器 timeSetEvent() 函数
weixin_40994171 2017-11-09
  • 打赏
  • 举报
回复
引用 1楼chen_JADE 的回复:
我之前也遇到这样的问题。 后面找到解决方法:在要需要调出对话框时先把定时器关掉 KillTimer,然后在子对话框的初始化函数里面,再获取主对话框的指针,并将那个定时器开启。
不行啊 我在点击按钮的代码中首先KillTimer(1) 然后再写调出非模态对话框的代码 然后在模态对话框的初始化函数OnInitDialog中重新启动定时器 ::SetTimer(m_pDlg-〉m_hWnd,1,30,NULL) 自然不行啊 你看我这有哪里不对吗?
向立天 2017-11-09
  • 打赏
  • 举报
回复
绘图操作应该全部写在OnPaint函数里 定时器只是修改参数调用Invalid来激活重绘
1、VC++编程环境介绍 ①、编程环境、编译器; ②、名词解释; ③、一个简单的MFC对话框工程; ④、个人认为在学习过程可以看的不错书籍; ⑤、VC编译EXE在没装VC的电脑上运行出错问题解决! 2、ANSI与UNICODE ①、ANSI与UNICODE; ②、不同编码格式下的字符串处理及相互转化; ③、CString常用操作讲解。 3、模态对话框模态对话框 ①、模态模态对话框的创建; ②、新对话框的初始化工作; ③、两个对话框之间数据传递的几种方法。 4、对话框控件不同类型成员变量的绑定 ①、控件各种类型变量的绑定、最大值及最小值问题; ②、对话框数据交换与验证机制; ③、各种开源控件类的使用; ④、MFC与SDK API同名函数问题。 5、VC常用控件的用法讲解 ①、VC常用控件的用法讲解见:http://www.cctry.com/thread-106-1-1.html ②、VS2008新增控件的用法讲解。 6、定时器讲解 ①、定时器相关函数讲解:SetTimer、OnTimer、KillTimer; ②、利用定时器实现动态显示时间; ③、改变CStatic控件的文字颜色。 7、MFC对话框程序响应鼠标及键盘消息 ①、MFC对话框程序响应鼠标点击消息; ②、MFC对话框程序响应键盘按键消息; ③、MFC对话框程序响应组合键。 8、MFC对话框注册全局系统热键 9、控件自定义消息的响应: ①、响应按钮控件的右键消息; ②、响应Static控件的双击消息。 ③、自定义编辑框控件只读、颜色不变灰 10、再论“逃跑”按钮的实现 ①、MoveWindow、SetWindowPos、GetWindowRect函数讲解; ②、坐标系的变换。 11、通用对话框讲解 ①、文件选择对话框; ②、目录选择对话框; ③、让对话框程序支持拖拽。 12、菜单操作 ①、对话框程序添加菜单; ②、右键弹出式菜单; ③、菜单项的启用与禁用。 13、对话框的工具栏操作 ①、工具栏的创建; ②、工具栏按钮的响应。 14、对话框的状态栏操作 ①、状态栏的创建; ②、状态栏显示时钟、鼠标位置、鼠标点的颜色信息等。 15、一个简单计算器软件的编写 ①、计算功能的实现; ②、剪贴板操作:将计算结果保存到剪贴板。 16、文件的基本操作之CFile[Ⅰ] ①、文件的创建、打开、关闭; ②、文件的读写、何时读取完毕、读取一行数据; ③、文件指针位置的设置; ④、刷新缓存数据到文件; 17、文件的基本操作[Ⅱ] ①、文件的复制[适用于文件夹]; ②、文件的重命名或移动[适用于文件夹]; ③、文件的删除[只读属性]; 18、文件属性信息的获取与设置 ①、属性信息的获取:大小、时间、隐藏属性等; ②、属性信息的设置 [删除只读属性文件]; ③、判断文件是否存在以及是否为目录; 19、文件夹操作 ①、文件夹的创建与删除; ②、文件夹的属性信息的获取:时间、隐藏属性等; ③、文件夹大小的获取:遍历文件方法[下节课讲解]; 20、文件的遍历与查找小软件的编写[包括文件的各种属性信息] 21、系统各种路径信息的获取 ①、Windows、System32、temp、桌面目录、我的文档等目录的获取; ②、应用程序当前目录的获取与设置及存在的问题讲解; ③、可执行文件所在目录[包括EXE和DLL]; ④、工程当前目录与Debug调试目录的不同。 22、系统信息的获取 ①、当前用户名称、计算机名称的获取; ②、CPU、内存、硬盘信息的获取。 23、进程的相关操作 ①、进程创建的三种方法及CreateProcess参数存在的问题; ②、进程的结束; 进程的枚举 一个简单任务管理器的实现 MFC动态数组、动态链表、映射表的讲解 ClistCtrl 的自绘操作
1. 开始 WINDOWS环境 WINDOWS程序设计选项 编写第一个WINDOWS程序 2.Unicode简介 字符集简史 宽字符和WINDOWS 3. 窗口和消息 自己的窗口 WINDOWS程序设计的难点 4. 输出文字 绘制和更新 GDI简介 滚动条 建立更好的滚动 5. 图形基础 GDI的结构 画点和线 绘制填入区域 GDI映像方式 矩形、区域和剪裁 6. 键盘 键盘基础 按键消息 字符消息 键盘消息和字符集 插入符号(不是光标) 7. 鼠标 鼠标基础 显示区域鼠标消息 显示区域鼠标消息 程序的命测试 拦截鼠标 鼠标滑轮 章节目录 壹佰软件开发小组 整理编译 8. 定时器 定时器入门 定时器的使用:三种方法 定时器用于时钟 以定时器进行状态报告 9. 子窗口控件 按钮类别 控件与颜色 静态类别 滚动条类别 编辑类别 清单方块类别 10. 菜单及其它资源 图标、光标、字符串和自订资源 菜单 键盘快捷键 11. 对话框 模态对话框 模态对话框 通用对话框 12. 剪贴簿 剪贴簿的简单使用 复杂的剪贴簿用法 实作剪贴簿浏览器 图像篇 13. 使用打印机 打印入门 打印图形和文字 14. 位图和Bitblt 位图入门 位图尺寸 位块传输 GDI位图对象 15. 与设备无关的位图 DIB文件格式 目录页码,2/4 mk:@MSITStore:E:\新建文件夹\Windows程序设计\Windows程序设计(CH).chm:... 2006-5-5 显示和打印 DIB和DDB的结合 16. 调色盘管理器 使用调色盘 调色盘动画 调色盘和真实世界图像 DIB处理链接库 17. 文字和字体 简单的文字输出 字体的背景 逻辑字体 字体列举 段落格式 有趣的东西 18. Metafile 旧的 MetaFile 格式 增强型 MetaFile 进阶篇 19. 多重文件界面 MDI概念 MDI的范例程序 20. 多任务和多线程 多任务的各种模式 WINDOWS的多线程处理 线程同步 事件信号 线程区域储存空间(TLS) 21. 动态链接库 动态链接库的基本知识 各式各样的DLL讨论 22. 声音与音乐 WINDOWS和多媒体 波形声音 MIDI和音乐
基础篇 1. 开始 …………………… WINDOWS环境 …………………… WINDOWS程序设计选项 …………………… 编写第一个WINDOWS程序 2.Unicode简介 …………………… 字符集简史 …………………… 宽字符和C …………………… 宽字符和WINDOWS 3. 窗口和消息 …………………… 自己的窗口 …………………… WINDOWS程序设计的难点 4. 输出文字 …………………… 绘制和更新 …………………… GDI简介 …………………… 滚动条 …………………… 建立更好的滚动 5. 图形基础 …………………… GDI的结构 …………………… 设备内容 …………………… 画点和线 …………………… 绘制填入区域 …………………… GDI映像方式 …………………… 矩形、区域和剪裁 6. 键盘 …………………… 键盘基础 …………………… 按键消息 …………………… 字符消息 …………………… 键盘消息和字符集 …………………… 插入符号(不是光标) 7. 鼠标 …………………… 鼠标基础 …………………… 显示区域鼠标消息 …………………… 显示区域鼠标消息 …………………… 程序的命测试 …………………… 拦截鼠标 …………………… 鼠标滑轮 8. 定时器 …………………… 定时器入门 …………………… 定时器的使用:三种方法 …………………… 定时器用于时钟 …………………… 以定时器进行状态报告 9. 子窗口控件 …………………… 按钮类别 …………………… 控件与颜色 …………………… 静态类别 …………………… 滚动条类别 …………………… 编辑类别 …………………… 清单方块类别 10. 菜单及其它资源 …………………… 图标、光标、字符串和自订资源 …………………… 菜单 …………………… 键盘快捷键 11. 对话框 …………………… 模态对话框 …………………… 模态对话框 …………………… 通用对话框 12. 剪贴簿 …………………… 剪贴簿的简单使用 …………………… 复杂的剪贴簿用法 …………………… 实作剪贴簿浏览器 ………………

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧