易错:
1.文件为(.cpp)后缀
头文件
#include <graphics.h> // 包含图形库的头文件
创建窗口
# define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <graphics.h> // 包含图形库的头文件
int main()
{
// 创建一个窗口 大 小
initgraph(640, 480);
getchar(); // 保持窗口打开
// 关闭窗口
closegraph();
return 0;
}
运行结果如下:
第三个参数
//1 创建一个窗口
initgraph(640, 480,SHOWCONSOLE);
// 这里第三个参数是显示控制台
//第三个参数,如果是NOCLOSE,窗口关闭键失效。NOMINIMIZE,窗口缩小键失效
// 二者 NOCLOSE | NOMINIMIZE ,则全部失效
图形填充
画几个圆
# define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <graphics.h> // 包含图形库的头文件
int main()
{
//1 创建一个窗口
initgraph(640, 480);
//设置背景颜色
setbkcolor(WHITE);
cleardevice();//清屏
// 给圆填涂颜色
setfillstyle(PS_SOLID,5);// 设置线条格式 ps_solid 实线 5个像素
setfillcolor(YELLOW);// 设置填充颜色
setlinecolor(BLUE);// 设置线条颜色
//画个圆
circle(50, 50, 50);
fillcircle(50, 150, 50);
solidcircle(50, 250, 50);
getchar();
//2 关闭窗口
closegraph();
return 0;
}
文字创建
举例:
//绘制文字
//设置颜色
settextcolor(RED);
//设置文字样式,大小,字体
settextstyle(50, 0, "楷体");
//设置背景模式 tran sparent 透明
setbkmode(TRANSPARENT);
//设置颜色 RGB
settextcolor(RGB(0, 255, 13));//画板里的三原色数据
outtextxy(50, 50, "打印字体咯~");
运行结果:
RGB画板的三原色数据
修改outtextxy函数,让其输出多个字符(字符串)
文字居中
//把文字居中
setfillcolor(YELLOW);// 设置填充颜色
setlinecolor(BLUE);// 设置线条颜色
setbkmode(TRANSPARENT);
fillrectangle(200, 50, 500, 100);//500-200=300 100-50=50
settextcolor(RED);
char arr[] = "居中好吧!!!";
int width = 300 / 2 - textwidth(arr) / 2;
int height = 50 / 2 - textheight(arr) / 2;
outtextxy(width + 200, height + 50, arr);
运行结果:
输出图片
举例:
输出图片相对路径时,把文件放在vs对应的项目文件中
// 输出图片
IMAGE img;// 定义一个(变量)对象
// 加载图片
// 相对路径:./表示当前文件下,../表示当前文件的上一级目录
// 绝对路径:C:\Users\30438\Pictures\CSDN插图\MySQL.jpg
loadimage(&img, "C:\\Users\\30438\\Pictures\\CSDN插图\\MySQL.jpg",250,250);
// 若文件路径有空格 处理方法举例:\"12 easyX学习\"
// 250,250为照片设置高度,宽度
//相对路径
//loadimage(&img, "./MySQL.jpg");
putimage(0, 0, &img);//前面坐标用变量也可以
运行结果为:
鼠标消息函数(老版)
举例:
//鼠标信息
while (1) // 不断地处理事务,需要循环
{
if (MouseHit())
{
MOUSEMSG msg = GetMouseMsg();
printf("坐标(%d,%d)\n", msg.x, msg.y);//控制台打印鼠标的坐标
// 消息分发
switch (msg.uMsg)
{
case WM_LBUTTONDOWN:
outtextxy(400, 400, "鼠标左键按下");
break;
case WM_RBUTTONDOWN:
outtextxy(400, 400, "鼠标右键按下");
break;
}
}
}
运行结果:
判断鼠标是否在以上矩形中,若在就输出其语句
// 文字居中
setfillcolor(YELLOW);// 设置填充颜色
setlinecolor(BLUE);// 设置线条颜色
setbkmode(TRANSPARENT);
fillrectangle(200, 50, 500, 100);//500-200=300 100-50=50
settextcolor(RED);
char arr[] = "居中好吧!!!";
int width = 300 / 2 - textwidth(arr) / 2;
int height = 50 / 2 - textheight(arr) / 2;
outtextxy(width + 200, height + 50, arr);
//鼠标信息
while (1) // 不断地处理事务,需要循环
{
if (MouseHit())
{
MOUSEMSG msg = GetMouseMsg();
//判断鼠标是否在上面的矩形中,若在就输出一句话,不过这个是重复一直输出
//若放在wm_lbuttondown这种,就点击再输出
if (msg.x > 200 && msg.x < 500 && msg.y>50 && msg.y < 100)
{
printf("鼠标就在这个矩形里了哦\n");
}
// 消息分发
switch (msg.uMsg)
{
case WM_LBUTTONDOWN:
outtextxy(400, 400, "鼠标左键按下");
printf("坐标(%d,%d)\n", msg.x, msg.y);//控制台打印鼠标的坐标
break;
case WM_RBUTTONDOWN:
outtextxy(400, 400, "鼠标右键按下");
printf("坐标(%d,%d)\n", msg.x, msg.y);//控制台打印鼠标的坐标
break;
}
}
}
运行结果:
鼠标操作(新版)
只是换了一个结构体,可以获取更多的信息(鼠标,按键等等等)
ExMessage msg;
while (1) // 不断地处理事务,需要循环
{
if (peekmessage(&msg,EM_MOUSE))
{
// 消息分发
switch (msg.message)
{
case WM_LBUTTONDOWN:
outtextxy(400, 400, "鼠标左键按下");
if (msg.x > 200 && msg.x < 500 && msg.y>50 && msg.y < 100)
{
printf("鼠标就在这个矩形里了哦\n");
}
break;
case WM_RBUTTONDOWN:
outtextxy(400, 400, "鼠标右键按下");
printf("坐标(%d,%d)\n", msg.x, msg.y);//控制台打印鼠标的坐标
break;
}
}
}
运行结果:
键盘消息函数
非easyX函数
getch()
用到头文件 conio.h
堵塞函数,不输入一直在这里等
#include <conio.h> // 使用_getch() 获取键位
while (1) // 不断地处理事务,需要循环
{
char key = _getch();
printf("%d,%c\n", key, key);
switch (key)
{
case 72://上键
case 'w': // 这里是定义了上键为w ,当然也可以定义其他的键位
case 'W':
printf("上键\n");
break;
case 80://下键
case 's':
case 'S':
printf("下键\n");
break;
case 75://左键
case 'a':
case 'A':
printf("左键\n");
break;
case 77://右键
case 'd':
case 'D':
printf("右键\n");
break;
}
}
效果演示:
目前只是在控制台上操作
设置一个小球,对其进行键位控制
int x=0, y=0;
//鼠标信息
ExMessage msg;
while (1) // 不断地处理事务,需要循环
{
// 创建一个小物体,进行移动
cleardevice();//清屏,除去移动后留下的拖影
setfillcolor(BLUE);
fillcircle(x, y, 20);
char key = _getch();
printf("%d,%c\n", key, key);
switch (key)
{
case 72://上键
case 'w': // 这里是定义了上键为w ,当然也可以定义其他的键位
case 'W':
y -= 5;
printf("上键\n");
break;
case 80://下键
case 's':
case 'S':
y += 5;
printf("下键\n");
break;
case 75://左键
case 'a':
case 'A':
x -= 5;
printf("左键\n");
break;
case 77://右键
case 'd':
case 'D':
x += 5;
printf("右键\n");
break;
}
}
效果演示:
在显示其他组件(图片什么的)的同时,完成小球移动,就是把其语句放在同一个while循环中,当然这样也会导致界面缓存闪屏
解决方法,可以创建一个缓冲区(双缓冲绘图)
开始:
int x = 0, y = 0;// 设置小球的初识位置
while (1) // 不断地处理事务,需要循环
{
// 双缓冲绘图 ,需要放在绘图代码之前和之后
BeginBatchDraw();
//设置背景颜色(a,b)
结束:
// 创建一个小物体,进行移动
setfillcolor(BLUE);
fillcircle(x, y, 20);
EndBatchDraw();
char key = _getch();
完整代码如下:
# define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <graphics.h> // 包含图形库的头文件
#include <conio.h> // 使用_getch() 键位
int main()
{
//1 创建一个窗口
initgraph(640, 480,SHOWCONSOLE);
// 这里第三个参数是显示控制台
//第三个参数,如果是NOCLOSE,窗口关闭键失效。NOMINIMIZE,窗口缩小键失效,二者 | ,则全部失效
int x = 0, y = 0;// 设置小球的初识位置
while (1) // 不断地处理事务,需要循环
{
// 双缓冲绘图 ,需要放在绘图代码之前和之后
BeginBatchDraw();
//设置背景颜色(a,b)
setbkcolor(WHITE);//a
cleardevice();//b 清屏
// 输出图片
IMAGE img;// 定义一个(变量)对象
// 加载图片
// 相对路径:./表示当前文件下,../表示当前文件的上一级目录
// 绝对路径:C:\Users\30438\Pictures\CSDN插图\MySQL.jpg
loadimage(&img, "C:\\Users\\30438\\Pictures\\CSDN插图\\MySQL.jpg", 250, 250);
// 若文件路径有空格 处理方法举例:\"12 easyX学习\"
// 250,250为照片设置高度,宽度
//相对路径
//loadimage(&img, "./MySQL.jpg");
putimage(0, 0, &img);//前面坐标用变量也可以
//鼠标信息
ExMessage msg;
// 创建一个小物体,进行移动
setfillcolor(BLUE);
fillcircle(x, y, 20);
EndBatchDraw();// 结束缓冲区
char key = _getch();
printf("%d,%c\n", key, key);
switch (key)
{
case 72://上键
case 'w': // 这里是定义了上键为w ,当然也可以定义其他的键位
case 'W':
y -= 5;
printf("上键\n");
break;
case 80://下键
case 's':
case 'S':
y += 5;
printf("下键\n");
break;
case 75://左键
case 'a':
case 'A':
x -= 5;
printf("左键\n");
break;
case 77://右键
case 'd':
case 'D':
x += 5;
printf("右键\n");
break;
}
}
getchar();
//2 关闭窗口
closegraph();
return 0;
}
音乐播放
这个只支持mp3,网易云的不行
# define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <graphics.h> // 包含图形库的头文件
#include <conio.h> // 使用_getch() 键位
#include <mmsystem.h> // 包含多媒体设备接口头文件
//必须在graphics头文件下方
#pragma comment(lib,"winmm.lib")//加载静态库
// 这是预编译指令
void BGM() // 播放音乐
{
// 打开音乐,播放音乐 alias 取别名 后面参数调音量等
mciSendString("open 天后.mp3 alias BGM",0,0,0);
// repeat 重复播放 pause 暂停 close 关闭
mciSendString("play BGM repeat", 0, 0, 0);
}
repeat 重复播放 pause 暂停 close 关闭 resume 继续
修改窗口标题,弹出框框
文章来源:https://www.toymoban.com/news/detail-782906.html
void change()
{
// 获取窗口句柄
HWND hnd = GetHWnd();
// 设置窗口标题
SetWindowText(hnd, "c语言plus");
//弹出窗口,提示用户操作
int isok=MessageBox(NULL, "干嘛?","提示标题",MB_OKCANCEL);
// 这里是NULL,窗口和主窗口都可以拖动,
// 若写变量hnd,则是强制小窗口的确认,主窗口一直弹出,且无法点击
// 其返回值是Int型,可进行赋值判断
if (isok == IDOK)
{
printf("您点击了确认\n"); // 在控制台输出
}
else if (IDCANCEL == isok)
{
printf("您点击了取消\n");
}
}
把其操作写入change()函数内
文章来源地址https://www.toymoban.com/news/detail-782906.html
到了这里,关于easy X(C语言图形化界面)学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!