delphi 画圆角窗体


API 介绍与Demo 2010-02-05 11:49:04 阅读200 评论0  字号: 订阅

  采用API画圆角的窗体!
   圆角窗体一(四角都是圆角的)采用CreateRoundRectRgn,SetWindowRgn函数就可实现!函数参数如下:
 函数一:
  int SetWindowRgn;(HWND hWnd, HRGN hRgn, BOOL bRedraw)
  参数
  hWnd     
       [在] 对窗户区域将被设定的窗户的柄。
  hRgn
  [在] 对一个区域的柄。 功能将窗户的窗户区域设定为这一个区域。
  如果 hRgn 是无效力的,功能将窗户区域设定为零。
  bRedraw
  [在] 叙述系统是否在设定窗户区域之后重划窗户。 如果 bRedraw 是真实的,系统这么做; 另外,它不。
  典型地, 你设定 bRedraw 到真实的如果窗户是看得见的。
  返回值
  如果功能成功,回返价值是非零。
  如果功能失败,回返价值是零。
函数二:
  HRGN CreateRoundRectRgn(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidthEllipse, int nHeightEllipse);
参数表 参数 类型及说明:
  X1,Y1 Long,矩形左上角的X,Y坐标
  X2,Y2 Long,矩形右下角的X,Y坐标
  X3 Long,圆角椭圆的宽。其范围从0(没有圆角)到矩形宽(全圆)
  Y3 Long,圆角椭圆的高。其范围从0(没有圆角)到矩形高(全圆)
画一个圆角窗体就用以上两个函数,实例:
  SetWindowRgn(handle, CreateRoundRectRgn(0, 0, self.Width, self.Height, 16, 16), True);  //即可画一个圆角窗体

圆角窗体二(指点画窗体的某一只角为圆角):
采用函数:CreateRoundRectRgn SetwindowRgn ,CreateRectRgn  CombineRgn  
前面两个函数上面已经介绍,看看下面的两个参数吧!

函数三
Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  [说明]
  创建一个由点X1,Y1和X2,Y2描述的矩形区域
  [参数表]
  X1,Y1 ---------- Long,矩形左上角X,Y坐标
  X2,Y2 ---------- Long,矩形右下角X,Y坐标
  [返回值]
  Long,执行成功为区域句柄,失败则为零

函数二
Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
[说明]
  将两个区域组合为一个新区域
  [参数表]
  hDestRgn ------- Long,包含组合结果的区域句柄
  hSrcRgn1 ------- Long,源区域1
  hSrcRgn2 ------- Long,源区域2
  nCombineMode --- Long,组合两区域的方法。可设为下述常数
  RGN_AND
  hDestRgn被设置为两个源区域的交集(集合中的交集)
  RGN_COPY
  hDestRgn被设置为hSrcRgn1的拷贝
  RGN_DIFF
  hDestRgn被设置为hSrcRgn1与hSrcRgn2相减后的区域(集合中的差集)
  RGN_OR hDestRgn被设置为两个区域的并集(集合中的并集)
  RGN_XOR
  hDestRgn被设置为两个区域的异或操作后的区域(集合中的异或操作)
  [返回值]
  Long,下列常数之一: 
  COMPLEXREGION:区域有互相交叠的边界 
  SIMPLEREGION:区域边界没有互相交叠 
  NULLREGION:区域为空 
  ERRORAPI:不能创建组合区域

实例:
var
  Reg1,Reg2:  THandle;
begin
  Reg1 := CreateRoundRectRgn(0, 0, self.Width, self.Width, 16, 16);  //在窗体指定的位置上创建一个圆角句型区域
  Reg2 := CreateRectRgn(20, 20, self.Width, self.Width);     //在窗体指定的位置上创建一个矩形区域
  CombineRgn(Reg1, Reg1, Reg2, RGN_OR);   //将Reg1,Reg2两个区域进行合并,Reg1得到Reg1,reg2的集合并集!
  SetwindowRgn(handle, Reg1, True);    //将以上创建的区域设定成窗体的区域
end;
以上代码是将一个窗体的上面两只角画成圆角,窗体下面的两只角还是直角!

你可能感兴趣的:(Windows)