快速业务通道

SWT:实现自我绘制的Button组件 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
top, dis.right - dis.left,dis.bottom - dis.top );    Color clr1 = new Color( getDisplay(), 0, 255, 128 );    Color clr2 = new Color( getDisplay(), 0, 128, 255 );    fillGradientRectangle( dis.hDC, rc, true, clr1, clr2 );    clr1.dispose();    clr2.dispose();    SIZE size = new SIZE();    String text = getText();    char[] chars = text.toCharArray();    int oldFont = OS.SelectObject( dis.hDC, getFont().handle );    OS.GetTextExtentPoint32W( dis.hDC, chars, chars.length, size );    RECT rcText = new RECT();    rcText.left = rc.x;    rcText.top = rc.y;    rcText.right = rc.x + rc.width;    rcText.bottom = rc.y + rc.height;    if ( (dis.itemState & OS.ODS_SELECTED) != 0 )     OS.OffsetRect( rcText, 1, 1 );    OS.SetBkMode( dis.hDC, OS.TRANSPARENT );    OS.DrawTextW( dis.hDC, chars, -1, rcText, OS.DT_SINGLELINE | OS.DT_CENTER | OS.DT_VCENTER );    OS.SelectObject( dis.hDC, oldFont );   }   private void fillGradientRectangle( int handle, Rectangle rc,boolean vertical, Color clr1, Color clr2 )   {    final int hHeap = OS.GetProcessHeap();    final int pMesh = OS.HeapAlloc( hHeap, OS.HEAP_ZERO_MEMORY,GRADIENT_RECT.sizeof + TRIVERTEX.sizeof * 2 );    final int pVertex = pMesh + GRADIENT_RECT.sizeof;    GRADIENT_RECT gradientRect = new GRADIENT_RECT();    gradientRect.UpperLeft = 0;    gradientRect.LowerRight = 1;    OS.MoveMemory( pMesh, gradientRect, GRADIENT_RECT.sizeof );    TRIVERTEX trivertex = new TRIVERTEX();    trivertex.x = rc.x;    trivertex.y = rc.y;    trivertex.Red = (short)(clr1.getRed() << 8);    trivertex.Green = (short)(clr1.getGreen() << 8);    trivertex.Blue = (short)(clr1.getBlue() << 8);    trivertex.Alpha = -1;    OS.MoveMemory( pVertex, trivertex, TRIVERTEX.sizeof );    trivertex.x = rc.x + rc.width;    trivertex.y = rc.y + rc.height;    trivertex.Red = (short)(clr2.getRed() << 8);    trivertex.Green = (short)(clr2.getGreen() << 8);    trivertex.Blue = (short)(clr2.getBlue() << 8);    trivertex.Alpha = -1;    OS.MoveMemory( pVertex + TRIVERTEX.sizeof, trivertex, TRIVERTEX.sizeof );    boolean success = OS.GradientFill( handle, pVertex, 2, pMesh, 1,vertical ? OS.GRADIENT_FILL_RECT_V : OS.GRADIENT_FILL_RECT_H );    OS.HeapFree( hHeap, 0, pMesh );    if ( success )     return;   }   @Override   protected void checkSubclass()   {} }

SWT:实现自我绘制的Button组件(3)

时间:2011-01-05

如果你使用的是JDK 1.4或者更低的版本,请把@Override标记去掉以后才能编译,因为这是一个Java 5.0中才有的特性。此外,我重载了checkSubclass方法并提供了一个空的实现;如果不这么做的话,那么SWT在默认情况下是不允许你从Button类继承的。

这个地方请允许我稍稍跑一下题。上面代码中的fillGradientRectangle方法——从它的名字你大概可以猜到,这个方法的作用是画出一个渐变色的矩形区域。我是从GC.fillGradientRectangle中“偷”来的代码,针对按钮类作了一些修改就可以了。让我感到讶异的是,在整理这段代码的时候,我发现从

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号