强制关闭模态对话的问题

在VC中关闭对话框的方法很多,在

        EndDialog()

        DestroyWindow()

        OnDestroy()

        OnNcDestroy()

        这些函数中,很多时候不知如何去使用这些函数。研究这些东西得花点时间。

       EndDialog()这个主要用于关闭模态对话框,对于非模态对话框使用DestroyWindow()。一开始也不清楚模态与非态态之间为什么关闭使用不同的关闭接口。直到用到时才发现,在EndDialog()中,在退出窗口前会做一个结束对话框的消息队列。一开时我通过计时器用DestroyWindow()来关闭窗口时,等我再去关闭主窗口时,发现主进程的窗口是关闭了,但了重新打开时系统提示有一个进程还在运行着,禁止打开。我打开任务管理器一看,发现主进程的进程还在,并没有因关闭窗口时一起结束。但不清楚是什么原因,在网上查下资料,发现如果是模态对话框需要使用EndDialog(),如果使用DestroyWindow()来销毁窗口应需要在销毁前结束窗口的消息循环。于是我改为EndDialog()去销毁窗口,发现程序能正常退出。接着我又改回DestroyWindow()去销毁,不同的是在销毁前我调用EndModalLoop()去结束消息循环。结果也能正常退出程序,想下应是EndDialog()内部作了EndModalLoop()的操作。查看下EndDialog()的源码,的确是这样。同时发现一个无法想通的问题是为什么用计时器来关闭程序时,有时主进程会在我点击关闭两三秒后才能退出。还没无弄清楚计时器对消息队列是如何处理的??

猜你喜欢

转载自blog.csdn.net/goodstudy168/article/details/6585605
今日推荐