delphi 画圆角窗体

    技术2022-05-19  29

    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; 以上代码是将一个窗体的上面两只角画成圆角,窗体下面的两只角还是直角!


    最新回复(0)