(一)不规则窗口
Windows提供的只是标准的矩形窗口,要想建立一个不规则的窗口就需要调用API函数来实现。建立一个不规则的窗口,一般是先用创建区域的API函数建立一个不规则的区域,再用API函数SetWindowRgn改变窗口的区域。这些API函数在C++ Builder中包含在头文件wingdi.h和winuser.h里面,因此,要使用这些API函数就要先在程序头部加上包含头文件的语句:
include <wingdi.h>
include <winuser.h>
SetWindowRgn函数能改变一个窗口的区域,该函数有三个参数,第一个参数hWnd是欲设置区域的窗口句柄,第二个参数hRgn是欲设置的区域,第三个参数bRedraw一般设为true,即立即重画窗口。
用来创建区域的API函数有多个,最常用的有三个:
1、CreateRectRgn函数,用来创建一个由X1、Y1和X2、Y2坐标点确定的矩形区域。当坐标点X1和Y1相等、X2和Y2也相等的时候,创建的是一个正方形。
例子:
//创建长方形
HRGN hRect=CreateRectRgn(0,0,400,200);
SetWindowRgn(Handle,hRect,true);
//创建正方形
HRGN hRect=CreateRectRgn(0,0,300,300);
SetWindowRgn(Handle,hRect,true);
2、CreateEllipticRgn函数,用来创建一个由X1、Y1和X2、Y2坐标点确定的矩形所内切的椭圆。同样,X1、Y1和X2、Y2坐标点所确定的矩形为正方形时,创建的就是一个圆形。
例子:
//创建椭圆
HRGN hElliptic=CreateEllipticRgn(0,0,400,250);
SetWindowRgn(Handle,hElliptic,true);
//创建圆形
HRGN hElliptic=CreateEllipticRgn(0,0,400,400);
SetWindowRgn(Handle,hElliptic,true);
3、CombineRgn函数,能将两个区域组合为一个新区域,它有四个参数,第一个参数hrgnDest保存合并后的新区域,第二个参数hrgnSrc1、三个参数hrgnSrc2为欲合并的两个区域,第四个参数fnCombineMode是区域组合的方式,它的值是为下面组合方式之一:
组合方式 说明
RGN_AND 建立两个区域的交集
RGN_COPY 建立hrgnSrc1的拷贝
RGN_DIFF 建立两个区域不相交的部分
RGN_OR 建立两个区域的并集
RGN_XOR 建立除两个区域并集之外的部分
例子:
//创建一个圆形和长方形交集的组合形状
HRGN hRect=CreateRectRgn(0,0,300,300);
HRGN hElliptic=CreateEllipticRgn(0,0,400,250);
CombineRgn(hRect,hRect,hElliptic,RGN_OR);
SetWindowRgn(Handle,hRect,true);
当需要将窗口还原为标准Windows矩形窗口时,只要将SetWindowRgn函数的hRgn参数设为0就行了,如:
SetWindowRgn(Handle,0,true);