美文网首页
MFC 圆形控件的实现

MFC 圆形控件的实现

作者: 彦子凡 | 来源:发表于2017-07-06 09:21 被阅读291次

在移动开发中,例如iOS中,如果要实现圆形的控件,很简单的一句layer.setCorner()半径设置为正方形边框的一半即可,这是最简单的方法,也是最low的方法,但是对于初学者来说,好歹是实现了.
  然而,在MFC开发之中,根本就没有这一种方法,这也就是C++卫视比OC要好的原因之一了,因为那种方法有很多弊端,C++就直接不允许那么干了.那么MFC中绘制一个圆形的控件该如何绘制呢,这里我以按钮为例.
  直接就上代码,然后来解析这个代码,这样的方法也许更直接.

void CMyButton::PreSubclassWindow()
{
    //修改属性为可绘制的
    ModifyStyle(0,BS_OWNERDRAW);
    CButton::PreSubclassWindow();
}

void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    //获取cdc对象
    CDC dc;  
    dc.Attach(lpDrawItemStruct->hDC); 
    //背景透明
    dc.SetBkMode(TRANSPARENT);
    //获取矩形区域
    CRect rc = lpDrawItemStruct->rcItem;
    CPen pNewPen;  
    CPen *pOldPen;  
    pNewPen.CreatePen(PS_SOLID,2,RGB(0,255,0));  
    pOldPen = dc.SelectObject(&pNewPen);  
    //画刷
    CBrush fillbrush;  
    CBrush *oldbrush;  
    fillbrush.CreateSolidBrush(RGB(255,0,0));  
    oldbrush = dc.SelectObject(&fillbrush);  

    //画椭圆的函数
    dc.Ellipse(0, 0, rc.Width(), rc.Height()); 
    //文字
    CString str;  
    GetWindowText(str);  
    dc.DrawText(str,CRect(0,0,rc.right,rc.bottom),DT_CENTER | DT_VCENTER | DT_SINGLELINE);  
    dc.DeleteDC();
    fillbrush.DeleteObject();  
    pNewPen.DeleteObject(); 
}

BOOL CMyButton::OnEraseBkgnd(CDC* pDC)
{
    return TRUE;
}

这段是最核心的代码,首先,创建一个新的类继承于CButton,然后添加重载函数PreSubclassWindow()和DrawItem(),加上里面的代码注释,应该可以看得明白.
  技巧就是,画一个矩形去框住原来的按钮,然后再画一个圈去框矩形,去除不要的部分,用画刷图颜色,就可以了.
  在iOS中,也有这样一种绘图的方法来设置圆形的图片,避免比如一个界面一次加载10几个甚至更多的圆形图片的话,用setCorner的话会使得加载的很慢,甚至是运行不了,所以MFC中这种方法也就延伸到了iOS中,有兴趣可以去搜一下.

相关文章

  • MFC 圆形控件的实现

    在移动开发中,例如iOS中,如果要实现圆形的控件,很简单的一句layer.setCorner()半径设置为正方形边...

  • android 圆形进度条

    圆形的进度条,自定义控件实现

  • android圆形头像实现

    今天我们学习圆形头像的实现原理,先上图 基本上能满足一般的圆形头像功能实现其中包括控件的大小,控件四个角的弧度控制...

  • MFC控件布局通用解决方案(转)

    MFC控件布局通用解决方案

  • Android 进度控件

    Android 进度控件 Android 圆形、半圆形进度效果、半圆SeekBar、刻度尺效果实现代码下载:Git...

  • MFC的自定义控件步骤

    MFC的自定义控件 开发环境 vs2015 步骤: 新建一个MFC 工程 在窗口中添加一个自定义控件Toolbox...

  • ProgressBar

    Android控件--ProgressBar 三种方式实现自定义圆形进度条ProgressBar

  • MFC制作位图按钮

    MFC制作位图按钮 前序 学习过MFC的读者应该都知道MFC自带的控件是相当丑陋的,我曾在自带按钮的基础上做了一些...

  • MFC绘图控件

    0

  • 实现波浪圆形进度控件 WaveProgress

    效果图 绘制波浪效果 上图中有4条贝塞尔曲线(当然你也可以利用正弦曲线画,近段时间接触了贝塞尔曲线,所以用它来练手...

网友评论

      本文标题:MFC 圆形控件的实现

      本文链接:https://www.haomeiwen.com/subject/vrochxtx.html