Easyx图形界面编程(在c++里面使用)

头文件

  • #include<Easyx.h> //这个只是包含最新的API(函数)
  • #include<graphics.h> //这个头文件包含了<Easyx.h>,还包含了已经不推荐使用的函数

窗口创建,背景颜色设置,坐标系统

initgraph(w,h)

  • 创建窗口
  • w:窗口宽度 h:窗口高度
  • 需要防止闪退
  • 第三个参数 EX_SHOWCONSOLE(1) :调出控制台

getwidth,getheight

  • getwidth():获取窗口的宽度
  • getheight():获取窗口的高度

setbkcolor(color)

  • 设置背景颜色填充整个窗口
  • color:颜色,需要大写
  • 需要刷新窗口 cleardevice()
  • 如果没有需要颜色的红,可用RGB;

cleardevice()

刷新窗口

窗口的坐标体系

  • 原点:窗口左上角(不含标题栏)
  • x轴:原点向右为正半轴(无负半轴,y同)
  • y轴:原点向下为正半轴

基本图形绘制

点putpixel

putpixel(x,y,color);

一个坐标和颜色

设置线条颜色setlinecolor

setlinecolor(color);

设置填充颜色setfillcolor

setfillcolor(color);

设置线条格式setlinestyle

setlinestyle(PS_SOLID(实线),**w(**宽度))

后面还有两个参数,可暂时不管

可查看定义查找其他的宏

线line

line(x1,y1,x2,y2);

两个坐标

矩形

rectangle (无填充)

rectangle(x1,y1,x2,y2) 左上角和右下角的坐标

fillrectangle(有填充)

fillrectangle(x1,y1,x2,y2) 默认填充颜色为白色

无边框填充矩形solidrectangle

solidrectangle(x1,y1,x2,y2) ;

圆角矩形roundrect

roundrect(x1,y1,x2,y2) ; 后面还有两个参数,角上圆的宽和高,

圆形circle

circle(x1,y1,r) 圆心和半径

椭圆ellipse

ellipse(x1,y1,x2,y2) ; 矩形左上角和右下角坐标

fill(有边框填充前缀),solid(无边框填充前缀)

文字绘制以及格式化字符

设置文字格式settextstyle

settextsty;e(w,h,style) ; 字体高度,宽度,字体 第二个参数可以为0,默认会根据宽度进行调节

C://windows//fonts 查看Windows里面支持的所有字体

设置文字颜色settextcolor

settextcolor(coloe);

设置背景模式setbkmode

setbkmode(TRANSPAPENT);

因为文字带有背景,会把图片遮盖住,所以需要将文字背景设为透明

绘制文字outtestxy

outtestxy(x,y,const char* filename)

使用以上部分函数报错的解决方案

Easyx与字符串相关函数,都有字符集问题 UNICOOE 多字节字符集

三种解决方案

  • 在字符串的前面使用L进行转换 强制转换
  • 用带参宏(_ T(), _TEXT())把字符集包裹起来 自适应转换 推荐使用这一种
  • 菜单栏->项目->属性->高进->字符集->把UNICOOE改为多字节字符集

文字弹出框inputBox

文本输入使用,但是不好用,后期可自己封装

文字居中显示在指定矩形区域

矩形属性:(x,y), rw,rh;

文字:w,h;

文字坐标应为

x=x+(rw-w)/2;

y=y+(rh-h)/2;

textwidth,textheight

textwidth:获取文本宽度

textheight:获取文本高度

消息处理-鼠标消息

定义消息结构体变量

ExMessage msg={0};

msg.x msg.y 鼠标的坐标

msg.wheel 滚轮的滚动 120是朝屏幕滚动,-120是朝自己滚动

获取消息

peekmessage(&msg,EX_MOUSE) 返回bool类型

while(1)
{
    if(peekmessage(&msg,EX_MOUSE))
    {
        switch(msg.message)
        {
            case WM_LBUTTONDOWN:			//左键按下
                break;
            case WM_RBUTTONDOWN:
                break;						//右键按下
            case WM_MBUTTONDOWN:
                break;						//中键按下
            case WM_MMOUSEWHEEL:
                break;						//滚轮滚动
            case WM_LBUTTONLCLK:
                break;						//左键双击
            case WM_MOUSEMOVE:
                break;						//鼠标移动
        }
    }
}

kbhit()

判断有没有按键消息

双缓冲绘图(防止闪屏)

BeginBatchDraw();

EndBatchDraw();

所有的绘图代码必须放在这两个函数之间

帧率控制

#include<time.h>
const clock_t FPS=1000/60;           //1秒/60帧=16.6=16,      一帧所需的时间
int starttime=0;
int frametime=0;
while(true)
{
    startime=clock();		//运行到当前时间所需要的时间
    /*
    	其他代码
    */
    frametime=clock()-startime;			//运行到当前时间所需要的时间
    if(frametime<PFS)
    {
        Sleep(FPS-frametime)
    }
}

图片——加载,输出

//定义图片变量
IMAGE mm;
//加载图片
//1:绝对路径:带盘符的路径(需要把\换成\\)
//2:相对路径:相对于当前程序的路径
loadimage(&mm,"mm.jpg");			//该函数后面还有两个参数,可指定其图片大小;
//输出图片
putimage(0,0,&mm);

图片-两种方式透明贴图

掩码图透明贴图

方式—

IMAGE mm1;//原图
IMAGE mm2;//掩码图
loadimage(&mm1,"mm1.jpg");
loadimage(&mm2,"mm2.jpg");
putimage(0,0,&mm2,NOTSRCERASE);//先绘制掩码图
putimage(0,0,&mm1,SCINVERT);	//再绘制原图

方式二

IMAGE mm[2];
loadimage(mm+0,"mm2.jpg");
loadimage(mm+1,"mm1.jpg");
putimage(0,0,mm+0,NOTSRCERASE);//先绘制掩码图      srcend
putimage(0,0,mm+1,SCINVERT);	//再绘制原图  	  srcpaint

png透明透明贴图

不会

图片-单帧多图动画

条件有限,无法测试

视频由图片组成

播放音乐

头文件

#include<windows.h>

#include<mmsystem.h>

#pragma comment(lib,“winmm.lib”)

播放音乐

mciSendString(“open music.mp3”,NULL,0,NULL); //打开音乐

mciSendString(“play music.mp3”,NULL,0,NULL); //播放音乐

无法播放音乐:

  • 路径错误
  • 系统驱动不支持
  • 音乐格式错误

可对音乐名称取别名

mciSendString(“open music.mp3 alias bgm”,NULL,0,NULL); //和linux中的alias有点像

设置音量

如果失败返回非零值,成功返回0;

ret=mciSendString(“setaudio bgm volume to 50”,NULL,0,NULL); //音量范围[0-1000];

if(ret!=0)

{

​ //获取一下错误信息

​ char err[100]={0};

​ mciGeterrorString(ret,err,sizeof(err));

}

重复播放

mciSendString(“play music.mp3 repeat”,NULL,0,NULL);

其他指令

resume 继续

pause 暂停

stop 停止

close 关闭

专门用来播放音效

playSound(“music.wav”,NULL,50,SND_FILENAME|SND_ASYNC);(专门播放WAV)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐