对"深入MDI客户窗口编程"一文的改进和补充

内容提及中国计算机世界出版服务公司拥有版权,与信息技术领域出版相关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对"深入MDI客户窗口编程"一文的改进和补充

英业达集团电子技术有限公司
向海

---- 看了贵报刊载的"深入MDI客户窗口编程"一文,颇有兴趣,实际操作了一次,觉得很不错 整个窗口如图一(略)所示:

---- 不过,美中不足的是,当我用鼠标拖动MDI子窗口时,出现了图二(略)所示情况:

---- 背景怎麽给抹掉了?但当我把整个框架窗口最小化,再还原它的时候,客户窗口 的背景又恢复正常了,怎麽会是这个样子呢? 是VC6.0/5.0出错了吗?不是的, 这是由於我们在拖动MDI子窗口时,客户窗口没有及时重绘的结果 那麽,该怎样 去修正呢?当用鼠标拖动子窗口时,我们应该让当前活动子窗口给主框架窗口发 一个重绘客户窗口背景的消息,使用ClassWard在CChildFrame中加入OnMove消息 处理函数如下:

void CChildFrame::OnMove(int x, int y) 
{
	CMDIChildWnd::OnMove(x, y);
    //新增代码 begin
	CMDIFrameWnd* p_MFrame=GetMDIFrame( );
         P_MFrame- >PostMessage(WM_PAINT) ;
    //新增代码 end
	
}

---- 再编译、运行,刚才的现象没有啦,一切都好了,无论怎麽拖动MDI子窗口,背景都不会有给抹掉的现象了。

---- 可是,又有问题了,当我把鼠标放在MDI子窗口的边框上,并拖动边框缩小MDI子窗口的尺寸时,出现了图三所示情况:

---- 同样的道理,当MDI子窗口的尺寸改变时,我们也得向主框架窗口发一条重绘背景的消息 使用ClassWard在CChildFrame中加入OnSize消息处理函数如下:

void CChildFrame::OnSize(UINT nType, int cx, int cy) 
{
	CMDIChildWnd::OnSize(nType, cx, cy);
	
	//新增代码 begin
	CMDIFrameWnd* p_MFrame=GetMDIFrame( );
    P_ MFrame - >PostMessage(WM_PAINT) ;
    //新增代码 end
	
}

---- 再编译、运行,全正常了。


中国计算机世界出版服务公司版权所有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值