java实现多边形按钮_PolyBtn,一个多边形按钮类

c83d74ce0ef2a2d9cce1a96aaf4d8f73.gif

介绍

CPolyBtn是一个简单的CButton衍生工具,允许你创建按钮,不是矩形或圆形或任何其他典型的几何形状;使用CPolyBtn,您可以通过提供一系列定义多边形的点来指定按钮形状。

它能做些什么呢?

CPolyBtn做所有正常按钮的事情:翻转,位图,工具提示,焦点颜色,填充颜色,禁用颜色,等等。

我怎么使用它?

你在对话框上创建一个按钮,然后创建一个CPolyBtn类型的成员变量。你知道,标准的东西。然后,在CDialog的InitInstance中,在调用CDialog::InitInstance之前,创建CPoint对象的std::vector,每个多边形点一个,这些点按顺时针顺序排列,然后将这个向量分配给CPolyBtn。CPolyBtn将确定每条边的高亮和阴影颜色,设置区域并处理其他一切。

隐藏,复制代码

//make a triangle button

std::vector pts;

const int triEdgeSize = 16;

pts.push_back(CPoint(0,0));

pts.push_back(CPoint(triEdgeSize,0));

pts.push_back(CPoint(0,triEdgeSize));

m_zoomInBtn.SetPoints(pts);

m_zoomInBtn.SetBMPOffset(2,2);

m_zoomInBtn.SetBMPID(IDB_ZOOM_IN, RGB(255,255,255), IDB_ZOOM_IN_DISABLED,

RGB(255,255,255));

此时,您还可以添加位图、设置文本位置等。

对于那些需要控制的用户,CPolyBtn还提供了一种方法来手动指定每条边的颜色(普通的、高亮的、聚焦的、禁用的等等)。当然,这种方法需要更多的工作。但如果你需要这么大的控制权,还有一个选择。

其他选项

隐藏,复制代码

//optionally set the colors used.

void SetColors(COLORREF highlight, COLORREF down, COLORREF focus,

COLORREF disabled, COLORREF rollover);

//set the color to fill with. default ::GetSysColor(COLOR_BTNFACE);

void SetFillColor(COLORREF fillClr);

//draw bitmap at this offset

void SetBMPOffset(int x, int y);

//draw window text at this offset

void SetTextOffset(int x, int y);

//optional tooltip

void SetTooltipText(LPCTSTR lpszText, BOOL bActivate = TRUE);

void ActivateTooltip(BOOL bEnable = TRUE);

//when using the SetPoints method, you can decide to highlight lines

//that are more than -45 degrees below horizontal (default false)

void AllowHighlightOnGtrNeg45(bool b);

//should the button change color when the mouse moves over ? (default false)

void AllowRollover(bool b);

问题

一般来说,我不太喜欢画边的方式。因为没有缩小多边形的好方法,所以很难像普通的按钮那样画出按钮的边缘,因为按钮的边缘实际上是两条平行线,但颜色不同。所以,这里的边总是一个像素宽。这个问题的另一个例子是在“焦点”渲染中:通常,按钮焦点是通过在边框内绘制一个虚线矩形来表示的。但是,由于没有简单的方法来确定“内部”对所有任意多边形意味着什么,CPolyBtn就不麻烦了;它通过使用PS_DOT钢笔样式绘制边缘来处理焦点。(当然,有很多复杂的方法可以找到一个多边形的内部,但这比我想要做的更多,而且我也不需要它)。

无论如何……

如果你有任何改进,欢迎分享!

记住,要善待对方。

历史

2003年2月24日:初始版本

许可证

本文没有附带明确的许可,但可能包含文章文本或下载文件本身的使用条款。如果有疑问,请通过下面的讨论区联系作者。可以在这里找到作者可能使用的许可证列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值