关于GetWindowRect()、GetClientRect()和SetWindowRgn()的问题

在制作模拟时钟程序中,遇到对话框形状设为圆形的问题。通过GetClientRect()获取的矩形包含标题栏,实际需要的是客户区。解决方法是设置无边框对话框,并使用SetWindowRgn()创建圆形区域。GetWindowRect()和GetClientRect()的坐标原点不同,导致理解上的混淆。
摘要由CSDN通过智能技术生成

最近在和同学做一个模拟时钟的程序,我们做的是基于对话框的,我想把对话框的形状做成圆形的,因为我们做的时钟外形就是圆形的,在其中我遇到了以下问题(在同学的帮助下都已解决):

下面是我在OninitDialog中添加的代码:

 CRgn rgn;
 CRect rect;
 GetClientRect(rect);
 rgn.CreateEllipticRgn(rect.left,rect.top,rect.right,rect.bottom);
 SetWindowRgn(rgn,true);

可是运行后我发现这并不是我要的效果,因为这个圆形区域竟然包含了标题栏,而我想要的只是客户区,后来同学的实现方法就是在对话框属性设置中将边框一项选为无,再运行竟然达到了我想要的结果,真是很感谢。可是我很疑惑:难道GetClientRect()获得的不是客户区的矩形大小?对话框的客户区又是指哪一部分呢?经过一番思考及搜索之后得到如下启示:

一、客户区:

1。在一个MDI(多文档)应用程序中每个概念如下图所标示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值