频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源: 作者: 出处:巧巧读书 2007-10-09 进入讨论组
下一页 1 2 

  “异形”按钮非常有趣,就是按钮的形状不是标准的长方形或正方形,而有一丝“叛逆”——“异形”嘛,是不是?怎样才能实现“异形”按钮呢?

由于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);
   }

查看 http://www.qqread.com/bcb/p351968.html 更多文章 更多内容请看C/C++技术专题专题,或进入讨论组讨论。
下一页 1 2 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章