MFC建立简单绘图板

1、VS2010新建MFC单文档程序,项目名称ExMyDT;
2、打开资源视图,为主窗口添加“颜色”、“图形”选项

3、分别设置“颜色”、“图形”子菜单的ID为ID_COLOR_RED、ID_COLOR_GREEN、ID_COLOR_BLUE、ID_COLOR_USER、ID_DRAW_BEELINE、ID_DRAW_ELLIPSE、ID_DRAW_RECT_ZJ、ID_DRAW_RECT_YJ
4、新增对话框资源IDD_DIALOG_COL,用来自定义颜色,对话框ID号要保持一致

5、IDD_DIALOG_COL对话框添加Text Control、Edit Control控件

6、为IDD_DIALOG_COL对话框添加类 CColorUserDlg,继承于CDialog,并为编辑框分别添加三个变量,分别为 m_nRed;m_nGreen; m_nBlue;
7、接下来为ExMyDTView添加几个成员变量,并在构造函数中初始化几个参数

public:CPen myPen;//创建画笔对象COLORREF crColor;//画笔颜色CPoint pFrom;//绘图起始点CPoint pEnd;//绘图终止点int nGraphics;//图形类型编号int NCol;//新建画笔标识int nLD;//鼠标在客户区单击参数int nWelcome;//欢迎消息框标识
CExMyDTView::CExMyDTView(): NCol(0), nLD(0), nWelcome(0)
{// TODO: 在此处添加构造代码}

8、ExMyDTView源文件中包含对话框头文件

#include"ColorUserDlg.h"

9、为“颜色”“图形”的所有菜单项添加消息处理函数在ExMyDTView中

void CExMyDTView::OnDrawBeeline()
{// TODO: 在此添加命令处理程序代码nGraphics=1;
}void CExMyDTView::OnDrawEllipse()
{// TODO: 在此添加命令处理程序代码nGraphics=2;
}void CExMyDTView::OnDrawRectZj()
{// TODO: 在此添加命令处理程序代码nGraphics=3;
}void CExMyDTView::OnDrawRectYj()
{// TODO: 在此添加命令处理程序代码nGraphics=4;
}void CExMyDTView::OnColorRed()
{// TODO: 在此添加命令处理程序代码crColor=RGB(255,0,0);NCol=1;
}void CExMyDTView::OnIdColorGreen()
{// TODO: 在此添加命令处理程序代码crColor=RGB(0,255,0);NCol=1;
}void CExMyDTView::OnIdColorBlue()
{// TODO: 在此添加命令处理程序代码crColor=RGB(0,0,255);NCol=1;
}void CExMyDTView::OnIdColorUser()
{// TODO: 在此添加命令处理程序代码CColorUserDlg cuDlg;cuDlg.DoModal();crColor=RGB(cuDlg.m_nRed,cuDlg.m_nGreen,cuDlg.m_nBlue);NCol=1;
}

10、在ExMyDTView中添加消息处理函数OnLButtonDown

void CExMyDTView::OnLButtonDown(UINT nFlags, CPoint point)
{// TODO: 在此添加消息处理程序代码和/或调用默认值if(NCol==1)//释放原画笔,创建新的画笔{myPen.DeleteObject();myPen.CreatePen(PS_SOLID,1,crColor);NCol=0;}CClientDC dc(this);nLD++;//鼠标每单机两次记录作为图形的起点和终点if(nLD%2==1)//起点{pFrom.x=point.x;pFrom.y=point.y;dc.SetPixel(pFrom.x,pFrom.y,RGB(0,0,0));}else//终点{pEnd.x=point.x;pEnd.y=point.y;dc.SelectObject(&myPen);switch(nGraphics){case 1:dc.MoveTo(pFrom.x,pFrom.y);dc.LineTo(pEnd.x,pEnd.y);break;case 2:dc.Ellipse(pFrom.x,pFrom.y,pEnd.x,pEnd.y);break;case 3:dc.Rectangle(pFrom.x,pFrom.y,pEnd.x,pEnd.y);break;case 4:int rw=(pEnd.x-pFrom.x)/10;int rh=(pEnd.y-pFrom.y)/10;if(rw<0)rw=-rw;if(rh<0)rh=-rh;dc.RoundRect(pFrom.x,pFrom.y,pEnd.x,pEnd.y,rw,rh);break;}dc.SetPixel(pFrom.x,pFrom.y,RGB(255,255,255));nLD-=2;}CView::OnLButtonDown(nFlags, point);
}

11、在启动程序时弹出欢迎界面,在OnDraw中添加

void CExMyDTView::OnDraw(CDC* /*pDC*/)
{CExMyDTDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码if(nWelcome==0)MessageBox("欢迎来到我的绘图板!");nWelcome=1;
}

12、运行程序,绘制出指定的颜色和形状


源码链接:https://pan.baidu.com/s/1d99iPK3ZFxbLJj5gr70mqQ
提取码:1111

注意:因为没有对图形进行重绘,所以窗口更新后绘制内容消失

参考文献:《MFC程序设计轻松入门》欧阳志宏等编著

MFC建立简单绘图板相关推荐

  1. 大二上课程设计作品(简单绘图板+桌面计算器+万年历)

    因为开学前两周忙着做课程设计,所以ACM落下了一段时间,没有再发题解.关于课程设计,本来想是做小游戏的,比如贪吃蛇.但因为电脑是win7系统,不能完全支持TC,再加上某学姐说TC做出来的图形程序一出来 ...

  2. 使用html 语言建立一个简单的网页,如何用记事本建立简单的网页(1).doc

    第九章 网页制作 实验一 用记事本建立简单的HTML文件 [实验目的] 学会用HTML语言建立一个简单的网页. [实验内容] 建立一个网页,布局自定,包括自我介绍.图片.自己的电子信箱地址等,要求在标 ...

  3. Spring和WebSocket整合并建立简单的Web聊天室

    Spring和WebSocket整合并建立简单的Web聊天室 官方主页 Spring WebSocket 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. Web ...

  4. C++之MFC制作简单计算器(VS2019实现),附带完整代码

    资源下载 代码下载 代码失效可以联系本人: 15377920718 效果演示 MFC制作简单的计算器(VS2019实现) VS2019可以用于制作简单的计算器,用的是MFC,通过设立button以及编 ...

  5. 国际象棋简单ai_建立简单国际象棋AI的分步指南

    国际象棋简单ai by Lauri Hartikka 通过劳里·哈蒂卡(Lauri Hartikka) 建立简单国际象棋AI的分步指南 (A step-by-step guide to buildin ...

  6. 【实验练习】请建立简单线性回归模型,实现依据身高预测以为女性的体重,并对模型进行评估和优化。

    题目: 一组women的实验数据,数据内容来自The World Almanac and Book of Facts 1975,该数据集给出了年龄在30-39岁的15名女性的身高和体重数据,主要属性如 ...

  7. 通过Gazebo建立简单室内环境模型并用launch文件打开

    本文叙述如何直接使用Gazebo创建简单室内环境模型,并能够使用launch文件打开 一.利用Gazebo建立好环境模型 1. 打开Gazabo的编辑界面 运行如下命令后按Ctrl+B,进入到编辑界面 ...

  8. Photon教程——建立简单的Photon服务器(二)

    建立简单的Photon服务器(二) 上一篇博文(Photon教程--建立简单的Photon服务器(一))的地址:https://blog.csdn.net/ultramansail/article/d ...

  9. MFC使用简单总结(便于以后查阅)

    一.资源 共有三个和资源有关的文件:资源头文件resource.h.资源描述文件resource.rc和存放在res文件夹下的具体的资源如图片等. 资源头文件中全部是宏定义,应用程序需要为每个资源都定 ...

  10. java简单springboot系统_Springboot系列 3 - 建立简单的用户登录系统

    在开始编码前,先建立几个Package(可以按个人习惯命名),如图 1.Controllers 用于存放控制器类 2.Models 用于存放数据实体类 3.Repositories 用于存放数据库操作 ...

最新文章

  1. 暖通空调系统全面水力平衡解决方案
  2. 日产ftt传感器是什么_日产将发布最牛自动驾驶:选最棒的陪驾,走最快的车道...
  3. CLion 生成CMakeList文件和include文件不存在问题
  4. Java培训分享:零基础怎么学习Java?
  5. 2.6 mailx邮件
  6. 前端必看 | 2D游戏化互动入门基础知识
  7. java中你知道的这四种代码块吗?
  8. 谷爱凌惊“险”一跳,最少价值10个亿!
  9. SQL----常用函数
  10. desc 枚举类型id_想让代码更优雅?Mybatis类型处理器了解一下!
  11. tomcat部署项目启动采坑之UnknownHostException
  12. 那些年,我们一起玩过的响应式布局
  13. IDEA中使用SQLite数据库
  14. java 解析yml文件
  15. 1 如何制定购车计划
  16. 用ssm进行微信开发,实现微信登录验证功能
  17. 射极跟随器的负载加重情况
  18. 图像修复必读的10篇论文
  19. 二进制除法移位相减_二进制除法计算器
  20. 【题库】OBCA认证考试题库(单选部分)

热门文章

  1. 为什么公司不要大龄程序员
  2. 用 Web 技术为 Safari 编写扩展
  3. Tableau中国五城市六年PM2.5数据挖掘
  4. The code contains unhandled characters
  5. 华为平板鸿蒙操作系统,华为平板 MatePad Pro 来了!首搭鸿蒙系统,与电脑“花样”协同…...
  6. 【云IDE】CSDN云IDE的初探以及实战操作
  7. 浅谈 | 日内动量交易策略
  8. 【微信H5开发】the permission value is offline verifying
  9. 微信公众账号自动回复小程序链接
  10. 5G工业无线路由器的优势和应用场景