c++ easyX+mmsystem
·
项目一 easyX和音乐模块
1. 引入头文件mmsystem.h
2.使用pragma comment 引入对应的静态库
#include <iostream>
#include <graphics.h>
#include <MMSystem.h> // 音乐播放需要的头文件
#include <windows.h>
// 预处理->编译->汇编->链接
#pragma comment(lib , "winmm.lib") //将音乐文件播放所需要的winmm.lib文件加入到工程中
using namespace std;
int main() {
initgraph(800, 600);
mciSendString(_T("play E:\\music\\music.mp3 repeat"), 0, 0, 0);
system("pause");
return 0;
}
2024.10.7
_T() 补充说明
如果在项目里面使用的是多字符集
那么在使用easyx的相关接口时,就不需要使用_T()
在属性里面查看下我们项目是什么字符集

我们使用的是unicode编码 所以得加上_T()
项目二 在音频的基础上加载一个视频版本
(素材指的是 一个一个连续的图片)
这里使用的素材是一张一张连续的图片,将它们逐个播放有动态的效果
#include <stdio.h>
#include <graphics.h>
#include <MMSystem.h> // 音乐播放需要的头文件
#include <windows.h>
// 预处理->编译->汇编->链接
#pragma comment(lib , "winmm.lib") //将音乐文件播放所需要的winmm.lib文件加入到工程中
using namespace std;
#define IMAGE_LEN 100
int main() {
char buffer[128];
initgraph(800, 600);
mciSendString(_T("play E:\\music\\music.mp3 repeat"), 0, 0, 0);
while (1) {
for (int i = 0; i < IMAGE_LEN; i++) {
如果我们的图片 的格式是1 2 3的文件命名的话 我们就用for循环 读取每一张图片
sprintf(buffer, "E:\\images\\%d.jpg", i); // 读取图片
loadimage(0, buffer); 这里又有问题了 说没有重载的函数 我们用_T()函数将路径转换为宽字符
loadimage(0, _T(buffer)); // 这里又出现问题 _T貌似不能接受变量
有两种方法 一种是自己写一个字符集转换函数 一种是属性直接调成多字符集
我们选择第二种方法
loadimage(0, buffer); // 加载图片
Sleep(50); // 延时50ms
}
}
system("pause");
return 0;
}
这种是有问题的,性能不咋好
原因是for循环的时候边循环边加载图片
所以我们把images预先加载到数组里面
#include <stdio.h>
#include <graphics.h>
#include <MMSystem.h> // 音乐播放需要的头文件
#include <windows.h>
// 预处理->编译->汇编->链接
#pragma comment(lib , "winmm.lib") //将音乐文件播放所需要的winmm.lib文件加入到工程中
using namespace std;
#define IMAGE_LEN 100
int main() {
char buffer[IMAGE_LEN];
IMAGE img[IMAGE_LEN];
initgraph(800, 600);
mciSendString(_T("play E:\\music\\music.mp3 repeat"), 0, 0, 0);
for (int i = 1; i <= IMAGE_LEN; i++) {
sprintf(buffer, "E:\\images\\%d.jpg", i);
loadimage(&img[i], buffer); // 加载图片
}
while (1) {
for (int i = 0; i < IMAGE_LEN; i++) {
putimage(0, 0, &img[i]); // 显示图片
Sleep(50); // 延时50ms
}
}
system("pause");
return 0;
}
更多推荐
所有评论(0)