[ATL/WTL]_[初级]_[SDI程序关闭的注意事项]


场景:

1. 创建CFrameWindowImpl的顶级窗口时,默认模板项目都会创建一个XXView的子窗口,用于设置CFrameWindowImpl 的成员变量m_hWndClient.

这时,如果在XXView里添加了关闭按钮(比如创建无标题栏和边框的举行窗口),一般会在右上角添加自绘的关闭按钮,以关闭应用程序。

但是如果 直接发送WM_CLOSE事件或调用 PostQuitMessage也会出现错误窗口。

[ATL/WTL]_[初级]_[SDI程序关闭的注意事项]_第1张图片

解决办法:

第一步:. 在子窗口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;
}



你可能感兴趣的:(关闭窗口,注意事项,wtl,弹出错误)