-
c语言入门之C++ Builder 中园形、三角形按钮的实现
合肥电子工程学院计算中心
李 强
---- 由于Window 95增加了对窗口区域概念的支持,使得窗口区域就是所定义的窗口看上去的形状,窗口区域作为窗口的实际边界区域,这样窗口区域不仅定义了窗口的可画区域,而且定义了窗口下隐含区域和响应鼠标击键事件的响应窗口区域。
---- 按钮的各种形状是在运行时设置的而不是在设计时设置。设计时按钮的形状仍然是长方形或正方形。
---- 按钮形状的设计分成两个步骤。
---- 第一步创建按钮的外形,即定义窗口区域。使用API的区域创建函数就可达到目的。区域创建函数很多,主要有CreateEllipticRgn 、CreatePolygonRgn、 CreateRectRgn、 CreateRoundRectRgn,用于创建不同类型的区域显示。如果需要一个复杂区域形状,那么可以分别使用不同的区域函数创建不同的区域,然后调用CombineRgn API函数把它们组合起来。所以说,不仅可以创建出园形、三角形的按钮,而且还可以创建出其它各种形状的按钮。
---- 第二步将区域显示应用到窗口上。一旦使用区域函数创建了一个新的区域显示,就可以使用SetWindowsRgn函数将这个区域应用到窗口上。
---- 下面给出园形、三角形按钮实现的具体代码。为了直观显示效果,将窗体的背景色设置为了黑色(Color设置为clBtnText),并将两个按钮的Cursor设置crCross。在窗体放置两个Button按钮,分别定义为RButton、TButton。实现窗口区域的最佳时机是在窗体首次创建时,所以将处理程序放在OnCreate事件中。
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//创建园形按钮
HRGN hRgnR = CreateEllipticRgn(0,0,RButton->
Width,RButton->Height);
SetWindowRgn(RButton->Handle,hRgnR,TRUE);
//创建三角形按钮
TrPoint[0].x=TButton->Width/2;
TrPoint[0].y=0;
TrPoint[1].x=0;
TrPoint[1].y=TButton->Height;
TrPoint[2].x=TButton->Width;
TrPoint[2].y=TButton->Height;
HRGN hRgnT = CreatePolygonRgn(TrPoint,3,ALTERNATE);
SetWindowRgn(TButton->Handle,hRgnT,TRUE);
}
其中TrPoint在Unit.h头文件中定义如下:
private: // User declarations
POINT TrPoint[3];
---- 上面的代码在按钮的边界内分别创建了一个园形区域和一个三角形区域,然后作为新的窗口区域把它赋给各自的按钮。在创建园形按钮时使用了椭园形区域创建函数,要使按钮为园形在设计时该按钮应设计为正方形。另外区域是以按钮坐标的形式定义的,而不是用屏幕坐标。(0,0)点是按钮的最左上角,而(宽,高)点是按钮的最右下角。
---- 应该注意的是,一旦将区域句柄赋给按钮,就不能再对区域句柄作任何操作。如果将区域句柄赋给按钮后,修改或删除这个句柄将导致程序崩溃。
---- 光标只在园形和三角形区域内变为crCross形状。为了使按钮美观可以使用BitBtn或SpeedButton按钮,在按钮上附上位图。有关API区域函数的使用请参看Win32SDK.hlp帮助文件。
李 强
---- 由于Window 95增加了对窗口区域概念的支持,使得窗口区域就是所定义的窗口看上去的形状,窗口区域作为窗口的实际边界区域,这样窗口区域不仅定义了窗口的可画区域,而且定义了窗口下隐含区域和响应鼠标击键事件的响应窗口区域。
---- 按钮的各种形状是在运行时设置的而不是在设计时设置。设计时按钮的形状仍然是长方形或正方形。
---- 按钮形状的设计分成两个步骤。
---- 第一步创建按钮的外形,即定义窗口区域。使用API的区域创建函数就可达到目的。区域创建函数很多,主要有CreateEllipticRgn 、CreatePolygonRgn、 CreateRectRgn、 CreateRoundRectRgn,用于创建不同类型的区域显示。如果需要一个复杂区域形状,那么可以分别使用不同的区域函数创建不同的区域,然后调用CombineRgn API函数把它们组合起来。所以说,不仅可以创建出园形、三角形的按钮,而且还可以创建出其它各种形状的按钮。
---- 第二步将区域显示应用到窗口上。一旦使用区域函数创建了一个新的区域显示,就可以使用SetWindowsRgn函数将这个区域应用到窗口上。
---- 下面给出园形、三角形按钮实现的具体代码。为了直观显示效果,将窗体的背景色设置为了黑色(Color设置为clBtnText),并将两个按钮的Cursor设置crCross。在窗体放置两个Button按钮,分别定义为RButton、TButton。实现窗口区域的最佳时机是在窗体首次创建时,所以将处理程序放在OnCreate事件中。
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//创建园形按钮
HRGN hRgnR = CreateEllipticRgn(0,0,RButton->
Width,RButton->Height);
SetWindowRgn(RButton->Handle,hRgnR,TRUE);
//创建三角形按钮
TrPoint[0].x=TButton->Width/2;
TrPoint[0].y=0;
TrPoint[1].x=0;
TrPoint[1].y=TButton->Height;
TrPoint[2].x=TButton->Width;
TrPoint[2].y=TButton->Height;
HRGN hRgnT = CreatePolygonRgn(TrPoint,3,ALTERNATE);
SetWindowRgn(TButton->Handle,hRgnT,TRUE);
}
其中TrPoint在Unit.h头文件中定义如下:
private: // User declarations
POINT TrPoint[3];
---- 上面的代码在按钮的边界内分别创建了一个园形区域和一个三角形区域,然后作为新的窗口区域把它赋给各自的按钮。在创建园形按钮时使用了椭园形区域创建函数,要使按钮为园形在设计时该按钮应设计为正方形。另外区域是以按钮坐标的形式定义的,而不是用屏幕坐标。(0,0)点是按钮的最左上角,而(宽,高)点是按钮的最右下角。
---- 应该注意的是,一旦将区域句柄赋给按钮,就不能再对区域句柄作任何操作。如果将区域句柄赋给按钮后,修改或删除这个句柄将导致程序崩溃。
---- 光标只在园形和三角形区域内变为crCross形状。为了使按钮美观可以使用BitBtn或SpeedButton按钮,在按钮上附上位图。有关API区域函数的使用请参看Win32SDK.hlp帮助文件。
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式