文字与声音
一、显示文字
(一)代码实例
// 窗口(WIDTH * 0.85, 20)起位置显示坚持了多少秒 TCHAR s[20]; setbkmode(TRANSPARENT); // 文字字体透明 _stprintf_s(s, _T("%d秒"), liveSecond); settextcolor(WHITE); // 设定文字颜色 settextstyle(40, 0, _T("黑体"));// 设定文字大小、样式 outtextxy(WIDTH * 0.85, 20, s); // 输出文字内容
// 设置字体显示属性 setbkmode(TRANSPARENT); settextcolor(RGB(255, 0, 0)); settextstyle(60, 0, _T("宋体")); if (gameStatus == 1) {// 输出游戏胜利 outtextxy(WIDTH * 0.35, HEIGHT * 0.35, _T("游戏胜利 :)")); } else if (gameStatus == -1) { // 输出游戏失败 outtextxy(WIDTH * 0.35, HEIGHT * 0.35, _T("游戏失败 :(")); }
(二)TCHAR
数据类型TCHAR, 这个类型在UNICODE环境下将映射为wchar_t类型;在ASCII环境下映射为char类型。并不是所有的Windows操作系统都支持UNICODE编码的API(例如早期的Windows98), 这就造成了两种结果:某些版本的Windows应该应用wchar_t来保存字符, 某些平台的Windows应该使用char类型来保存字符, 显然这两种类型的变量是无法混用的。
typedef unsigned char CHAR; typedef unsigned wchar_t WCHAR; #ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned char TCHAR; #endif
TCHAR 就是当你的字符设置为什么就是什么
例如:
程序编译为 ANSI, TCHAR 就是相当于 CHAR
当程序编译为 UNICODE, TCHAR 就相当于 WCHAR
char :单字节变量类型,最多表示256个字符,
wchar_t :宽字节变量类型,用于表示Unicode字符
宽字符和窄字符的区别:宽字符,一个字符占用两个字节;窄字符,一个字符占用一个字节。
(三)_T
_T是将字符串转换为TCHAR类型,而_L是将字符串转换为WCHAR类型,两者的区别就在于TCHAR类型和WCHAR类型。
#ifdef UNICODE #define __T(x) L ## x #else #define __T(x) x #endif
先说WCHAR类型,宽字符类型。一般的字符类型为CHAR。而_T类型是微软为了能够保证WCHAR类型和CHAR类型两者在平台上能够通用设计出来的一个类型。
当没有定义_UNICODE时,TCHAR就是普通的char类型,而当定义了UNICODE宏时,TCHAR就转为了WCHAR类型,即_L类型。
使用例子:
TCHAR msg[] = _T("学习C++");
(四)outtextxy
以下代码截取自easyx.h225-226行:
void outtextxy(int x, int y, LPCTSTR str); // Output a string at the specified location void outtextxy(int x, int y, TCHAR c); // Output a char at the specified location
参数
x:字符串输出时头字母的 x 轴的坐标值。
y:字符串输出时头字母的 y 轴的坐标值。
str:待输出的字符串的指针。
c:待输出的字符。
二、播放音乐
(一)循环播放音乐
1.代码
mciSendString(_T("open game_music.mp3 alias bkmusic"), NULL, 0, NULL);//打开背景音乐//game_music.mp3要替换为相应文件名 mciSendString(_T("play bkmusic repeat"), NULL, 0, NULL); // 循环播放
2.mciSendString()播放音乐时的使用
(1)mciSendString()是WindowsAPI函数,因此使用这个函数应首先包含<windows.h>头文件, 同时,还需要包含<mmsystem.h>及winmm库文件,包含库文件格式为 #pragma comment ( lib, "winmm.lib" )。
(2)打开音乐文件:
mciSendString("open 文件路径/音乐名.mp3 alias bgm",0,0,0);
当不需要这个函数有返回值时,后边的两个参数选择0即可
当播放结束后无发消息目标句柄时,参数也选0或NULL
alias bgm -- 将文件路径及音乐名起别名bgm,后边即可用bgm代替要播放的路径及音乐
(3)播放音乐
mciSendString("play bgm ",0,0,0);
play -- 播放(除play外,还可以用这些命令 pause 暂停 resume 继续 close 关闭 )
如写成"play bgm repeat" -- 则循环播放
(4)调整音量
mciSendString("setaudio bgm volume to 100", 0, 0, 0);
100 -- 音量值(整数,取值0 -- 1000)
(二)播放一次音乐
代码
void PlayMusicOnce(const TCHAR fileName[80]) // 播放一次音乐函数 { TCHAR cmdString1[50]; _stprintf_s(cmdString1, _T("open %s alias tmpmusic"), fileName); // 生成命令字符串 mciSendString(_T("close tmpmusic"), NULL, 0, NULL); // 先把前面一次的音乐关闭 mciSendString(cmdString1, NULL, 0, NULL); // 打开音乐 mciSendString(_T("play tmpmusic"), NULL, 0, NULL); // 仅播放一次 }
play 音乐别名,最后没有repeat。