场景:
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;
}
本文详细介绍了在使用CFrameWindowImpl创建顶级窗口时,如何在子窗口中添加自绘关闭按钮并正确处理WM_CLOSE事件,避免出现错误窗口的问题。通过两步解决方案,实现了子窗口的正常关闭。
4352

被折叠的 条评论
为什么被折叠?



