基于EasyX图形库的多线程绘图应用_第1页
基于EasyX图形库的多线程绘图应用_第2页
基于EasyX图形库的多线程绘图应用_第3页
基于EasyX图形库的多线程绘图应用_第4页
基于EasyX图形库的多线程绘图应用_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

龙源期刊网 基于EasyX图形库的多线程绘图应用作者:张煜昕来源:电脑知识与技术2018年第30期摘要:EasyX 是C+语言进行图形化编程和游戏编程的一种图形库,可以用几何图形构造各种造型及动画,也可以加载图像文件增强其质感。多线程是并发执行的技术,在同一时间完成多项任务,实现能够在同一时间并行执行多个方法,进而提升整体处理性能。通过绘制钟表指针动画、背景音乐、图形颜色变换以及文字闪烁等需求,采用EasyX图形库和多线程技术来完成,其运行稳定,效果良好。关键词:EasyX多线程绘图中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)30-0226-031 模拟钟表整体设计钟表整体设计包括界面设计和程序设计两部分。界面设计中体现背景图案(应用putimage方法)、背景音乐(应用mciSendString方法)、指针的形状与颜色(应用setlinestyle,setlinecolor方法)、动画的图形及文字(应用setwritemode方法)。程序设计主要考虑应用多线程技术来完成各种效果的并行调用,使得整体效果达到最佳,程序流程图如图1所示。2 EasyX图形库配置根据开发环境选择相应的安装包,下载链接:http://downloads/,选择Setup.hta文件进行安装,系统会自动检查你所安装的开发环境,你单击安装就可以了。若自动安装失败,则需要手动配置,将easyxinclude文件夹中的两个文件easyx.h和graphics.h拷贝到Visual Studio所在的安装目录VCinclude文件夹中,再将easyxlibamd64文件夹中的easyx.lib和easyxw.lib拷贝到Visual Studio所在的安装目录VClibamd64文件夹中,最后将easyxlib文件夹中的四个文件(easyx.lib,easyx6.lib,easyxw.lib,easyxw6.lib)拷贝到Visual Studio所在的安装目录VClib文件夹中,EasyX手动配置已完成,就可以使用图形库了。3 钟表静态界面设计程序需添加包含文件“graphics.h”“conio.h”“math.h”“windows.h”和“Mmsystem.h”。钟表界面设计包括背景加载(图片和音乐),表盘绘制。程序应用“WINMM.LIB”库文件,调用mciSendString()函数打开、播放mp3格式文件,函数参数写法参考自定义函数Voice()。表盘界面大小应用initgraph()设置,背景加载应用loadimage()和putimage()完成,绘制文字及图形采用EasyX图形库中的函数完成,代码如下所示。#include #include #include #include#include #pragma comment(lib, WINMM.LIB)#define PI 3oidDial_plate()initgraph(640, 480);SetConsoleTitle(Lerwerwe);/ 初始化640 x 480 的绘图窗口IMAGE img;loadimage(&img, _T(123.jpg);putimage(0, 0, &img);/插入背景图/ 绘制一个简单的表盘circle(320, 240, 2);setcolor(YELLOW);setfillcolor(LIGHTBLUE);fillcircle(320, 240, 160);setcolor(GREEN);setfillcolor(WHITE);/设置颜色fillcircle(320, 240, 60);outtextxy(260, 310, _T(学习使我超快乐);/绘制刻度outtextxy(320, 85, _T(12);outtextxy(320 + 150 * sin(PI / 6), 240 - 150 * cos(PI / 6), _T(1);outtextxy(320 + 150 * sin(PI / 3), 240 - 150 * cos(PI / 3), _T(2);outtextxy(320 + 145 * sin(2 * PI / 3), 240 - 145 * cos(2 * PI / 3), _T(4);outtextxy(320 + 140 * sin(5 * PI / 6), 240 - 140 * cos(5 * PI / 6), _T(5);outtextxy(320, 380, _T(6);outtextxy(320 + 145 * sin(7 * PI / 6), 240 - 145 * cos(7 * PI / 6), _T(7);outtextxy(320 + 150 * sin(8 * PI / 6), 240 - 150 * cos(8 * PI / 6), _T(8);outtextxy(165, 240, _T(9);outtextxy(320 + 150 * sin(10 * PI / 6), 240 - 150 * cos(10 * PI / 6), _T(10);outtextxy(320 + 150 * sin(11 * PI / 6), 240 - 150 * cos(11 * PI / 6), _T(11);outtextxy(470, 240, _T(3);void Voice()mciSendString(_T(open Kalimba.mp3 alias bkmusic), NULL, 0, NULL);mciSendString(_T(play bkmusic repeat), NULL, 0, NULL);4 多线程绘图技术应用根据表盘特效要求创建线程函数ThreadProc_A()和ThreadProc_B()。创建线程函数必须按相应格式定义,返回值类型为DWORD _ stdcall,形参类型为LPVOID。ThreadProc_A()函数实施2秒变化文字颜色,ThreadProc_B()函数实施中心圆填充颜色的变化,Draw(int hour, int minute, int second)函数动态绘制时针、分针及秒针的位置,时间通过系统函数GetLocalTime()获取,程序运行界面如图2所示,两个线程函数及指针绘制函数代码如下。DWORD _stdcallThreadProc_A(LPVOID lpParameter) while (true)if (flag) settextcolor(BLUE);flag = false;elsesettextcolor(YELLOW);flag = true;outtextxy(260, 330, _T(西安思源学院);Sleep(2000);DWORD _stdcallThreadProc_B(LPVOID lpParameter) boolean flag1=true;while(true) if (flag) setfillcolor(RED);fillcircle(320, 240, 60);flag = false;else setfillcolor(WHITE);fillcircle(320, 240, 60);flag = true;Sleep(500);void Draw(int hour, int minute, int second)double a_hour, a_min, a_sec; / 时、分、秒针的弧度值intx_hour, y_hour, x_min, y_min, x_sec, y_sec; / 时、分、秒针的末端位置intxh, yh, xm, ym, xs, ys;/ 时、分、秒针长出来的部分/ 计算时、分、秒针的弧度值a_sec = second * 2 * PI / 60;a_min = minute * 2 * PI / 60 + a_sec / 60;a_hour = hour * 2 * PI / 12 + a_min / 12;/ 计算时、分、秒针的末端位置x_sec = 320 + (int)(120 * sin(a_sec);y_sec = 240 - (int)(120 * cos(a_sec);x_min = 320 + (int)(100 * sin(a_min);y_min = 240 - (int)(100 * cos(a_min);x_hour = 320 + (int)(70 * sin(a_hour);y_hour = 240 - (int)(70 * cos(a_hour);xh = 320 - (int)(25 * sin(a_hour);/计算长出部分的端点坐标yh = 240 + (int)(25 * cos(a_hour);xm = 320 - (int)(20 * sin(a_min);ym = 240 + (int)(20 * cos(a_min);xs = 320 - (int)(15 * sin(a_sec);ys = 240 + (int)(15 * cos(a_sec);/ 画时针setlinestyle(PS_SOLID, 10, NULL);setlinecolor(WHITE);line(320, 240, x_hour, y_hour);line(320, 240, xh, yh);/ 画分针setlinestyle(PS_SOLID, 6, NULL);setlinecolor(LIGHTGRAY);line(320, 240, x_min, y_min);line(320, 240, xm, ym);/ 画秒针setlinestyle(PS_SOLID, 2, NULL);setlinecolor(RED);line(320, 240, x_sec, y_sec);line(320, 240, xs, ys);void main()Dial_plate();Voice();CreateThread(NULL,0,ThreadProc_A,NULL,0,NULL);CreateThread(NULL,0,ThreadProc_B,NULL,0,NULL);/ 设置XOR 绘图模式setwritemode(R2_XORPEN); / 设置XOR 绘图模式/ 绘制表针SYSTEMTIME ti; / 定义变量保存当前时间while (!_kbhit() / 按任意键退出钟表程序GetLocalTime(&ti); / 获取当前时间Draw(ti.wHour, ti.wMinute, ti.wSecond); / 画表针Sleep(1000); / 延时1Draw(ti.wHour, ti.wMinute, ti.wSecond); / 擦表针closegraph(); / 关闭绘图窗口主函数顺序调用Dial_plate()、Voice()完成静态界面展示,紧接着启动两个线程,分别启动线程函数ThreadProc_A()和ThreadProc_B(),实现背景颜色的变化。应用_kbhit()函数判断是否有按键事件发生,若没有,获取系统时间,间隔一秒绘制时针、分针和秒针,若有单击事件,程序退出。5 结束语EasyX图形库是实现复杂图形展示、模拟动画的利器,它缩短程序开发的周期,增强程序的渲染程度,减少程序员的编码量,图形库配置简单,是VS集成开发环境很好的图形库,EasyX图形库有很丰富的参考资料,值得我们掌握。要实现多个独立的动画效果,采用多线程技术,创建多线程来实现也是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论