介绍 CPolyBtn是一个简单的CButton衍生工具,允许你创建按钮,不是矩形或圆形或任何其他典型的几何形状;使用CPolyBtn,您可以通过提供一系列定义多边形的点来指定按钮形状。 它能做什么? CPolyBtn做所有正常按钮的事情:翻转,位图,工具提示,焦点颜色,填充颜色,禁用颜色,等等。 我怎么使用它? 你在对话框上创建一个按钮,然后创建一个CPolyBtn类型的成员变量。你知道,标准的东西。然后,在CDialog的InitInstance中,在调用CDialog::InitInstance之前,创建CPoint对象的std::vector,每个多边形点一个,这些点按顺时针顺序排列,然后将这个向量分配给CPolyBtn。CPolyBtn将确定每条边的高亮和阴影颜色,设置区域并处理其他一切。 隐藏,复制Code
// make a triangle button std::vector<CPoint> 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还提供了一种方法来手动指定每条边的颜色(普通的、高亮的、聚焦的、禁用的等等)。当然,这种方法需要更多的工作。但如果你需要这么大的控制权,还有一个选择。 其他选项 隐藏,复制Code
// 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日:初始版本 许可证 本文没有附带明确的许可,但可能包含文章文本或下载文件本身的使用条款。如果有疑问,请通过下面的讨论区联系作者。可以在这里找到作者可能使用的许可证列表。 本文转载于:http://www.diyabc.com/frontweb/news450.html