MFC建立简单绘图板
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建立简单绘图板相关推荐
- 大二上课程设计作品(简单绘图板+桌面计算器+万年历)
因为开学前两周忙着做课程设计,所以ACM落下了一段时间,没有再发题解.关于课程设计,本来想是做小游戏的,比如贪吃蛇.但因为电脑是win7系统,不能完全支持TC,再加上某学姐说TC做出来的图形程序一出来 ...
- 使用html 语言建立一个简单的网页,如何用记事本建立简单的网页(1).doc
第九章 网页制作 实验一 用记事本建立简单的HTML文件 [实验目的] 学会用HTML语言建立一个简单的网页. [实验内容] 建立一个网页,布局自定,包括自我介绍.图片.自己的电子信箱地址等,要求在标 ...
- Spring和WebSocket整合并建立简单的Web聊天室
Spring和WebSocket整合并建立简单的Web聊天室 官方主页 Spring WebSocket 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. Web ...
- C++之MFC制作简单计算器(VS2019实现),附带完整代码
资源下载 代码下载 代码失效可以联系本人: 15377920718 效果演示 MFC制作简单的计算器(VS2019实现) VS2019可以用于制作简单的计算器,用的是MFC,通过设立button以及编 ...
- 国际象棋简单ai_建立简单国际象棋AI的分步指南
国际象棋简单ai by Lauri Hartikka 通过劳里·哈蒂卡(Lauri Hartikka) 建立简单国际象棋AI的分步指南 (A step-by-step guide to buildin ...
- 【实验练习】请建立简单线性回归模型,实现依据身高预测以为女性的体重,并对模型进行评估和优化。
题目: 一组women的实验数据,数据内容来自The World Almanac and Book of Facts 1975,该数据集给出了年龄在30-39岁的15名女性的身高和体重数据,主要属性如 ...
- 通过Gazebo建立简单室内环境模型并用launch文件打开
本文叙述如何直接使用Gazebo创建简单室内环境模型,并能够使用launch文件打开 一.利用Gazebo建立好环境模型 1. 打开Gazabo的编辑界面 运行如下命令后按Ctrl+B,进入到编辑界面 ...
- Photon教程——建立简单的Photon服务器(二)
建立简单的Photon服务器(二) 上一篇博文(Photon教程--建立简单的Photon服务器(一))的地址:https://blog.csdn.net/ultramansail/article/d ...
- MFC使用简单总结(便于以后查阅)
一.资源 共有三个和资源有关的文件:资源头文件resource.h.资源描述文件resource.rc和存放在res文件夹下的具体的资源如图片等. 资源头文件中全部是宏定义,应用程序需要为每个资源都定 ...
- java简单springboot系统_Springboot系列 3 - 建立简单的用户登录系统
在开始编码前,先建立几个Package(可以按个人习惯命名),如图 1.Controllers 用于存放控制器类 2.Models 用于存放数据实体类 3.Repositories 用于存放数据库操作 ...
最新文章
- does not declare uses-library android.test.runner
- CentOS7下查询硬件信息
- 解析XML的4种方式及优缺点比较
- 重学JavaScript(1)--JavaScript简介
- 增加关系型数据库驱动配置同步任务
- 分析windows宿主机Ping不通linux虚拟机的其中一种情况
- mysql查看触发器_在mysql中如何查看和修改触发器的代码?请问各位大师,小弟先谢谢了!!!!!!!!!...
- 华为帮助摩洛哥成为全球第一个5G全覆盖的国家
- 使用face-api和Tensorflow.js进行预训练的AI情绪检测
- java中的POJO、PO、VO分别是什么?
- 微信支付:nginx配置 网页授权域名 用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。
- Vue.js如何搭建本地dev server
- 来自IT公司速查手册的各大IT公司薪资和待遇内幕
- python实现算法改进_运动目标检测vibe算法及其改进Python实现
- WinHttp用法(WinHttp.WinHttpRequest.5.1)
- ros2 nav2 行为树插件引擎原理和应用
- Android 2 时代到来了,敢为天下先是我等求知若渴的程序员的优秀品质
- [BUG 记录] Ubuntu下Tesla M40与其他N卡共存安装
- win10修改用户名(中文用户改为英文名)切换administrators管理员用户
- 直击文印痛点 中小企业需要这样一台复合机
热门文章
- 35岁的大龄程序员都去哪里了?
- B-spline Surfaces
- 姜汝祥是个骗子吗_我是个骗子你是?
- 设置树莓派屏幕常亮,禁止树莓派屏幕休眠
- 【跟我一起学Linux之Ubuntu】-概述与安装配置笔记
- mysql redo,MySQL 8.0 redo log的深入解析
- 从“H1N1病毒”看危机意识的重要性
- iMeta | 北大陈峰/陈智滨等发表口腔微生物组研究中各部位取样的实验方法(Protocol)...
- 重构碎片化知识_黄建锋:碎片化学习策略研究
- eclipse多线程调试