请教:MFC是否每个popup窗口使用了一个线程处理消息循环及模拟模态对话框问题
不知道MFC是使用了一个线程进行调度还是为每个popup窗口创建一个消息循环
最近在作smartphone应用,由于不能用MFC,而且绘图方面较多,界面没有使用dialog,控件基本上全靠自己绘制
我现在是为每个popup窗口创建一个线程进行消息调度,现在希望能够用window模拟模态对话框
窗口1(主窗口)-->窗口2(模拟模态对话框)-->窗口3(先不管类型)
我的实现是创建窗口2时禁用窗口1,然后窗口1的消息循环线程等待窗口2的消息循环结束
不过现在发现了两个问题:
1. 窗口1被禁用后,窗口2销毁后窗口1会跑到后台去,必须首先启用窗口1,然后setforegroundwindow才行,这样刷新会有明显的一个间隔,显示了操作系统窗口一下
2. 在窗口2中又创建了一个窗口3,此时如果窗口2无法盖住窗口1,当3销毁时,窗口1会收到WM_PAINT消息和WM_ERASEBKGROUD消息,但是由于窗口1的消息循环在等窗口2,无法响应,导致窗口1的可见区域无法重绘
以前都用MFC,现在自己用API写才发现这么罗嗦
现在对这个内部消息处理基本了解了,打算调整一下,希望参考一下MFC的实现
我想了一下,要实现等待2的结束的一种办法就是只使用一个线程调度,然后在窗口2中暂时接管消息循环
还请众高手赐教一二
问题点数:100、回复次数:4Top
1 楼yuanbocsut(井冈星火)回复于 2006-01-26 11:16:27 得分 20
消息驱动,回调函数实现Top
2 楼goodboyws(深夜不眠者(VCMVP))回复于 2006-01-26 14:27:05 得分 20
不是Top
3 楼pkrobbie(pkrobbie)回复于 2006-01-26 14:48:48 得分 40
MFC默认使用一个线程处理所有Message。
去VC的目录下找找这两个函数看看
CWnd::RunModalLoop / CDialog::DoModalTop
4 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-01-28 10:50:50 得分 20
不会。OS会保证正确派发消息的。Top




