zoukankan      html  css  js  c++  java
  • PolyBtn,一个多边形按钮类

    介绍 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

  • 相关阅读:
    django with mysql (part-4)
    django with mysql (part-3)
    django with mysql (part-2)
    [LeetCode] 22. 括号生成(回溯/DP)
    [算法]求满足要求的进制(辗转相除(欧几里得算法),求最大公约数gcd)
    [算法]体积不小于V的情况下的最小价值(0-1背包)
    [LeetCode]96. 不同的二叉搜索树(DP,卡特兰数)
    [LeetCode]98. 验证二叉搜索树
    [LeetCode]21. 合并两个有序链表(递归)
    [LeetCode]538. 把二叉搜索树转换为累加树
  • 原文地址:https://www.cnblogs.com/Dincat/p/13450127.html
Copyright © 2011-2022 走看看