我在看《windows程序设计》的时候,“窗口和消息”那一章节的例子
消息处理的部分如下:
switch (message)
{
case WM_CREATE:
......
case WM_PAINT:
......
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;最后一行是调用默认的处理函数。
那么我把 case WM_DESTROY 这部分屏蔽掉应该是没有问题的。
但是我把 case WM_DESTROY 这部分屏蔽以后,
程序运行后关闭了,但是在进程列表里面还能看见。
也就是窗口关闭了,但是进程还在。
我不太明白,难道默认的函数不结束这个进程么?谢谢
消息处理的部分如下:
switch (message)
{
case WM_CREATE:
......
case WM_PAINT:
......
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;最后一行是调用默认的处理函数。
那么我把 case WM_DESTROY 这部分屏蔽掉应该是没有问题的。
但是我把 case WM_DESTROY 这部分屏蔽以后,
程序运行后关闭了,但是在进程列表里面还能看见。
也就是窗口关闭了,但是进程还在。
我不太明白,难道默认的函数不结束这个进程么?谢谢
while(GetMessage())
{ .....
.....
}
这里的GetMessage()就是取得消息队列中的消息的,一般它不会返回FALSE,所以这个循环会一直进行下去。只有在取到WM_QUIT消息时它才返回FALSE,这样循环结束,进程也就会结束了。而WM_QUIT这个消息是调用PostQuitMessage()这个函数才发出的。所以你去掉了WM_DESTROY这句就会造成窗口结束,而进程依然还在的现象。
你说的我了解,我想知道,对于没有写出来的消息,不是调用了默认的消息处理么。
那么,WM_DESTROY消息的默认处理函数都作了什么工作?
难道我们写的程序都要自己写WM_DESTROY消息的处理函数么?怎么又出来了一个WM_QUIT 我只知道WM_DESTROY 和WM_CLOSE
那正确的顺序又是什么样的呢?
应该关闭在销毁的前面
说错了,别扔砖头,一块讨论,一快学习吗
这个顺序呢?谁来确认一下。我就是想知道,这3个消息的默认处理,不是按这个顺序么?
难道这个顺序是程序员自己来控制的?怎么想都觉得默认的应该可以完成。
You can use the DestroyWindow function to destroy a window. Typically, an application sends the WM_CLOSE message before destroying a window, giving the window the opportunity to prompt the user for confirmation before the window is destroyed. A window that includes a window menu automatically receives the WM_CLOSE message when the user clicks Close from the window menu. If the user confirms that the window should be destroyed, the application calls DestroyWindow. The system sends the WM_DESTROY message to the window after removing it from the screen. In response to WM_DESTROY, the window saves its data and frees any resources it allocated. A main window concludes its processing of WM_DESTROY by calling the PostQuitMessage function to quit the application.
>另外,默认的处理函数不处理WM_DESTROY消息也是有原因的,因为有的程序有不止一个窗口,如果你
>仅仅想关闭一个窗口的话,默认处理函数如果处理WM_DESTROY时发出WM_QUIT就会结束主函数了。你的意思我明白了,有一点想让你确认一下。
是不是 WM_DESTROY消息 就是窗口销毁完成后的一个完成消息?
也就是说WM_DESTROY消息就是窗口已经完成销毁消息
2.默认的WM_DESTROY处理方式是调用::PostQuitMessage,因此发出WM_QUIT.
3.CWinApp::Run收到WM_QUIT后会结束其内部之消息循环,然后调用ExitInstance,这是CWinApp的一个虚拟函数.
4.最后回到AfxWinMain,执行AfxWinTerm,结束程序.