“异形”按钮非常有趣,就是按钮的形状不是标准的长方形或正方形,而有一丝“叛逆”——“异形”嘛,是不是?怎样才能实现“异形”按钮呢?由于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)点是按钮的最左上角,而(宽,高)点是按钮的最右下角。

应该注意的是,一旦将区域句柄赋给按钮,就不能再对区域句柄作任何操作。如果将区域句柄赋给按钮后,修改或删除这个句柄将导致程序崩溃,所以……千万不要这样做,否则,你的程序虽然花哨了一些,但却是“拾了芝麻丢了西瓜”而因小失大!说到这里,考试大提示程序设计首先要注意“稳定性”,至于其它的都次要。

C++:C++Builder中异形按钮的实现.doc

下载Word文档到电脑,方便收藏和打印[全文共1271字]

编辑推荐:

下载Word文档

android 异形button,C++:C++Builder中异形按钮的实现相关推荐

  1. (android控件)ListView的Item中设置按钮实现

    前言 在项目的开发过程中,需要Listview的Item中包含按钮的效果.在实际开发过,Item中放置按钮后,ListView 单行选择背景颜色变化的效果没有了. 问题原因 ListView 和 其它 ...

  2. android去掉button的边框,css中如何去掉button(按钮)的边框

    用新的边框我们先要除去旧的边框才可以,然后再给他加上新边框,如下: 一,先除去: 1,看下默认样式效果,如图可以看到,默认padding和border,字体大小也是受浏览器默认指定 2,去除paddi ...

  3. android点击按钮打开自带浏览器,android – 如何在默认浏览器或webview中打开按钮单击URL...

    如何在单击按钮后在Webview或默认浏览器中打开网址?目前,当我点击btn1按钮时,它会提示我从手机中选择一个浏览器.我想在默认浏览器或webview中打开此URL. 这是我的java代码: pub ...

  4. 结构建模设计——Solidworks软件之特征成型中异形孔向导和线性阵列功能实战总结

    [系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <QT开发实战> <嵌入式通用开发实战> <从0到1学习嵌入式Linux开发> <A ...

  5. android按钮点击toast,关于button点击事件中setOnClick等元素的解读以及方法?以及toast的位置以及作用?...

    此文末参考链接: 此段代码的教程以及使用接口的方式.switch语句的教程链接为链接1. 汇总里说的有更多的实现方法,为链接2. 文中链接为视觉统一,链接均于文末,以上为方便文中跳转,加了文中的跳转链 ...

  6. android中给button加图标,Android,如何在我的代码中的TabButton中添加图标

    在这里,我制作了5个工作正常的Tab按钮,但现在我想为每个Tab添加图标,如何相对于Tab按钮添加Tab图标-.请指导/帮助我. 我第一次使用stackOverflow,请告诉我在发布此代码时是否错过 ...

  7. Unity3d中异形屏的适配

    Unity3d中异形屏的适配 参考博客:unity - 屏幕适配(异形屏) - 赵不灰 - 博客园

  8. android添加图片按钮,如何给Android中的按钮添加图片功能

    在layout中建一个my_login.xml文件 代码如下 android:layout_width="fill_parent" android:layout_height=&q ...

  9. Android 平台应用软件开发(学习中)

    Android 中的五种布局 1,LinearLayout(线性布局),RelativeLayout(相对布局),FrameLayout(帧布局),AbsoluteLayout(绝对布局),Table ...

最新文章

  1. 装逼一步到位!GauGAN代码解读来了
  2. Google Deepmind大神David Silver带你认识强化学习
  3. 为什么你应该停止阅读新闻?
  4. linux last 命令年份,【帝联运维课堂】(第七十二期)Linux下last命令如何显示年份...
  5. 【python 图像处理】skimage的子模块介绍
  6. poj 2749 2-SAT问题
  7. 7-102 单词首字母大写 (15 分)
  8. 转-登录功能通用测试用例设计
  9. 在Windows Server 2016和SQL Server Always On可用性组上安装SQL Server 2019
  10. 橡胶软接头的安装及使用说明
  11. Python和MD5网站挂马检测程序
  12. java中cleanup的使用_java – google guava缓存invalidateAll()和cleanUp()之间的区别
  13. Fullpage.js version 3 has changed its license to GPLv3 and it requires a `licenseKey` option ...
  14. 高中数学复习知识清单
  15. Android手写签名
  16. 区别重要的事情及不要盲目增加计划提前期
  17. Eclipse 自定义${date}变量格式的思路历程
  18. 指尖江湖李忘生鸿蒙初开,剑网3指尖江湖李忘生怎么样_李忘生装备搭配、技能特性、解锁方法介绍_游戏吧...
  19. D35 Spark源代码(待补充)
  20. js替换关键词为链接,只替换一次,要避开超链接或图片

热门文章

  1. android系统怎么删,安卓手机怎么删除和清理系统垃圾
  2. appstore 登录不上去
  3. Nvidia TX2 外设
  4. 如何从Ubuntu软件存储库外部安装软件
  5. PCM A律μ律编码
  6. Ubuntu 18 上不了网解决方法
  7. SCI相关,写作、发表、检索、英语润色等
  8. PMP报考相关详细内容整理
  9. 一文带你由浅入深地解读 Go Zap 的高性能
  10. MarbleGame优化解法