一、窗口創建
(1)幾種創建方式
#include<easyx.h>//easyx的頭文件
#include<iostream>
using namespace std;int main()
{//創建一個500*500的窗口//參數為:長度,寬度,是否顯示黑框(無參為不顯示黑框,有這個參數則顯示)initgraph(500, 500);//不顯示dox黑屏initgraph(500, 500, EX_SHOWCONSOLE);//顯示dox黑屏//生成框沒有關閉按鈕initgraph(500, 500, EX_NOCLOSE);//生成框沒有最小化按鈕initgraph(500, 500, EX_NOMINIMIZE);//如果要實現多個特性的顯示框,第三個參數用|連接initgraph(500, 500, EX_SHOWCONSOLE | EX_NOCLOSE | EX_NOMINIMIZE);getchar();//用于實現窗口的暫停return 0;
}
(2)窗口顏色調整
int main()
{//創建窗口(有黑框)initgraph(500, 500, EX_SHOWCONSOLE);//設置窗口顏色setbkcolor(WHITE);//清除原窗口顏色,以顯示新的白色cleardevice();getchar();
}
//庫中顏色// Color constant
#define BLACK 0
#define BLUE 0xAA0000
#define GREEN 0x00AA00
#define CYAN 0xAAAA00
#define RED 0x0000AA
#define MAGENTA 0xAA00AA
#define BROWN 0x0055AA
#define LIGHTGRAY 0xAAAAAA
#define DARKGRAY 0x555555
#define LIGHTBLUE 0xFF5555
#define LIGHTGREEN 0x55FF55
#define LIGHTCYAN 0xFFFF55
#define LIGHTRED 0x5555FF
#define LIGHTMAGENTA 0xFF55FF
#define YELLOW 0x55FFFF
#define WHITE 0xFFFFFF
int main()
{//創建窗口(有黑框)initgraph(500, 500, EX_SHOWCONSOLE);//設置窗口顏色//在畫圖中查找色號可以實現想要顏色的填充,用RGB函數即可setbkcolor(RGB(21, 134, 41));//清除原窗口顏色,以顯示新的顏色cleardevice();getchar();
}
? ? ? ? RGB號的找法:在畫圖軟件中找
(3)坐標體系
二、基本圖形繪制
?(1)線條
int main()
{//純白窗口創建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//繪制一個點(x,y,顏色)putpixel(200, 100, RED);//繪制一條線(先設置好,再繪制)//設置線條顏色setlinecolor(BLUE);//設置線條樣式(樣式,粗細)setlinestyle(PS_SOLID, 3);//開始繪制(起點x,起點y,終點x,終點y)line(0, 0, 500, 500);//跟據顯示框繪制line(0, 0, getwidth(), getheight());getchar();return 0;
}
? ? ? ? 庫中線條類型?:
/* Pen Styles */
#define PS_SOLID 0
#define PS_DASH 1 /* ------- */
#define PS_DOT 2 /* ....... */
#define PS_DASHDOT 3 /* _._._._ */
#define PS_DASHDOTDOT 4 /* _.._.._ */
#define PS_NULL 5
#define PS_INSIDEFRAME 6
#define PS_USERSTYLE 7
#define PS_ALTERNATE 8
#define PS_STYLE_MASK 0x0000000F#define PS_ENDCAP_ROUND 0x00000000
#define PS_ENDCAP_SQUARE 0x00000100
#define PS_ENDCAP_FLAT 0x00000200
#define PS_ENDCAP_MASK 0x00000F00#define PS_JOIN_ROUND 0x00000000
#define PS_JOIN_BEVEL 0x00001000
#define PS_JOIN_MITER 0x00002000
#define PS_JOIN_MASK 0x0000F000#define PS_COSMETIC 0x00000000
#define PS_GEOMETRIC 0x00010000
#define PS_TYPE_MASK 0x000F0000#define AD_COUNTERCLOCKWISE 1
#define AD_CLOCKWISE 2
(2)矩形
#include<easyx.h>//easyx的頭文件
#include<iostream>
using namespace std;int main()
{//純白窗口創建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//繪制一個矩形邊框//先調一下矩形線的顏色setlinecolor(RED);//開始繪制(左上角x,左上角y,右下角x,右下角y)rectangle(100, 0, 100 + 50, 0 + 50);//繪制一個填充顏色的矩形邊框setlinecolor(RED);rectangle(210, 0, 210 + 50, 0 + 50);//設置填充的顏色setfillcolor(YELLOW);//把顏色填到矩形中fillrectangle(210, 0, 210 + 50, 0 + 50);//繪制一個無邊框但填充顏色的矩形solidrectangle(320, 0, 320 + 50, 0 + 50);//設置填充的顏色setfillcolor(YELLOW);//可以看到,繪制無邊框矩形時如果前面定義過填充顏色,會進行自動填充//繪制一個圓角矩形//開始繪制(左上角x,左上角y,右下角x,右下角y,角的橢圓a,角的橢圓b)roundrect(430, 0, 430 + 50, 0 + 50, 10, 10);//給圓角矩形填充顏色fillroundrect(430, 0, 430 + 50, 0 + 50, 10, 10);//給圓角矩形去邊框solidroundrect(430, 0, 430 + 50, 0 + 50, 10, 10);getchar();return 0;
}
關于圓角矩形角的橢圓示意圖:
(3)圓形
int main()
{//純白窗口創建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setlinecolor(RED);//繪制一個圓(圓心x,圓心y,半徑r)circle(100, 100, 50);//填充顏色setfillcolor(YELLOW);fillcircle(100, 100, 50);//去邊框solidcircle(100, 100, 50);getchar();return 0;
}
?(4)橢圓
int main()
{//純白窗口創建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setlinecolor(RED);//繪制一個橢圓(參數和矩形一樣,只是會變成橢圓)ellipse(100, 0, 200, 50);//當然也可以進行顏色填充和去邊操作getchar();return 0;
}
(5)庫中更多圖形的定義
// Drawing related functionsCOLORREF getpixel(int x, int y); // Get pixel color
void putpixel(int x, int y, COLORREF color); // Set pixel colorvoid line(int x1, int y1, int x2, int y2); // Draw a linevoid rectangle (int left, int top, int right, int bottom); // Draw a rectangle without filling
void fillrectangle (int left, int top, int right, int bottom); // Draw a filled rectangle with a border
void solidrectangle(int left, int top, int right, int bottom); // Draw a filled rectangle without a border
void clearrectangle(int left, int top, int right, int bottom); // Clear a rectangular regionvoid circle (int x, int y, int radius); // Draw a circle without filling
void fillcircle (int x, int y, int radius); // Draw a filled circle with a border
void solidcircle(int x, int y, int radius); // Draw a filled circle without a border
void clearcircle(int x, int y, int radius); // Clear a circular regionvoid ellipse (int left, int top, int right, int bottom); // Draw an ellipse without filling
void fillellipse (int left, int top, int right, int bottom); // Draw a filled ellipse with a border
void solidellipse(int left, int top, int right, int bottom); // Draw a filled ellipse without a border
void clearellipse(int left, int top, int right, int bottom); // Clear an elliptical regionvoid roundrect (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Draw a rounded rectangle without filling
void fillroundrect (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Draw a filled rounded rectangle with a border
void solidroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Draw a filled rounded rectangle without a border
void clearroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Clear a rounded rectangular regionvoid arc (int left, int top, int right, int bottom, double stangle, double endangle); // Draw an arc
void pie (int left, int top, int right, int bottom, double stangle, double endangle); // Draw a sector without filling
void fillpie (int left, int top, int right, int bottom, double stangle, double endangle); // Draw a filled sector with a border
void solidpie(int left, int top, int right, int bottom, double stangle, double endangle); // Draw a filled sector without a border
void clearpie(int left, int top, int right, int bottom, double stangle, double endangle); // Clear a rounded rectangular regionvoid polyline (const POINT *points, int num); // Draw multiple consecutive lines
void polygon (const POINT *points, int num); // Draw a polygon without filling
void fillpolygon (const POINT *points, int num); // Draw a filled polygon with a border
void solidpolygon(const POINT *points, int num); // Draw a filled polygon without a border
void clearpolygon(const POINT *points, int num); // Clear a polygon regionvoid polybezier(const POINT *points, int num); // Draw three square Bezier curves
void floodfill(int x, int y, COLORREF color, int filltype = FLOODFILLBORDER); // Fill the area
(6)折線的繪制
int main()
{//純白窗口創建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setlinecolor(RED);setlinestyle(PS_SOLID, 3);//POINT的實質的結構體POINT points[] = { {10,10},{50,50},{100,50},{220,350} };polyline(points, 4);getchar();return 0;
}
三、文字操作
(1)基本操作
int main()
{//純白窗口創建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//畫個填充顏色的帶框矩形setlinecolor(RED);rectangle(100, 100, 300, 200);setfillcolor(YELLOW);fillrectangle(100, 100, 300, 200);//寫文字// 注意:凡是easy文字相關函數的調用,字符串一定要寫L進行字符集的轉化//設置文字大小與類型(寬度,高度(0為自適應),字體)settextstyle(50, 0, L"華文楷體 常規");//設置文字顏色settextcolor(BLUE);//設置背景模式,以防止文字遮蓋背景setbkmode(TRANSPARENT);//開寫outtextxy(110, 120, L"HELLOW!");getchar();return 0;
}
? ? ? ? 文體查找:
?
? ? ? ? 三種解決字符集轉換的方法:
(2)將int類型的變量輸出為屏幕文字
? ? ? ? 注意:這個地方使用了第三項來改變字符集
int main()
{//純白窗口創建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//畫個填充顏色的帶框矩形setlinecolor(RED);rectangle(100, 100, 300, 200);setfillcolor(YELLOW);fillrectangle(100, 100, 300, 200);//寫文字// 注意:凡是easy文字相關函數的調用,字符串一定要寫L進行字符集的轉化//設置文字大小與類型(寬度,高度(0為自適應),字體)settextstyle(50, 0, "華文楷體 常規");//設置文字顏色settextcolor(BLUE);//設置背景模式,以防止文字遮蓋背景setbkmode(TRANSPARENT);//開寫int score = 66;char str[100] = "";//三個參數(字符串地址,)sprintf_s(str, "score:%d", score);outtextxy(110, 120, str);getchar();return 0;
}
(3)文字在矩形居中顯示
int main()
{//純白窗口創建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//變量定義int rx = 100;int ry = 100;int rw = 200;int rh = 100;//畫個填充顏色的帶框矩形setlinecolor(RED);rectangle(rx, ry, rx + rw, ry + rh);setfillcolor(YELLOW);fillrectangle(rx, ry, rx + rw, ry + rh);//textwidth=tw textheight=thsettextstyle(30, 0, "華文楷體 常規");int hspace = (rw - textwidth("HELLOW!")) / 2;int vspace = (rh - textheight("HELLOW!")) / 2;settextcolor(BLUE);setbkmode(TRANSPARENT);outtextxy(rx + hspace, ry + vspace, "HELLOW!");getchar();return 0;
}
四、關于消息
(1)基本使用
????????定義消息結構體,peekmessage是獲取消息,返回一個bool值,如果獲取到了就是真,它有三個參數,第一個是消息的地址,第二個是獲取的目標,第二第三都有默認值,圖中的EX_MOUSE是鼠標的意思,msg結構體有message成員存放消息信息,如果這個信息是鼠標左鍵被按下(WM_LBUTTONDOWN)就打印按下了鼠標左鍵
int main()
{//創建窗口initgraph(500, 500, EX_SHOWCONSOLE);//定義消息結構體變量ExMessage msg = { 0 };//套入死循環,便于多次檢測消息while (1){//獲取消息(消息地址,控制目標(這里是鼠標))if (peekmessage(&msg, EX_MOUSE)){//(msg.message可以訪問消息類型)switch (msg.message){case WM_LBUTTONDOWN: // 左鍵按下printf("左鍵按下 \n");break;case WM_RBUTTONDOWN: // 右鍵按下printf("右鍵按下 \n");break;case WM_MBUTTONDOWN: // 中鍵按下printf("中鍵按下 \n");break;case WM_MOUSEWHEEL: // 滾輪滾動printf("滾輪滾動 \n");break;case WM_LBUTTONDBLCLK: // 左鍵雙擊printf("左鍵雙擊 \n");break;}}}return 0;
}
? ? ? ? 庫中的控制目標:
? ? ? ? ?庫中的消息類型(可以在幫助文檔中查找):
? ? ? ? ?打印點擊位置和滾輪方向(+120是前,-120是后)
int main()
{//創建窗口initgraph(500, 500, EX_SHOWCONSOLE);//定義消息結構體變量ExMessage msg = { 0 };//套入死循環,便于多次檢測消息while (1){//獲取消息(消息地址,控制目標(這里是鼠標))if (peekmessage(&msg, EX_MOUSE)){//(msg.message可以訪問消息類型)switch (msg.message){case WM_LBUTTONDOWN: // 左鍵按下printf("左鍵按下 pos(%d,%d)\n", msg.x, msg.y);break;case WM_RBUTTONDOWN: // 右鍵按下printf("右鍵按下 pos(%d,%d)\n", msg.x, msg.y);break;case WM_MBUTTONDOWN: // 中鍵按下printf("中鍵按下 pos(%d,%d)\n", msg.x, msg.y);break;case WM_MOUSEWHEEL: // 滾輪滾動printf("滾輪滾動 dir(%d)\n", msg.wheel);break;case WM_LBUTTONDBLCLK: // 左鍵雙擊printf("左鍵雙擊pos(%d,%d)\n", msg.x, msg.y);break;}}}return 0;
}
? ? ? ? 結合鍵盤
int main()
{//創建窗口initgraph(500, 500, EX_SHOWCONSOLE);//定義消息結構體變量ExMessage msg = { 0 };//套入死循環,便于多次檢測消息while (1){//獲取消息(這次獲取的是鍵盤消息)if (peekmessage(&msg, EX_KEY)){//按鍵按下if (msg.message == WM_KEYDOWN){printf("按鍵按下\n");}//按鍵抬起if (msg.message == WM_KEYUP){printf("按鍵抬起\n");}}}return 0;
}
? ? ? ? ?檢測具體按下了哪個鍵
int main()
{//創建窗口initgraph(500, 500, EX_SHOWCONSOLE);//定義消息結構體變量ExMessage msg = { 0 };//套入死循環,便于多次檢測消息while (1){//獲取消息(這次獲取的是鍵盤消息)if (peekmessage(&msg, EX_KEY)){//按鍵按下if (msg.message == WM_KEYDOWN){printf("按鍵按下\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 'A':printf("AAA\n");break;case 'C':printf("CCC\n");break;}}//按鍵抬起if (msg.message == WM_KEYUP){printf("按鍵抬起\n");}}}return 0;
}
(2)畫個移動圓形
#include<easyx.h>//easyx的頭文件
#include<windows.h>
#include<iostream>
using namespace std;int main()
{//創建窗口initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//圓形屬性int x = 50;int y = 50;int r = 30;int speed = 3;int vx = 0;int vy = 0;//開啟雙緩沖避免閃屏(一般是開始繪圖時就要開啟)BeginBatchDraw();//定義消息結構體變量ExMessage msg = { 0 };//套入死循環,便于多次檢測消息while (1){//清除上一幀的內容cleardevice();//獲取消息(這次獲取的是鍵盤消息)if (peekmessage(&msg, EX_KEY)){//按鍵按下if (msg.message == WM_KEYDOWN){switch (msg.vkcode){case VK_UP:vy = -1;break;case VK_DOWN:vy = 1;break;case VK_LEFT:vx = -1;break;case VK_RIGHT:vx = 1;break;}}else if (msg.message == WM_KEYUP){switch (msg.vkcode){case VK_UP:vy = 0;break;case VK_DOWN:vy = 0;break;case VK_LEFT:vx = 0;break;case VK_RIGHT:vx = 0;break;}}}//更新小球位置x += speed * vx;y += speed * vy;//繪制小球setlinecolor(RED);circle(x, y, r);setfillcolor(BLUE);fillcircle(x, y, 30);//加載雙緩沖FlushBatchDraw();//這個為了控制幀率,不寫會導致小球直接飛掉Sleep(10);}//結束雙緩沖EndBatchDraw();return 0;
}
(3)按鈕制作
五、幀率控制
(1)這個的問題是出現閃屏,沒有控制數字改變的速度
int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setbkmode(TRANSPARENT);int score = 0;char str[50] = "";while (1){sprintf_s(str, "Score:%d", score++);settextcolor(BLACK);//用于刷新分數,防止分數重疊cleardevice();outtextxy(20, 20, str);getchar();}return 0;
}
(2)加入雙緩沖防止閃屏
? ? ? ? 1.這是第一種,局部使用
int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setbkmode(TRANSPARENT);int score = 0;char str[50] = "";while (1){sprintf_s(str, "Score:%d", score++);settextcolor(BLACK);BeginBatchDraw();cleardevice();outtextxy(20, 20, str);EndBatchDraw();getchar();}return 0;
}
? ? ? ? 2.這是第二種,全局使用
int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setbkmode(TRANSPARENT);BeginBatchDraw();int score = 0;char str[50] = "";while (1){sprintf_s(str, "Score:%d", score++);settextcolor(BLACK);cleardevice();outtextxy(20, 20, str);//這個寫在繪制后FlushBatchDraw();getchar();}EndBatchDraw();return 0;
}
(3)加入幀率控制部分
int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setbkmode(TRANSPARENT);//60FPS定義//clock_t就是longconst clock_t FPS = 1000 / 60;//1s/60幀 每一幀應該花費的時間int starttime = 0;//用于保存一次開始時的時間int freamtime = 0;//用于進行一次循環的時間BeginBatchDraw();int score = 0;char str[50] = "";while (1){//clock返回的時程序進行到現在的時間starttime = clock();sprintf_s(str, "Score:%d", score++);settextcolor(BLACK);cleardevice();outtextxy(20, 20, str);FlushBatchDraw();freamtime = clock() - starttime;if (freamtime > 0){//暫停使單次時間達到60FPSSleep(FPS - freamtime);}getchar();}EndBatchDraw();return 0;
}
六、圖片相關
(1)首先要有把圖片保存到工程相關的地方
(2)基本操作
int main()
{//這里的窗口大小和圖片屬性的大小相同initgraph(2512, 1373, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//定義圖片變量IMAGE img;//加載圖片(1.絕對路徑 2.相對路徑)//1. loadimage(&img, "D:\\代碼\\界面庫學習\\kon.jpg");//2. loadimage(&img,"界面庫學習/kon.jpg");相對路徑和main.cpp在同一個文件夾里面//分隔符要么是\\,要么是///一般推薦第二種,便于代碼移植loadimage(&img, "D:\\代碼\\界面庫學習\\界面庫學習\\kon.png");//輸出圖片//前兩個參數是圖片左上角的坐標putimage(0, 0, &img);getchar();return 0;
}
?(2)原圖和掩碼圖
? ? ? ? 上面的例子有一個明顯的缺點,圖片的張貼會覆蓋背景
int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//定義圖片變量IMAGE img;loadimage(&img, "D:\\代碼\\界面庫學習\\界面庫學習\\ghost-down.jpg");//輸出圖片putimage(100, 100, &img);getchar();return 0;
}
? ? ? ? 把原圖和它的掩碼圖同時加載,就可以避免背景覆蓋問題
#include<easyx.h>//easyx的頭文件
#include<windows.h>
#include<iostream>
#include<time.h>
using namespace std;int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();BeginBatchDraw();//定義圖片變量IMAGE img;IMAGE img_mask;loadimage(&img_mask, "D:\\代碼\\界面庫學習\\界面庫學習\\ghost-mask.jpg");loadimage(&img, "D:\\代碼\\界面庫學習\\界面庫學習\\ghost-down.jpg");//輸出圖片(先張貼掩碼圖,在張貼原圖)putimage(100, 100, &img_mask, NOTSRCERASE);putimage(100, 100, &img, SRCINVERT);FlushBatchDraw();getchar();EndBatchDraw();return 0;
}
(4)動態過程
#include<easyx.h>//easyx的頭文件
#include<windows.h>
#include<iostream>
#include<time.h>
using namespace std;int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();int FPS = 1000 / 60;int starttime = 0;int freamtime = 0;BeginBatchDraw();//定義圖片變量IMAGE img1;IMAGE img2;IMAGE img3;loadimage(&img1, "D:\\代碼\\界面庫學習\\界面庫學習\\ghost1-down.jpg");loadimage(&img2, "D:\\代碼\\界面庫學習\\界面庫學習\\ghost2-down.jpg");loadimage(&img3, "D:\\代碼\\界面庫學習\\界面庫學習\\ghost3-down.jpg");IMAGE image[3] = { img1,img2,img3 };while (1){for (int i = 0; i < 3; i++){//先清空屏幕,再貼圖cleardevice();putimage(100, 100, image + i);starttime = clock();FlushBatchDraw();freamtime = clock() - starttime;if (freamtime > 0){Sleep(FPS - freamtime);}FlushBatchDraw();getchar();}}EndBatchDraw();return 0;
}
(5)精靈表動畫
七、音樂播放
(1)基本操作
#include<easyx.h>
//下面這三串代碼是播放音樂必要的
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
//
#include<iostream>
using namespace std;int main()
{//先open再play,只播放一次mciSendString("open D:\\代碼\\界面庫學習\\界面庫學習\\Start.mp3", NULL, 0, NULL);mciSendString("play D:\\代碼\\界面庫學習\\界面庫學習\\Start.mp3", NULL, 0, NULL);getchar();return 0;
}
(2)簡便寫法與調整音量大小
#include<easyx.h>
//下面這三串代碼是播放音樂必要的
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
//
#include<iostream>
using namespace std;int main()
{//先open再play,只播放一次//簡便寫法mciSendString("open D:\\代碼\\界面庫學習\\界面庫學習\\Start.mp3 alias bgm", NULL, 0, NULL);mciSendString("play bgm", NULL, 0, NULL);//調整音量大小mciSendString("setaudio bgm volume to 50", NULL, 0, NULL);getchar();return 0;
}
(3)播放錯誤檢查
#include<easyx.h>
//下面這三串代碼是播放音樂必要的
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
//
#include<iostream>
using namespace std;int main()
{//先open再play,只播放一次//簡便寫法mciSendString("open D:\\代碼\\界面庫學習\\界面庫學習\\Start.mp3 alias bgm", NULL, 0, NULL);mciSendString("play bgm", NULL, 0, NULL);//調整音量大小MCIERROR ret = mciSendString("setaudio bgm volume to 50", NULL, 0, NULL);//通過返回值確認是否播放成功if (ret != 0){//獲取錯誤信息char err[100] = { 0 };mciGetErrorString(ret, err, sizeof(err));}getchar();return 0;
}
(5)函數封裝
? ? ? ? 可以嘗試寫一個參數只有路徑字符串的播放音樂的函數
? ? ? ? 這個是示例
(6)用于播放音效的函數
?????????這個函數只能播放.wav格式的音樂