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++基础语言熟悉---简单画板绘制相关推荐

  1. 第一单元总结:基于基础语言、继承和接口的简单OOP

    前情提要 到目前为止,OO课程已经完成了前三次的作业,分别为: 第一次作业:简单多项式的构造和求导.[正则表达式][数据结构][排序] 第二次作业:含三角函数因子的复杂多项式的构造.求导和化简.[递归 ...

  2. Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表、地图)

    Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表.地图) 目录 Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表.地图) 一.简单介绍 二.环境搭建 三.使 ...

  3. 怎么使用php制作课程表,易语言画板绘制课程表方法

    画板,相信很多易语言朋友都不会陌生吧!画板的功能很强大且实用,很多时候我们都是用来绘制一些图形 1.在使用画板绘制课程表之前,首先,我们要知道目标课程表长什么样子吧!那么,今天,MovieClip就找 ...

  4. C语言超简单入门——基础知识

    C语言超简单入门--基础知识 一.进制转换 进制:二进制.八进制.十进制.十六进制 进制的脚标: 二进制:B 如:101B 八进制:Q 如:12Q 十进制:D 如:10D 十六进制: H 如:123H ...

  5. python 创建画板,Python 实现简单画板

    相信用过 Windows 的同学一定都对 Windows 自带的画板不陌生吧,虽然功能简单却也还实用.那作为一名程序员,你是否想过自己实现这样一个画板呢?! 来吧,想自己实现画板的童鞋,和实验楼课程一 ...

  6. JavaScript基础---语言基础(1)

    写在前面: 通过四篇博客把JS基础中的基础整理一下,方便自己查阅,这些内容对于实际项目开发中也许并不会在意,但是作为JS的语言基础,自觉还是应该熟悉.在完成这三篇博客(JavaScript基础---语 ...

  7. C语言编写简单的朗读小工具

    朗读小工具 大家可能和我一样,在学完c语言之后,觉得很枯燥,今天无聊之时,我就将理论结合实践一下,做一个简单的c语言朗读器.(此处结合vbs脚本,保证很简单,人人都能够学会) 包含c语言基础知识 c语 ...

  8. R语言绘图—热图绘制

    R语言绘图-热图绘制 原创 R语言与医学生  2022-06-24 20:59 发表于广东 热图使用颜色来表示二维图中第三个变量的变化和大小.热图能清楚直观的看到数据的变化.今天就简单介绍下R语言中热 ...

  9. iOS开发之简单画板实现

    2019独角兽企业重金招聘Python工程师标准>>> 这几天在学习Quartz2D,学习了一个简单画板的实现,现在把实现过程记录一下. 主要用到的点就是画线,截屏,绘制图片,选择图 ...

最新文章

  1. RDKit | 删除方差低的描述符
  2. acdream 1222 Quantization Problem [dp]
  3. python中cgi到底是什么_什么是CGI?详细介绍Python CGI编程
  4. oracle变量绑定代码,Oracle 绑定变量
  5. Python3——网络编程基础
  6. 天正暖通天圆地方在哪_2020位于太白山景区海拔3511米天圆地方景点就变成了很多人望而却步的地方_天圆地方-评论-去哪儿攻略...
  7. mfc 更新服务器文件,MFC程序版本自动升级更新
  8. 【Python 04】Python开发环境概述
  9. 投诉索尼中国:欺骗消费!敲诈消费者!
  10. mybatis-plus中的select
  11. Vlan的划分;配置trunk中继链路;以太通道配置;DHCP服务配置
  12. 2013、2014 U.S.NEWS美国大学排名榜
  13. 将博客搬至CSDN_wuli大世界_新浪博客
  14. FMEA-MSR步骤三:功能分析
  15. 每一题-101(患某种疾病的患者)
  16. php 屏蔽 strict standards,PHP Strict Standards:问题解决
  17. QQ “你可能收到一条假消息” ”曾经”是如何实现的?
  18. STM32F103RCT6+1.44TFT屏幕显示
  19. 四年级下册计算机课本目录,人教版小学四年级数学教材下册目录;
  20. Linux下tree命令的安装与使用

热门文章

  1. 算法分析课设(四)采用分治法求树中任意两点之间距离小于K的点对及路径
  2. php类和对象教程,php类和对象
  3. 使用deno和oak创建短链应用 1.0
  4. 【毛坦厂复读生心中所想】—— 我在大学挺好的【内附学习资源和路线】
  5. 激光打印机,保留打印记录的文档
  6. WWDC2016临近 苹果开始布置会场外LOGO
  7. js使用页面打印window.print() 记录,并进行缩放打印
  8. stm32直流电机控制—PID算法篇
  9. 关于5G手机,你想知道的都在这里了-千氪
  10. 以一半的价格组装专业的深度学习工作站