首先是一堆头文件
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<easyx.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<graphics.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
bgm背景音乐
void BGM()
{
//在最上方加载静态库 #pragma comment(lib,"winmm.lib")
//需要包含 windows.h 和mmsystem.h(包含多媒体设备接口头文件)
//打开音乐,播放音乐 alias取别名
mciSendString("open abc.mp3", 0, 0, 0);
//repeat 重复播放
mciSendString("play abc.mp3", 0, 0, 0);//repeat 可删除(取消重复播放)
//以下是错误时调试代码
/*
char buf[100] = "";
char buf1[100] = "";
DWORD m1 = mciSendString("open ./qqq.mp3 alias a", NULL, 0, NULL);
int temp = mciGetErrorString(m1, buf, 100);
DWORD m2 = mciSendString("play a", NULL, 0, NULL);
mciGetErrorString(m2, buf, 100);
printf("m1-%u temp:%d\n", m1, m2, temp);
printf("%s\n%s\n", buf, buf1);
*/
}
我这里创建的是一个函数,要在main()里面调用一下,abc是我对那个音乐的命名,也可以是中文名字,错误代码部分打不开时可以调用一下,查看哪里出问题了。
然后就是弹出窗口函数
void change()//注意放的位置
{
//获取窗口句柄
HWND b = GetHWnd();
//更改窗口标题
SetWindowText(b,"欢迎你");
//弹出窗口提示用户操作<windows.h>
int isok=MessageBox(b, "恭喜你赢了","提示", MB_OKCANCEL);
if (isok == IDOK) {
printf("你点击了ok\n");
}
else if (IDCANCEL == isok) {
printf("你点击了取消\n");
}
}
接下来是获取按键消息函数
void key()
{
ExMessage msg = { 0 };//定义结构体变量
while (1)
{
//获取消息
if (peekmessage(&msg, EX_MOUSE | EX_KEY))
{
}
if (msg.message == WM_KEYDOWN)//判断按键是否按下
{
printf("keydown\n");
switch (msg.vkcode)
{
case VK_UP:
printf("上键按下\n");
break;
case VK_DOWN:
printf("下键按下\n");
break;
case VK_LEFT:
printf("左键按下\n");
break;
case VK_RIGHT:
printf("右键按下\n");
break;
case VK_SPACE:
printf("space\n");//空格键
break;
case 'A'://只能是大写
printf("A\n");
break;
}
}
else if (msg.message == WM_KEYUP)//判断按键是否弹起
{
printf("keyup\n");
}
msg.message = 0;
}
}
这里是我写的一个main函数
里面包含了载入图片,调整文字格式,输出文字等
int main()
{
BGM();
//接下来是画图
initgraph(1092,614, EX_SHOWCONSOLE);
IMAGE imag;
loadimage(NULL, _T("./n.jpg"));
putimage(0, 0, &imag);
change();
key();
//可以用文字居中 textheight和textwidth求出字符长宽
//要定义一个字符数组 然后再求长宽 使其文字居中
settextstyle(30,0,"楷体");//设置文字属性 高度 宽度(0自适应) “字体名称”
setbkmode(TRANSPARENT);//文字模式为透明
settextcolor(BLUE);//设置文字颜色 可以用RGB()
outtextxy(0, 0,"你好啊世界");//输出文字在指定位置 一定要加L或用_T()或设置字符集(在高级里面)
getchar();
cleardevice();
return 0;
}
看的课程是来源于b站up"c语言Plus"的easyx教学。
如有错误欢迎指正。
更新一下按键消息函数 下面的函数绘制了一个小球,并可以控制其移动和速度
void key()
{
ExMessage msg = { 0 };//定义结构体变量
//定义个小球
int x = 50;
int y = 50;
int r = 20;
//定义速度
int speed = 3;
int vx = 0;
int vy = 0;
while (1)
{
//获取消息
if (peekmessage(&msg, EX_MOUSE | EX_KEY))
{
}
BeginBatchDraw();//防闪
cleardevice();//加上加载的背景会没得
if (msg.message == WM_KEYDOWN)//判断按键是否按下
{
printf("keydown\n");
switch (msg.vkcode)
{
case VK_UP:
//printf("上键按下\n");
//y--;
vy = -1;
break;
case VK_DOWN:
//printf("下键按下\n");
//y++;
vy = 1;
break;
case VK_LEFT:
//printf("左键按下\n");
//x--;
vx = -1;
break;
case VK_RIGHT:
//printf("右键按下\n");
//x++;
vx = 1;
break;
case VK_SPACE:
//printf("space\n");//空格键
break;
case 'A'://只能是大写
//printf("A\n");
break;
}
}
else if (msg.message == WM_KEYUP)//判断按键是否弹起
{
//printf("keyup\n");
switch (msg.vkcode)
{
case VK_UP:
//printf("上键按下\n");
//y--;
vy = 0;
break;
case VK_DOWN:
//printf("下键按下\n");
//y++;
vy = 0;
break;
case VK_LEFT:
//printf("左键按下\n");
//x--;
vx = 0;
break;
case VK_RIGHT:
//printf("右键按下\n");
//x++;
vx = 0;
break;
case VK_SPACE:
//printf("space\n");//空格键
break;
case 'A'://只能是大写
//printf("A\n");
break;
}
}
//绘制小球
setfillcolor(RGB(43, 145, 175));
solidcircle(x, y, r);
//变成在这里更新小球位置
x += speed * vx;
y += speed * vy;
Sleep(10);//去掉会发生什么呢
EndBatchDraw();
msg.message = 0;
}
}