场景:
1. 创建CFrameWindowImpl的顶级窗口时,默认模板项目都会创建一个XXView的子窗口,用于设置CFrameWindowImpl 的成员变量m_hWndClient.
这时,如果在XXView里添加了关闭按钮(比如创建无标题栏和边框的举行窗口),一般会在右上角添加自绘的关闭按钮,以关闭应用程序。
但是如果 直接发送WM_CLOSE事件或调用 PostQuitMessage也会出现错误窗口。
解决办法:
第一步:. 在子窗口XXView里的响应按钮的OnClose函数里添加以下代码即能正常关闭窗口.
LRESULT CMainFrameView::OnExit(WORD wNotify,WORD wID,HWND hCtrl, BOOL &bHandeld) { GetParent().PostMessage(WM_CLOSE,0,0); return 0; }
第二步: 在主窗口的WM_CLOSE接收事件函数里添加:
LRESULT CMainFrame::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { DestroyWindow(); ::PostQuitMessage(0); return 1; }