您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  C++Builder中异形按钮的实现 【注册男护士专用博客】          

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

www.nanhushi.com     佚名   不详 

  “异形”按钮非常有趣,就是按钮的形状不是标准的长方形或正方形,而有一丝“叛逆”——“异形”嘛,是不是?怎样才能实现“异形”按钮呢?由于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)点是按钮的最左上角,而(宽,高)点是按钮的最右下角。
  应该注意的是,一旦将区域句柄赋给按钮,就不能再对区域句柄作任何操作。如果将区域句柄赋给按钮后,修改或删除这个句柄将导致程序崩溃,所以……千万不要这样做,否则,你的程序虽然花哨了一些,但却是“拾了芝麻丢了西瓜”而因小失大!说到这里,我想,程序设计首先要注意“稳定性”,至于其它的都次要。来源:考

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。