• 圆形按钮


    Sample Image

    介绍

    我想要一个看起来和普通按钮一模一样的按钮,但是我想要它们是圆形的。这个类可以像任何其他所有者绘制控件一样使用——只需包含头文件,并将按钮控件声明为CRoundButton而不是CButton

    首先,我确定按钮是圆的(而不是椭圆),并存储中心和半径的按钮。接下来我只是让按钮所有者画和画的像其他所有者drwn按钮,而是能够使用像Draw3dRect好例程,我不得不自己动手丰衣足食圆绘图程序会吸引每个像素使用正确的颜色取决于圆上的点我画画。

    我将不包括在这个页面的全部源代码-它可以在这里下载。所有者绘制部分是简单的,并遵循任何其他所有者绘制按钮的线。画圆程序是一个标准的算法,只有在计算像素颜色时做了修改。给定两种颜色crBright和crDark,以及相对于x轴的角度,像素的颜色可以使用以下方法计算。

    COLORREF GetColour(double dAngle, COLORREF crBright, COLORREF crDark)
    {
    #define Rad2Deg            180.0/3.1415 
    #define LIGHT_SOURCE_ANGLE  -2.356    // -2.356 radians = -135 degrees, 
                                          // i.e. From the top left of the screen
    
        ASSERT(dAngle > -3.1416 && dAngle < 3.1416);
        double dAngleDifference = LIGHT_SOURCE_ANGLE - dAngle;
    
        if (dAngleDifference < -3.1415) 
            dAngleDifference = 6.293 + dAngleDifference;
        else if (dAngleDifference > 3.1415) 
            dAngleDifference = 6.293 - dAngleDifference;
    
        double Weight = 0.5*(cos(dAngleDifference)+1.0);
    
        BYTE Red   = (BYTE) (Weight*GetRValue(crBright) + 
                            (1.0-Weight)*GetRValue(crDark));
        BYTE Green = (BYTE) (Weight*GetGValue(crBright) + 
                            (1.0-Weight)*GetGValue(crDark));
        BYTE Blue  = (BYTE) (Weight*GetBValue(crBright) + 
                            (1.0-Weight)*GetBValue(crDark));
    
        return RGB(Red, Green, Blue);
    }

    这是基于光源和点之间夹角的余弦在两种颜色之间的简单线性插值。角度从+ve x轴开始测量(即(1,0)= 0度,(0,1)= 90度),但是记住:正的y点向下!

    更新

    Tom Kalmijn好心地增加了一些程序,对按钮图像进行后期处理,以平滑锯齿状的边缘。他的方法使用最近邻算法来插值缺失的像素。它不是特别快,但确实增加了平滑。

    本文转载于:http://www.diyabc.com/frontweb/news14640.html

  • 相关阅读:
    ffmpeg 日志系统av_log()
    语音识别哪家强 讯飞 搜狗 百度 阿里还是腾讯
    利用FFmpeg切割视频
    网易云音乐 抓取成功,按评论数排序
    python from import 自定义模块
    使用Fiddler调试线上JS代码
    sublime text 格式化html css 与显示函数列表
    微信硬件(四)调试工具
    微信硬件平台(三) 菜单开发
    微信硬件(三)
  • 原文地址:https://www.cnblogs.com/Dincat/p/13488393.html
Copyright © 2020-2023  润新知