有时候,我们需要使用到不规则窗口,比如一个圆形的对话框,或者一个三角形的对话框,这个时候,我们就可以通过使用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)); &

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

被折叠的 条评论
为什么被折叠?



