如题。
具体的问题是这样,两个独立的线程A和B。B是一个前台窗口线程。B有时会调用 MessageBox() 或 DialogBox() 弹出模态的消息框或者对话框。
因为线程A的某一项操作取决于B是否处于模态循环中,所以需要事先得知。
现在的问题就是,怎样得知B是否处于模态循环(即有模态窗口打开)呢?
希望不要用 FindWindow() 之类的方法解决,能不能从模态循环的机制上入手,予以解决?
另外,还想了解一下,模态循环与非模态循环消息处理上的区别。因为调试发现,在模态循环中,消息不经过 GetMessage() 的,然而窗口过程却能被调用,那么是谁调用的呢?
具体的问题是这样,两个独立的线程A和B。B是一个前台窗口线程。B有时会调用 MessageBox() 或 DialogBox() 弹出模态的消息框或者对话框。
因为线程A的某一项操作取决于B是否处于模态循环中,所以需要事先得知。
现在的问题就是,怎样得知B是否处于模态循环(即有模态窗口打开)呢?
希望不要用 FindWindow() 之类的方法解决,能不能从模态循环的机制上入手,予以解决?
另外,还想了解一下,模态循环与非模态循环消息处理上的区别。因为调试发现,在模态循环中,消息不经过 GetMessage() 的,然而窗口过程却能被调用,那么是谁调用的呢?
然后查看变量,是否在处于模态?
是不是这样?
1、模式对话框将父窗体DISABLE了。
2、模式对话框有自己的消息循环。
注意,虽然父窗体被Disable了,但是父窗体仍然响应部分消息,例如WM_PAINT,当拖动父窗体上的模式对话框时,父窗体就响应WM_PAINT消息,绘制无效区域,擦去模式对话框上次覆盖父窗体留下的痕迹。
对,这个消息试过。
还有一个就是WM_SETCURSOR,也可以收到。还有就是 >=WM_USER的了。