vc基本问题求教

来源:百度知道 编辑:UC知道 时间:2024/05/22 13:51:35
1 WM_CLOSE,WM_QUIT,WM_DESTROY三个消息什么区别?
2 我使用SendMessage(WM_QUIT)无法使窗口正常关闭,而用PostMessage(WM_QUIT)正常关闭,SendMessage不过是要把消息放松过去,等消息处理完才返回,慢一点,但总会返回啊,为什么关闭不了.

一、

WM_DESTROY 是关闭程序的
WM_CLOSE 是关闭窗口的
WM_QUIT 是关闭消息环的

以下是程式的死亡:
􀂄 使用者选按【File/Close】,於是发出 WM_CLOSE。
􀂄 CMyFrameWnd 并没有设置WM_CLOSE 处理常式,於是交给预设之处理常式。
􀂄 预设函式对於WM_CLOSE 的处理方式是呼叫 ::DestroyWindow, 并因而发出WM_DESTROY。
􀂄 预设之WM_DESTROY 处理方式是呼叫::PostQuitMessage,因此发出WM_QUIT。
􀂄 CWinApp::Run 收到WM_QUIT 后会结束其内部之讯息回路, 然后呼叫
ExitInstance,这是CWinApp 的㆒个虚拟函式。
􀂄 如果CMyWinApp 改写了ExitInstance , 那麼CWinApp::Run 所呼叫的就是CMyWinApp::ExitInstance,否则就是 CWinApp::ExitInstance。
􀂄 最后回到 AfxWinMain,执行 AfxWinTerm,结束程式。

二、

SendMessage 和 PostMessage 的区别
1、首先是返回值意义的区别,我们先看一下 MSDN 里的声明:

LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
BOOL PostMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam