easyx按键控制,图像输出,弹窗,文字格式,bgm等学习记录

首先是一堆头文件

#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;
	}
}

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值