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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于SWT:实现自我绘制的Button组件 - 编程入门网的所有评论