本文由CSDN用户zuishikonghuan所作,转载请注明出处:
http://blog.csdn.net/zuishikonghuan/article/details/46802537
什么是模态窗口呢,想必大家都知道模态对话框和非模态对话框吧,模态窗口和模态对话框类似。假设我们需要在按钮单击时创建一个新窗口,如果只是在按钮单击消息里CreateWindow(Ex)一个新窗口,那么这个窗口和之前的窗口是独立的,他们同时接受用户的响应。那么我们想在新窗口完成它的使命之前让之前的窗口拒绝接收响应,就要创建一个“模态窗口”
如何创建模态窗口呢,其实模态窗口和真正的窗口一样,只是创建之前将之前的窗口禁用掉,关闭之后恢复先前的窗口而已。
如果创建的第二个窗口还是使用原来的窗口类,他和之前的窗口就会公用同一个窗口回调函数,我们可以根据回调函数发回的窗口句柄判断是那一个窗口,当然,如果我们愿意,我们可以使用SetWindowLong(Ptr)修改窗口回调函数或者干脆重新注册一个窗口类。我喜欢再注册一个窗口类,因为这么做最简单,程序最美观,不至于一个回调函数特别不清晰。
那么我们就可以通过收到第二个窗口的WM_DESTROY消息时恢复第一个窗口,不过那样会使代码显得有点乱,因此,我们先写一个函数: