C++基础语言熟悉---简单画板绘制
C++基础语言熟悉—简单画板绘制
*介绍
学一门语言最好的方法就是通过各种项目实战来巩固基础语法,使之烂熟于指尖!
小白第一次模仿创作,如有错误及更好的补充还请各位不吝赐教!
代码分析
1.创建窗口
2.画板操作(坐标获取 执行操作)
3.按钮操作(功能栏设计)
效果展示
/窗口设计/
class Window
{private:int _width;int _height;
public:Window(int w, int h, int flag = 0) :_width(w), _height(h) {initgraph(w, h, flag);};/*返回窗口状态*/int exec() {return system("pause");}~Window(){closegraph();}
public:**/*设计窗口标题*/**void setTitle(const char* title) {SetWindowText(GetHWnd(), title); /*GetHwan为获得窗口句柄*/}/*获取窗口的高度以及宽度*/static int GetWidth() { return getwidth(); }static int GetHeight() { return getheight(); }};
/坐标获取/
class GetCoordinate
{public:GetCoordinate() {};GetCoordinate(int x, int y) :x(x), y(y) {};int x;int y;static GetCoordinate ZERO;
};
GetCoordinate GetCoordinate::ZERO = GetCoordinate(0, 0);
/画笔操作/
class Paint
{public:static void drawRect(const GetCoordinate& p, int Back, int h, COLORREF color = getfillcolor()){setfillcolor(color);solidrectangle(p.x, p.y, p.x + Back, p.y + h);}static void drawLine(const GetCoordinate& p1, const GetCoordinate& p2, COLORREF color = getlinecolor(), int lineSize = 1){setlinestyle(PS_COSMETIC, lineSize);setlinecolor(color);line(p1.x, p1.y, p2.x, p2.y);}static void drawText(int x, int y, const char* text, COLORREF color = gettextcolor(), int textSize = 26){setbkmode(TRANSPARENT);settextcolor(color);settextstyle(textSize, 0, "黑体");outtextxy(x, y, text);}static void drawText(int x, int y, int text, COLORREF color = gettextcolor(), int textSize = 26){char lineSizeStr[10] = "";sprintf_s(lineSizeStr, "%d", text);Paint::drawText(x, y, lineSizeStr, color, textSize);}static void drawCircle(const GetCoordinate& p, int Back, int h, COLORREF color = getfillcolor()){setfillcolor(color);solidellipse(p.x, p.y, p.x + Back, p.y + h);}
};class Sketchpad :public Tools
{public:Sketchpad() {}Sketchpad(int x, int y, int Back, int h):Tools(x, y, Back, h), color(BLACK), lineSize(1){this->isDown = false;this->begPos = GetCoordinate(0, 0);}bool ProcessMsg(MOUSEMSG& msg){switch (msg.uMsg){case WM_LBUTTONDOWN:if (isIn(GetCoordinate(msg.x, msg.y))){isDown = true;begPos = GetCoordinate(msg.x, msg.y);}break;case WM_LBUTTONUP:isDown = false;break;case WM_MOUSEWHEEL: //滚轮调整字体大小lineSize = msg.wheel > 0 ? lineSize + 1 : lineSize - 1;if (lineSize <= 0){lineSize = 1;}break;case WM_MOUSEMOVE: //画线if (isDown){if (isIn(begPos) && isIn(GetCoordinate(msg.x, msg.y))) // 起始点和结束点都在区域内{Paint::drawLine(begPos, GetCoordinate(msg.x, msg.y), color, lineSize);}begPos = GetCoordinate(msg.x, msg.y);}break;case WM_RBUTTONDOWN: //清屏Paint::drawRect(GetCoordinate::ZERO, Window::getW() - 100, Window::getH(), WHITE); //绘图区域break;}return false;}
public:int getLineSize(){return lineSize;}void setColor(COLORREF color){this->color = color;}
private:int lineSize; //线条宽度COLORREF color; //线条颜色bool isDown; //鼠标是否按下GetCoordinate begPos; //记录上一个点的坐标
};
/继承基础/
class Tools
{public:Tools() {};Tools(int x, int y, int Back, int h):leftTop(x, y), width(Back), height(h){}//鼠标是否在控件上bool isIn(const GetCoordinate& p){if (p.x >= leftTop.x && p.x <= leftTop.x + width &&p.y >= leftTop.y && p.y <= leftTop.y + height){return true;}return false;}//处理鼠标消息,需要继承自己实现bool ProcessMsg(MOUSEMSG& msg){return 0;}GetCoordinate leftTop;int width;int height;
};
/功能区域设计/
class Button :public Tools
{public:enum ButtonStyle { CIRCLE, RECT };Button() :style(ButtonStyle::CIRCLE) {}Button(int x, int y, int Back, int h, ButtonStyle style = ButtonStyle::CIRCLE):Tools(x, y, Back, h), style(style){isClick = false;}bool ProcessMsg(MOUSEMSG& msg, Sketchpad& Sketchpad){switch (msg.uMsg){case WM_LBUTTONDOWN:if (isIn(GetCoordinate(msg.x, msg.y))){printf("leftTop(%d,%d) %#X \n", leftTop.x, leftTop.y, color);Sketchpad.setColor(color);isClick = true;}break;case WM_LBUTTONUP:isClick = false;break;}if (style == ButtonStyle::CIRCLE){Paint::drawCircle(leftTop, width, height, color);}else if (style == ButtonStyle::RECT){Paint::drawRect(leftTop, width, height, color);}return false;}
public:void setPos(const GetCoordinate& p){this->leftTop = p;}void setSize(int Back, int h){this->width = Back;this->height = h;}void setColor(COLORREF color){this->color = color;}void setStyle(ButtonStyle style){this->style = style;}
private:bool isClick; //按钮是否被点击COLORREF color; //按钮颜色ButtonStyle style; //按钮样式
};
/主函数/
int main()
{Window Back(1100, 768, EW_SHOWCONSOLE);Back.setWindowTitle("c++ 绘图");Paint::drawRect(GetCoordinate::ZERO, Back.getW(), Back.getH(), WHITE);//绘图区域 //绘图区域Paint::drawRect(GetCoordinate(Back.getW() - 100, 0), Back.getW(), Back.getH(), 0xEFEFEF); //工具栏Sketchpad Sketchpad(0, 0, Back.getW() - 100, Back.getH());//颜色按钮Button btns[9];for (int i = 0; i < 9; i++){btns[i].setSize(50, 50);btns[i].setPos(GetCoordinate(Window::getW() - 100 + 26, 50 + i * 60));btns[i].setColor(RGB(rand() % 256, rand() % 256, rand() % 256));//btns[i].setStyle(Button::RECT);}
```cpp
BeginBatchDraw();while (true){MOUSEMSG msg = GetMouseMsg();Sketchpad.ProcessMsg(msg); //画布,处理消息 Paint::drawRect(GetCoordinate(1050, 700), 50, 50, 0xEFEFEF);Paint::drawText(1000, 700, "字体大小:", BLACK, 15);Paint::drawText(1080, 700, Sketchpad.getLineSize(), BLACK, 15);for (int i = 0; i < 9; i++){btns[i].ProcessMsg(msg, Sketchpad);}FlushBatchDraw();}return Back.exec(); //防止闪退
}> 这里是引用
谢谢支持!
C++基础语言熟悉---简单画板绘制相关推荐
- 第一单元总结:基于基础语言、继承和接口的简单OOP
前情提要 到目前为止,OO课程已经完成了前三次的作业,分别为: 第一次作业:简单多项式的构造和求导.[正则表达式][数据结构][排序] 第二次作业:含三角函数因子的复杂多项式的构造.求导和化简.[递归 ...
- Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表、地图)
Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表.地图) 目录 Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表.地图) 一.简单介绍 二.环境搭建 三.使 ...
- 怎么使用php制作课程表,易语言画板绘制课程表方法
画板,相信很多易语言朋友都不会陌生吧!画板的功能很强大且实用,很多时候我们都是用来绘制一些图形 1.在使用画板绘制课程表之前,首先,我们要知道目标课程表长什么样子吧!那么,今天,MovieClip就找 ...
- C语言超简单入门——基础知识
C语言超简单入门--基础知识 一.进制转换 进制:二进制.八进制.十进制.十六进制 进制的脚标: 二进制:B 如:101B 八进制:Q 如:12Q 十进制:D 如:10D 十六进制: H 如:123H ...
- python 创建画板,Python 实现简单画板
相信用过 Windows 的同学一定都对 Windows 自带的画板不陌生吧,虽然功能简单却也还实用.那作为一名程序员,你是否想过自己实现这样一个画板呢?! 来吧,想自己实现画板的童鞋,和实验楼课程一 ...
- JavaScript基础---语言基础(1)
写在前面: 通过四篇博客把JS基础中的基础整理一下,方便自己查阅,这些内容对于实际项目开发中也许并不会在意,但是作为JS的语言基础,自觉还是应该熟悉.在完成这三篇博客(JavaScript基础---语 ...
- C语言编写简单的朗读小工具
朗读小工具 大家可能和我一样,在学完c语言之后,觉得很枯燥,今天无聊之时,我就将理论结合实践一下,做一个简单的c语言朗读器.(此处结合vbs脚本,保证很简单,人人都能够学会) 包含c语言基础知识 c语 ...
- R语言绘图—热图绘制
R语言绘图-热图绘制 原创 R语言与医学生 2022-06-24 20:59 发表于广东 热图使用颜色来表示二维图中第三个变量的变化和大小.热图能清楚直观的看到数据的变化.今天就简单介绍下R语言中热 ...
- iOS开发之简单画板实现
2019独角兽企业重金招聘Python工程师标准>>> 这几天在学习Quartz2D,学习了一个简单画板的实现,现在把实现过程记录一下. 主要用到的点就是画线,截屏,绘制图片,选择图 ...
最新文章
- RDKit | 删除方差低的描述符
- acdream 1222 Quantization Problem [dp]
- python中cgi到底是什么_什么是CGI?详细介绍Python CGI编程
- oracle变量绑定代码,Oracle 绑定变量
- Python3——网络编程基础
- 天正暖通天圆地方在哪_2020位于太白山景区海拔3511米天圆地方景点就变成了很多人望而却步的地方_天圆地方-评论-去哪儿攻略...
- mfc 更新服务器文件,MFC程序版本自动升级更新
- 【Python 04】Python开发环境概述
- 投诉索尼中国:欺骗消费!敲诈消费者!
- mybatis-plus中的select
- Vlan的划分;配置trunk中继链路;以太通道配置;DHCP服务配置
- 2013、2014 U.S.NEWS美国大学排名榜
- 将博客搬至CSDN_wuli大世界_新浪博客
- FMEA-MSR步骤三:功能分析
- 每一题-101(患某种疾病的患者)
- php 屏蔽 strict standards,PHP Strict Standards:问题解决
- QQ “你可能收到一条假消息” ”曾经”是如何实现的?
- STM32F103RCT6+1.44TFT屏幕显示
- 四年级下册计算机课本目录,人教版小学四年级数学教材下册目录;
- Linux下tree命令的安装与使用