MFC 不规则窗口 SetWindowRgn

本文介绍了如何在MFC中利用SetWindowRgn创建不规则形状的窗口,如圆形或三角形对话框。通过创建CRgn对象并设置为椭圆形区域,然后应用到窗口,可以实现非矩形窗口效果。同时,由于没有边框,需要在WM_LBUTTONDOWN消息中处理窗口拖动,以确保可以自由移动不规则窗口。

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

有时候,我们需要使用到不规则窗口,比如一个圆形的对话框,或者一个三角形的对话框,这个时候,我们就可以通过使用SetWindowRgn来设置对话框的形状。

其实,当我们不设置窗口形状的时候,windows默认设置窗口形状为矩形了。

可以再OnInlitDialog中添加下列代码:

CRgn rgn;     //建立一个CRgn
 rgn.CreateEllipticRgn(50,50,200,200); //建立一个圆形区域,区域是以窗口矩形为参考的,窗口矩形左上角是(0,0),包括了框架。
 
 this->SetWindowRgn((HRGN)rgn.m_hObject,TRUE);   //设置窗口形状为刚才生成的形状

 rgn.DeleteObject();    //删除区域对象,要删除,不然内存会泄露,报错。

运行效果图:我是在一个按钮函数中生成的一个对话框,这个对话框背景色被设置为了蓝色。生成的对话框已经没有了边框,只有2个按钮。

这种情况还是在自己需要的地方才使用,如果没有了框架,需要自己去处理鼠标拖动窗口。

当这种没有框架的窗口生成后,我们会发现不能拖动窗口,为了让鼠标能自由拖动窗口,就需要我们在WM_LBUTTONDOWN消息中加上以下代码:

PostMessage(WM_NCLBUTTONDOWN,   HTCAPTION,   MAKELPARAM(point.x,   point.y)); &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值