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帮助文件。

时间: 2025-01-06 17:13:36

C++ Builder中园形、三角形按钮的实现的相关文章

C++Builder中异形按钮的实现

"异形"按钮非常有趣,就是按钮的形状不是标准的长方形或正方形,而有一丝"叛逆"--"异形"嘛,是不是?怎样才能实现"异形"按钮呢?由于Window 95增加了对窗口区域概念的支持,使得窗口区域就是所定义的窗口看上去的形状,窗口区域作为窗口的实际边界区域,这样窗口区域不仅定义了窗口的可画区域,而且定义了窗口下隐含区域和响应鼠标击键事件的响应窗口区域. 按钮的各种形状是在运行时设置的而不是在设计时设置.设计时按钮的形状仍然是长方形

C++ builder中如何设计点击按钮后出现下拉选项,并且选项是带图标的。

问题描述 C++ builder中如何设计点击按钮后出现下拉选项,并且选项是带图标的. 需要设计一个带图标的按钮,按钮上显示一个向下的三角,点击向下的三角处 ,可显示下拉列表:下拉列表中显示四个图形按钮,可以选择,选择后更改下拉前的按钮图标. 解决方案 用一个第三方控件,比如http://www.tmssoftware.com/site/advdropdowncontrols.asp![图片说明](http://img.ask.csdn.net/upload/201501/21/14218282

《iOS 6核心开发手册(第4版)》——2.3节Interface Builder中的按钮

2.3 Interface Builder中的按钮iOS 6核心开发手册(第4版)按钮默认是作为Rounded Rect Button(圆角矩形按钮)对象出现在Interface Builder库中的(参见图2-1中顶部一排的左起第二个按钮),要使用它们,可把它们拖到界面中.然后可以通过属性检查器(选择View | Utility | Show Attributes Inspector命令,快捷键是Command+Option+4),把它们更改为另一种按钮类型.按钮类型弹出式菜单出现在检查器顶部

C++Builder中实现控件数组的功能

Borland C++ Builder作为Inprise(原Borland)公司新推出的快速应用程序开发工具(RAD),具有威力强大的C++语言和快捷便利的可视化编程完美结合的优点,遗憾的是其没有直接提供像VB中的控件数组的功能,需要开发者自己编程实现. VB中的一个控件数组可以 允许多个控件共享同一个事件句柄 提供了运行期间增加一个控件的机制 提供了一种方便的组合控件的方法. 前两项在C++ Builder中早已实现,而且CB更有一个优点.即不同类型的控件可以使用相同的句柄(只需在相关控件的O

C++ Builder中目录处理的一些函数

在编程时,经常有一些针对目录的操作,如打开目录对话框选择一个目录,直接创建多级目录,直接删除多级目录,判断某个目录是否存在等.本文就这些问题给出编程实现方法,并给出详细的程序代码,供各位编程爱好者参考. 一.判断目录是否存在: C++ Builder中提供了检查文件是否存在的函数FileExists,但没有提供检查目录是否存在的函数,我们可以用Windows API函数FindFirstFile实现这个功能.程序实现如下: 设char *Dir为带判断的目录 bool Exist; // 最后结

在C++ Builder中使用游戏操纵杆

在Windows环境下通过编程来操纵鼠标.键盘是一件再简单不过的事了,不过大家有没有想过要尝试一下另一样我们比较常见的输入工具--游戏操纵杆呢?在某些情况下,尤其是象编制一些小型的游戏软件的时候,加入对游戏操纵杆的支持可以给使用者提供更为友好的人机界面,极大的提高游戏软件的可玩性. C++Builder中没有专门控制操纵杆函数(其实在常见的编程语言中基本上都没有),因此要增加对游戏操纵杆的支持,就要和Windows的MCI API函数打交道,这里我们首先介绍一些在读取操纵杆的属性.状态,位置和按

C++Builder中自定义预览窗口

Borland C++ Builder是基于C++语言的可视化编程环境,它提供了可重用组件库和一系列RAD设计工具,使得编程者只需用少量的手工代码就可以创建出高效的Windows应用程序,尤其是复杂的数据库访问应用程序,因此深受软件开发人员的喜爱. 在开发数据库访问应用程序时,会经常涉及到报表的打印问题.C++ Builder中提供了Quick Report(快速报表)组件供编程人员设计报表.Quick Report是挪威的QuSoft AS公司专门为C++ Builder设计的用于制作报表的一

C++ Builder中利用组件传送文件

在Borland C++ Builder中,使用NMStrmServ和NMStrm组件可以很容易地在两台电脑之间传递文件.当然,你也可以使用基于FTPJ协议的文件传输组件NMFTP,但使用NMStrmServ和NMStrm组件更加方便.快捷. 首先,运行Borland C++ Builder,在窗体Form1中加入一个NMStrmServ组件和一个保存对话框组件SaveDialog. 然后在NMStrmServ1的OnMSG事件中加入: //保存文件对话框 if(SaveDialog1->Exe

在C++ Builder中显示透明位图

我们知道,GIF类型的图像格式支持透明显示,而BMP类型的图像格式不支持透明显示.在Microsoft照片编辑器中位图若以设置成透明色方式存储,则提示出错.然而,在C++Builder中,却可以轻而易举地显示透明位图.透明位图与透明GIF图像相比有一个很大的优点,即:GIF图像格式最大支持256种颜色,位图却可以支持真彩色. ----在C++Builder中显示透明位图 ----1.采用TImage组件. ----下面,我们制作一幅飞机凌空飞过蓝天的简单动画.因为移动的飞机是用透明位图显示的,所