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

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


场景:

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;
}



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白行峰 (花名)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值