一、基础
1. 窗口
-
EasyX所创立窗口的原点位于显示窗口左上角,以向右为x轴正方向,向下为y轴正方向,度量单位为像素点。
-
窗口函数
-
initgraph(int width,int height,int flag = NULL)用于初始化绘图窗口。flag为窗口的样式(SHOWCONSOLE为保留控制台显示|NOCLOSE为关闭键无效|NOMINIMIZE为最小化键无效;三个功能可以通过 | 一起使用) -
closegraph()关闭绘图窗口 -
cleardevice()清空绘图设备 -
getchar()使用closegraph()函数关闭窗口前使用 -
改变窗口颜色(两个函数需要一起使用)
setbkcolor();参数为颜色的英文大写cleardevice();清除覆盖窗口
-
2.基本图形绘制
-
图形绘制函数用于在窗口上绘制各种图形。
-
绘图函数从填充样式分类可以分为无填充、有边框填充、无边框三种
-
实例(圆)
circle()无填充fillcircle()有边框填充solidcircle()无边框填充
-
从形状来分,常用的可以分为八种:
- circle (圆
- ellipse(椭圆
- pie(扇形
- polygon(多边形
- rectangle(矩形
- roundrect(圆角矩形
- line(线
- putpixel(点
-
绘制函数
setfillcolor()设置填充颜色setlinecolor()设置线条颜色setlinestyle(高,宽,字体)设置线条样式
-
代码
#include<iostream>
#include <graphics.h> //引用图形库头文件
#include <conio.h> //使用_getch()
using namespace std;
int main()
{
//initgraph(640, 480,NOCLOSE(关闭建无效化)|NOMINIMIZE(最小化建无效化)|SHOWCONSOLE(显示终端控制台)); // 创建绘图窗口,大小为 640x480 像素
initgraph(640, 480, SHOWCONSOLE);
//改变背景颜色
setbkcolor(WHITE);
cleardevice(); //清屏
////绘图
setlinestyle(PS_SOLID, 5); //设置线条样式
setfillcolor(YELLOW); //设置填充颜色
setlinecolor(BLUE); //设置线条颜色
circle(50, 50, 50); // 画圆,圆心(50, 50),半径 100
fillcircle(50, 160, 50);
solidcircle(50, 270, 50);
_getch(); // 按任意键继续
closegraph(); // 关闭绘图窗口
return 0;
}
- 效果
3.基本文字绘制
-
函数
-
outtextxy(int x,int y,LPCTSTR str)在指定位置输出字符串 -
settextcolor ORREF color)设置当前文字颜色 -
settextstyle(int nHeight,int nWidth,LPCTSTR IpszFace)设置字体样式;IpszFace为字体名称 -
textheight(LPCTSTR str)获取字符串实际占用的像素高度 -
textwidth(LPCTSTR str)获取字符串实际占用的像素宽度
-
-
代码
#include<iostream>
#include <graphics.h> //引用图形库头文件
#include <conio.h> //使用_getch()
using namespace std;
int main()
{
initgraph(640, 480, SHOWCONSOLE);
//改变背景颜色
setbkcolor(WHITE);
cleardevice(); //清屏
//绘图
setlinestyle(PS_SOLID, 5); //设置线条样式
setfillcolor(YELLOW); //设置填充颜色
setlinecolor(BLUE); //设置线条颜色
circle(50, 50, 50); // 画圆,圆心(50, 50),半径 100
fillcircle(50, 160, 50);
solidcircle(50, 270, 50);
//绘制文字
settextcolor(RED); //设置颜色
settextstyle(20, 0, "楷体"); //设置文字样式,大小,字体
setbkmode(TRANSPARENT); //设置背景模式为透明
settextcolor(RGB(0, 126, 50));
outtextxy(50, 50, "hhhhhhhhhhhhh");//指定位置输出文字
//文字居中
fillrectangle(200, 50, 500, 100);
settextcolor(RGB(10, 126, 200));
char arr[] = "xxxxxxxx";
int width = 300 / 2 - textwidth(arr) / 2;
int height = 50 / 2 - textheight(arr) / 2;
outtextxy(width + 200, height + 50, arr);
_getch(); // 按任意键继续
closegraph(); // 关闭绘图窗口
return 0;
}
- 效果
二、图像输出
1.函数
-
在使用图像之前,需要定义一个变量(对象),然后把图片加载进变量才能进行使用。
- 平时定义变量都是使用的基础数据类型,比如int temp;
- 在使用图像的时候需要使用EasyX提供给我们的类型:IMAGE,如IMAGE img
-
loadimage(IMAGE*pDstlmg.LPCTSTRplmgFileintnWidth= 0,int nHeight= 0,bool bResize = false)从文件中读取图像-
pDstlmg为保存图像的 IMAGE 对象指针
-
plmgFile为图片文件名
-
nWidth为图片的拉伸宽度
-
nHeight为图片的拉伸高度
-
bResize为是否调整 IMAGE 的大小以适应图片
-
-
putimage(intdstX,int dstYIMAGE*pSrclmg,DWORD dwRop=SRCCOPY)在当前设备上绘制指定图像。-
dstX为绘制位置的x坐标
-
dstY为绘制位置的y坐标
-
pSrclmg为要绘制的 IMAGE 对象指针
-
dwRop为三元光栅操作码
-
2.代码
#include<iostream>
#include <graphics.h> //引用图形库头文件
#include <conio.h> //使用_getch()
using namespace std;
int main()
{
initgraph(640, 480, SHOWCONSOLE);
//改变背景颜色
setbkcolor(WHITE);
cleardevice(); //清屏
//输出图片
IMAGE img; //定义一个(变量)对象
//加载图片
//相对路径:./表示当前文件夹下,../当前文件夹的上一级目录
loadimage(&img, "./1.png", 199, 128);
//绝对路径:文件路径
//loadimage(&img,""C:\Users\violet\Documents\Visual Studio 2013\Projects\easyx\easyx\1.png"");
putimage(0, 0, &img);
_getch(); // 按任意键继续
closegraph(); // 关闭绘图窗口
return 0;
}
3.效果
三、鼠标操作
1.代码
#include<iostream>
#include<easyX.h>
#include<string>
using namespace std;
void button(int x,int y,int w,int h,char *text){
setbkmode(TRANSPARENT);
setfillcolor(BROWN);
fillroundrect(x, y, x + w, y + h, 10, 10);
settextstyle(30, 0, "黑体");
char text_[50] = "button";
strcpy(text_, text);
int tx = x + (w - textwidth(text)) / 2;
int ty = y + (h - textheight(text)) / 2;
outtextxy(tx, ty, text);
}
int main(){
initgraph(680, 480, EWX_SHUTDOWN);
button(50, 50, 150, 50, "按钮");
ExMessage msg;
while (1){
if (peekmessage(&msg, EX_MOUSE)){
switch (msg.message){
case WM_LBUTTONDOWN:
if (msg.x >= 50 && msg.x <= 50 + 150 && msg.y >= 50 && msg.y <= 50 + 50)
cout << "我是按钮,我被点击了" << endl;
break;
default:
break;
}
}
}
getchar();
return 0;
}
2.效果
四、键盘操作
1.函数
-
用于获取鼠标消息的函数有两个
getch()需要头文件conio.hGetAsyncKeyState(键值)需要头文件windows.h,但是由于EasyX包含了windows头文件,所以无须自己包含
-
getch()需要使用返回值来判断- 与非ASCII表字符的按键比较,需要使用虚拟键值
- 上:72、左:75、下:80、右:77
- 如果是与字母比较直接写字母,比如'A"
- 与非ASCII表字符的按键比较,需要使用虚拟键值
-
GetAsyncKeyState(键值)需要传入一个键值,如果按下返回真- 上:VK UP、下:VK DOWN、左:VK LEFT、右、VK_RIGHT
-
键盘操作函数为非EasyX操作函数
2.代码
#include<iostream>
#include <graphics.h> //引用图形库头文件
#include <conio.h> //使用_getch()
using namespace std;
int main()
{
initgraph(640, 480, SHOWCONSOLE);
//双重缓冲图,需要放在绘图代码之前和之后
BeginBatchDraw();
//改变背景颜色
setbkcolor(WHITE);
cleardevice(); //清屏
int x = 0, y = 0;
while (1){
//控制球移动
setfillcolor(BROWN);
fillcircle(x, y, 20);
FlushBatchDraw();
//if (kbhit()){//判断是否有键盘
// char key = _getch(); //阻塞函数,不输入一直在这等
// cout << (int)key << key << endl;
//}
// switch (key){
// case 72:
// case 'w':
// case 'W':
// y -= 5;
// cout << "上键" << endl;
// break;
// case 80:
// case 's':
// case 'S':
// y += 5;
// cout << "下键" << endl;
// break;
// case 75:
// case 'a':
// case 'A':
// x -= 5;
// cout << "左键" << endl;
// break;
// case 77:
// case 'd':
// case 'D':
// x += 5;
// cout << "右键" << endl;
// break;
// }
//}
if (GetAsyncKeyState(VK_UP)){//上建
y--;
}
if (GetAsyncKeyState(VK_DOWN)){//下建
y++;
}
if (GetAsyncKeyState(VK_LEFT)){//左建
x--;
}
if (GetAsyncKeyState(VK_RIGHT)){//右建
x++;
}
}
_getch(); // 按任意键继续
closegraph(); // 关闭绘图窗口
return 0;
}
3.效果
五、音乐播放
1.函数
-
为了实现用C语言播放音乐,我们需要用到windows的一个API
-
首先需要包含头文件windows.h(如果已经包含graphics.h则无需包含)
-
然后还需要加载静态库winmm.lib
-
最后就可以使用mciSendString函数来播放音乐了
-
-
MCIERROR mciSendStringA(LPCSTR IpstrCommand,LPSTRIpstrReturnString,UINT uReturnLength, HWND hwndCallback )-
LPCSTR IpstrCommand命令字符串:"命令 设备[参数]” -
LPSTRIpstrReturnString接收返回信息的缓冲区,为NULL时不返回信息 -
UINT uReturnLength上述缓冲区的大小 -
HWND hwndCallback一般为NULL
-
2.代码
#include<iostream>
#include <graphics.h> //引用图形库头文件
#include <conio.h> //使用_getch()
#include<mmsystem.h> //包含多媒体设备接口头文件
#pragma comment(lib,"winmm.lib") //加载静态库
using namespace std;
//播放音乐
void BGM(){
//打开音乐,播放音乐
mciSendString("open ./6.mp3 alias BGM", 0, 0, 0); //alias 取别名
mciSendString("play BGM repeat", 0, 0, 0); //repeat 重复播放
if (0)
mciSendString("close BGM", 0, 0, 0);
}
int main()
{
initgraph(640, 480, SHOWCONSOLE);
BGM();
//改变背景颜色
setbkcolor(WHITE);
cleardevice(); //清屏
IMAGE img;
loadimage(&img, "./2.jpg", 640, 480);
putimage(0, 0, &img);
_getch(); // 按任意键继续
closegraph(); // 关闭绘图窗口
return 0;
}
3.效果
六、修改窗口标题、弹出对话框
1.函数
HWND hWnd =GetHWnd()获得窗口句柄SetWindowText(hWnd,"love")修改窗口标题MessageBox(hWnd,"我是消息框","我是标题" MB OKCANCEL)设置模态对话框
2.代码
#include<iostream>
#include <graphics.h> //引用图形库头文件
#include <conio.h> //使用_getch()
using namespace std;
void change(){
//获取窗口句柄
HWND hnd = GetHWnd();
//设置窗口标题
SetWindowText(hnd, "hhhhhhhhh");
//弹出窗口,提示用户操作
int isok = MessageBox(hnd, "xxxxxxx", "提示", MB_OKCANCEL);
if (isok == IDOK) cout << "你点击了OK" << endl;
else if (IDCANCEL == isok) cout << "你点击了取消" << endl;
}
int main()
{
initgraph(640, 480, SHOWCONSOLE);
change();
//改变背景颜色
setbkcolor(WHITE);
cleardevice(); //清屏
IMAGE img;
loadimage(&img, "./2.jpg", 640, 480);
putimage(0, 0, &img);
_getch(); // 按任意键继续
closegraph(); // 关闭绘图窗口
return 0;
}