MFC绘图的几种方法

/*

1.可以使用OnDraw()函数直接绘图;

2.使用菜单绘图(添加菜单——添加菜单函数(消息映射函数))

3.自定义函数绘图(添加成员函数——可以在OnDraw()函数调用,也可以在菜单函数里调用)

4.工具条设计(实现图标和子菜单关联)

*/

1.可以使用OnDraw()函数直接绘图;

/
// CTestView drawing
 
void CTestView::OnDraw(CDC* pDC)
{
    CTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
 
    CRect rect;
    GetClientRect(&rect);
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetWindowExt(rect.Width(),rect.Height());
    pDC->SetViewportExt(rect.Width(),-rect.Height());
    pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);
    rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);
    CPoint ld,rt;//
 
    //绘制外部黑色椭圆
    ld=CPoint(-200,-150),rt=CPoint(200,150);
    CBrush NewBrush, *pOldBrush;
    NewBrush.CreateSolidBrush(RGB(0,0,0));
    pOldBrush=pDC->SelectObject(&NewBrush);
    pDC->Ellipse(CRect(ld,rt));
    pDC->SelectObject(pOldBrush);
    NewBrush.DeleteObject();
 
    //绘制白色外部圆
    ld=CPoint(-147,-147),rt=CPoint(147,147);
    pDC->Ellipse(CRect(ld,rt));
 
    //绘制内部黑色椭圆
    ld=CPoint(-140,-90),rt=CPoint(140,90);
    NewBrush.CreateSolidBrush(RGB(0,0,0));
    pOldBrush=pDC->SelectObject(&NewBrush);
    pDC->Ellipse(CRect(ld,rt));
    pDC->SelectObject(pOldBrush);
    NewBrush.DeleteObject();
 
    //绘制白色内部圆
    ld=CPoint(-88,-88),rt=CPoint(88,88);
    pDC->Ellipse(CRect(ld,rt));
    
 
}

2.使用菜单绘图(添加菜单——添加菜单函数(消息映射函数))

void CTestView::OnMdraw() 
{
    // TODO: Add your command handler code here
    CDC * pDC=GetDC();//初始化指针pDC
    
    /*添加上一种方法的代码*/
 
    ReleaseDC(pDC);//释放指针
    
}
3.自定义函数绘图

void CTestView::DrawObject(CDC *pDC)
{
    CRect rect;
    GetClientRect(&rect);
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetWindowExt(rect.Width(),rect.Height());
    pDC->SetViewportExt(rect.Width(),-rect.Height());
    pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);
    rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);
    CPoint ld,rt;//
 
    //绘制外部黑色椭圆
    ld=CPoint(-200,-150),rt=CPoint(200,150);
    CBrush NewBrush, *pOldBrush;
    NewBrush.CreateSolidBrush(RGB(0,0,0));
    pOldBrush=pDC->SelectObject(&NewBrush);
    pDC->Ellipse(CRect(ld,rt));
    pDC->SelectObject(pOldBrush);
    NewBrush.DeleteObject();
 
    //绘制白色外部圆
    ld=CPoint(-147,-147),rt=CPoint(147,147);
    pDC->Ellipse(CRect(ld,rt));
 
    //绘制内部黑色椭圆
    ld=CPoint(-140,-90),rt=CPoint(140,90);
    NewBrush.CreateSolidBrush(RGB(0,0,0));
    pOldBrush=pDC->SelectObject(&NewBrush);
    pDC->Ellipse(CRect(ld,rt));
    pDC->SelectObject(pOldBrush);
    NewBrush.DeleteObject();
 
    //绘制白色内部圆
    ld=CPoint(-88,-88),rt=CPoint(88,88);
    pDC->Ellipse(CRect(ld,rt));
 
}
两种方式调用

(1)在OnDraw()函数里面调用

// CTestView drawing
 
void CTestView::OnDraw(CDC* pDC)
{
    CTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
 
        DrawObject(pDC);
 
}
(2)在菜单函数里面调用

// CTestView message handlers
 
void CTestView::OnMdraw() 
{
    // TODO: Add your command handler code here
    CDC * pDC=GetDC();//初始化指针pDC
    
    DrawObject(pDC);
 
    ReleaseDC(pDC);//释放指针
    
}

4.工具条设计(实现图标和子菜单关联)

5、运行结果

原文:https://blog.csdn.net/lanyandong/article/details/80290691

MFC绘图的几种方法相关推荐

  1. 从源码分析DEARGUI之动态绘图的两种方法

    from dearpygui.dearpygui import * import numpy as npdef addButtons(*args):add_button("添加的按钮1&qu ...

  2. python 大数据量绘图_Matplotlib绘图遇到时间刻度就犯难?现在,一次性告诉你四种方法...

    点击上方"蓝字"关注我们 Python大数据分析 记录   分享   成长 添加微信号" CNFeffery "加入技术交流群 最近有小伙伴私信我关于matpl ...

  3. Matpotlib绘图遇到时间刻度就犯难?现在,一次性告诉你四种方法

    公众号后台回复"图书",了解更多号主新书内容 作者:宁海涛 来源:DataCharm 点击蓝字 关注我们 最近有小伙伴私信我关于matplotlib时间类型刻度的设置问题,第一感觉 ...

  4. MFC中获取命令行参数的几种方法

    在MFC程序中,可以用以下几种方法来获取命令行参数. 为方便说明,我们假设执行了命令:C:/test/app.exe -1 -2 方法一 ::GetCommandLine(); 将获取到 " ...

  5. 两种方法查看MFC源代码

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 第一种- ...

  6. MFC实现从一个窗口向另一个窗口发送消息的两种方法

    实现从一个窗口向另一个窗口发送消息,使用过下面两种方法 /*方法一:通过用SDK的标准API来查找其他对话框窗口返回句柄,并且发送信息 HWND hWnd; //通过SDK的FindWindow函数得 ...

  7. MFC多语言实现的两种方法

    前不久由于工作需要,用新工具Passolo制作软件的英文版,顺便回顾了一下以前一直用的老方法--动态加载英文资源的DLL.今天有空整理了一下,与大家分享两种方法是如何实现软件多语言的. 方法一:动态加 ...

  8. android 8 忘记图案,手机绘图解锁忘了怎么办?三种方法教你轻松搞定

    现在市场上的智能手机基本上都带有九宫格锁屏,这样的设计受到了广大用户们的喜爱,渐渐的成为了用户们的不二选择,当然这个锁屏的优点有很多,但是唯一不足的地方就是一旦忘记图案密码就会让人想抓狂.手机绘图解锁 ...

  9. python简单绘图步骤_python画图的两种方法

    python如何画图?这里给大家介绍两款python绘图的库:turtle和Matplotlib. 1 安装turtle Python2安装命令:pip install turtule Python3 ...

最新文章

  1. 数据库创建索引的原则
  2. C#题目及答案(1)
  3. Mongo 与 SQL 操作对应介绍
  4. 阅读《软件工程—理论方法与实践》第五章心得体会
  5. 电脑蓝屏分析教程,附工具WinDbg(x86 x64)6.12.0002.633下载
  6. 计算机固态硬盘作用,固态硬盘是什么及作用
  7. 《ZLToolKit源码学习笔记》(17)网络模块之基础接口封装类SockUtil
  8. 网络文学网站的盈利模式分析
  9. you-get和youtube-dl下载全网视频
  10. “云”溪笔谈 | VR——看得见的未来
  11. 特斯拉如何开发基于纯视觉的深度学习系统
  12. xshell如何将Windows文件上传到linux
  13. 记录一次mongoDB错误 errmsg: cannot use the part () to traverse the element
  14. 如何在win10的windows Defender中添加信任文件,使其免遭误删除的厄运
  15. 两个小Tips: 解决Matlab初始化时间过长Office使用(KMS工具无效时)
  16. C++11 in Qt-安晓辉-专题视频课程
  17. python画柱状图怎么规定x轴_Python:Matplotlib 画曲线和柱状图(Code)
  18. 自动驾驶学习过程及资料整理
  19. BZOJ2095[Poi2010] Bridges
  20. android10动态显示隐藏导航栏,状态栏

热门文章

  1. 单片机中断程序实例_单片机定时器中断实现长时间定时程序
  2. python学习-列表解析、字典解析
  3. profile matlab,使用profile功能对Matlab性能调优
  4. 服务器虚拟交换机到网卡不通,S7700堆叠,服务器之间相互ping不通,关闭备交换机ping正常...
  5. python写ui自动化测试用例_自动化测试(6) | Web UI 自动化测试方案
  6. 通俗易懂,嵌入式Linux驱动基础
  7. 计算机专业哪家强,计算机专业哪家强?这4所大学水平一流,网友:都是“大佬”级别...
  8. css-net 中华版,使用C#代码选择CSS样式(ASP.net)
  9. 影之刃3服务器维护,影之刃3手游2021年3月11日维护公告_影之刃3手游2021年3月11日更新了什么_玩游戏网...
  10. SSD浅层网络_目标检测SSD