c/c++Easyx图形界面编程入门
文章目录
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)
更多推荐
所有评论(0)