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