Paip.提升用户体验------在C++ Builder 不规则图片按钮实现总结

时间:2022-02-09 18:34:53

 

Paip.提升用户体验------C++ Builder 不规则图片按钮实现总结

 

1.使用图像组件(简单的) 1

2.使用默认按钮设置mask以及背景(不行).. 1

CreateRectRgn+CombineRgn +SetWindowsRgn法(常用) 1

CreatePolygonRgn+SetWindowsRgn 2

///////////使用gdi+ 2

///////////原理 2

已经有了按钮的修理(隐藏按钮,加图片) 3

参考: 3

 

 Xpsp3+C++ Builder 2009

 

作者Attilax ,  EMAIL:1466519819@qq.com 

来源:attilax的专栏

地址:http://blog.csdn.net/attilax

 

 

1.使用图像组件(简单的)

使用图像创建按钮不仅可以使按钮的颜色和形状变化更加灵活,而且不需编写过多的代码

但是,图片只是绘出来的的,没有handle,没有focus...

 

2.使用默认按钮设置mask以及背景(不行)..

但是,vcl好像没设置mask, 背景只能bmp格式..放弃..

 

 

CreateRectRgn+CombineRgn +SetWindowsRgn法(常用)

这个ms常使用.

C++Builder5编制不规则界面精美媒体播放器 计算机理论 道客巴巴.htm

Image shaped forms.htm   by Andy Walker

 

 

 

CreatePolygonRgn+SetWindowsRgn

扫描图片轮扩...SetWindowsRgn

 

 ///////////使用gdi+

 GDI+功能强大,处理图片更是轻松多了,直接支持RGBA色彩。

 

 

 

 

 

///////////原理

---- 由于Window 95增加了对窗口区域概念的支持,使得窗口区域就是所定义的窗口看上去的形状,窗口区域作为窗口的实际边界区域,这样窗口区域不仅定义了窗口的可画区域,而且定义了窗口下隐含区域和响应鼠标击键事件的响应窗口区域。  

 

---- 按钮的各种形状是在运行时设置的而不是在设计时设置。设计时按钮的形状仍然是长方形或正方形。 

 

---- 按钮形状的设计分成两个步骤。 

 

---- 第一步创建按钮的外形,即定义窗口区域。使用API的区域创建函数就可达到目的。区域创建函数很多,主要有CreateEllipticRgn CreatePolygonRgn、 CreateRectRgn、 CreateRoundRectRgn,用于创建不同类型的区域显示。如果需要一个复杂区域形状,那么可以分别使用不同的区域函数创建不同的区域,然后调用CombineRgn API函数把它们组合起来。所以说,不仅可以创建出园形、三角形的按钮,而且还可以创建出其它各种形状的按钮。 

 

---- 第二步将区域显示应用到窗口上。一旦使用区域函数创建了一个新的区域显示,就可以使用SetWindowsRgn函数将这个区域应用到窗口上。 

 

 

实现窗口区域的最佳时机是在窗体首次创建时,所以将处理程序放在OnCreate事件中。 

 

 

 

 非规则窗体的制作关键是要得到一个表示这个不规则区域的数据结构,MFC里由CRgn类来表示。要通过图片来获得按钮区域,只需要检测相关的点生成这个类的实例即可。

 

 

 如下所示,直接检测象素点的A分量是否为0,不为0则该点就是窗体区域的一部分。

 

 

已经有了按钮的修理(隐藏按钮,加图片)

不个按钮不显示加个图片,加事件,调用按钮的event..

 

参考:

如何用c++builder做不规则外形的按钮? - CSDN论坛 - CSDN.NET.htm

通过检测png图片透明区实现不规则按钮 - Enin的专栏 博客频道 - CSDN.NET.htm

C++Builder5编制不规则界面精美媒体播放器 计算机理论 道客巴巴.htm