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. does not declare uses-library android.test.runner
  2. CentOS7下查询硬件信息
  3. 解析XML的4种方式及优缺点比较
  4. 重学JavaScript(1)--JavaScript简介
  5. 增加关系型数据库驱动配置同步任务
  6. 分析windows宿主机Ping不通linux虚拟机的其中一种情况
  7. mysql查看触发器_在mysql中如何查看和修改触发器的代码?请问各位大师,小弟先谢谢了!!!!!!!!!...
  8. 华为帮助摩洛哥成为全球第一个5G全覆盖的国家
  9. 使用face-api和Tensorflow.js进行预训练的AI情绪检测
  10. java中的POJO、PO、VO分别是什么?
  11. 微信支付:nginx配置 网页授权域名 用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。
  12. Vue.js如何搭建本地dev server
  13. 来自IT公司速查手册的各大IT公司薪资和待遇内幕
  14. python实现算法改进_运动目标检测vibe算法及其改进Python实现
  15. WinHttp用法(WinHttp.WinHttpRequest.5.1)
  16. ros2 nav2 行为树插件引擎原理和应用
  17. Android 2 时代到来了,敢为天下先是我等求知若渴的程序员的优秀品质
  18. [BUG 记录] Ubuntu下Tesla M40与其他N卡共存安装
  19. win10修改用户名(中文用户改为英文名)切换administrators管理员用户
  20. 直击文印痛点 中小企业需要这样一台复合机

热门文章

  1. 35岁的大龄程序员都去哪里了?
  2. B-spline Surfaces
  3. 姜汝祥是个骗子吗_我是个骗子你是?
  4. 设置树莓派屏幕常亮,禁止树莓派屏幕休眠
  5. 【跟我一起学Linux之Ubuntu】-概述与安装配置笔记
  6. mysql redo,MySQL 8.0 redo log的深入解析
  7. 从“H1N1病毒”看危机意识的重要性
  8. iMeta | 北大陈峰/陈智滨等发表口腔微生物组研究中各部位取样的实验方法(Protocol)...
  9. 重构碎片化知识_黄建锋:碎片化学习策略研究
  10. eclipse多线程调试