函数功能描述:设置窗口区域
.函数原型
int SetWindowRgn(
HWND hWnd, // 要设置其区域的窗口句柄
HRGN hRgn, // 区域句柄
BOOL bRedraw // 重画标志
);
参数
hWnd
要设置其区域的窗口的句柄.
hRgn
区域的句柄.该函数把窗口的区域设置成由此参数指定的区域.系统将仅绘制窗口区域内的部分.如果此参数为NULL,该函数将把窗口区域也设置成NULL,这意味着该窗口将不会被绘制.
bRedraw
重画标志,如果为TRUE,系统将在设置了窗口区域后重画窗口;如果为FALSE,则在设置窗口后将不重画此窗口.通常,如果窗口可见,此参数为TRUE.
返回值
如果函数成功,返回非零值;否则返回零值.在Windows NT下,可以调用GetLastError()函数获得错误扩展信息.
备注
如果重画标志bRedraw为TRUE,系统会发送WM_WINDOWPOSCHANGING和WM_WINDOWPOSCHANGED消息给窗口.在成功调用SetWindowRgn后,窗口的区域将被设置成由参数hRgn指定的区域;为了获得窗口区域,可以调用GetWindowRgn.另外,窗口区域的坐标是相对于窗口(注意:不是窗口客户区)左上角而言的.
为了获得区域句柄,可以调用一些区域相关的API函数来创建各种形状的区域(比如,CreateRoundRectRgn创建圆角矩形区域;CreateEllipticRgn创建椭圆区域;等等),然后就可以把窗口设置成各种形状了.另外一种很流行的窗口是位图区域窗口;在很多网站上都可以找得到具体的例子.
示例代码
.函数原型
int SetWindowRgn(
HWND hWnd, // 要设置其区域的窗口句柄
HRGN hRgn, // 区域句柄
BOOL bRedraw // 重画标志
);
参数
hWnd
要设置其区域的窗口的句柄.
hRgn
区域的句柄.该函数把窗口的区域设置成由此参数指定的区域.系统将仅绘制窗口区域内的部分.如果此参数为NULL,该函数将把窗口区域也设置成NULL,这意味着该窗口将不会被绘制.
bRedraw
重画标志,如果为TRUE,系统将在设置了窗口区域后重画窗口;如果为FALSE,则在设置窗口后将不重画此窗口.通常,如果窗口可见,此参数为TRUE.
返回值
如果函数成功,返回非零值;否则返回零值.在Windows NT下,可以调用GetLastError()函数获得错误扩展信息.
备注
如果重画标志bRedraw为TRUE,系统会发送WM_WINDOWPOSCHANGING和WM_WINDOWPOSCHANGED消息给窗口.在成功调用SetWindowRgn后,窗口的区域将被设置成由参数hRgn指定的区域;为了获得窗口区域,可以调用GetWindowRgn.另外,窗口区域的坐标是相对于窗口(注意:不是窗口客户区)左上角而言的.
为了获得区域句柄,可以调用一些区域相关的API函数来创建各种形状的区域(比如,CreateRoundRectRgn创建圆角矩形区域;CreateEllipticRgn创建椭圆区域;等等),然后就可以把窗口设置成各种形状了.另外一种很流行的窗口是位图区域窗口;在很多网站上都可以找得到具体的例子.
示例代码
RECT rc={40,40,200,200};
HRGN hRgn=::CreateRoundRectRgn(rc.left,rc.top,rc.right,rc.bottom,10,20);
if(hRgn!=NULL)
::SetWindowRgn(hWnd,hRgn,TRUE);