關于easyx頭文件

一、窗口創建

(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格式的音樂

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83501.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83501.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83501.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【學習記錄】Django Channels + WebSocket 異步推流開發常用命令匯總

文章目錄 &#x1f4cc; 摘要&#x1f9f0; 虛擬環境管理? 創建虛擬環境? 刪除虛擬環境? 激活/切換虛擬環境 &#x1f6e0;? Django 項目管理? 查看 Django 版本? 創建 Django 項目? 創建 Django App &#x1f4ac; Channels 常用操作? 查看 Channels 版本 &#x1f50…

Java線程狀態及其流轉

在Java編程中&#xff0c;線程是一種重要的并發實體。為了更好地理解和管理多線程應用程序&#xff0c;我們需要清楚線程的不同狀態及其流轉機制。本文將詳細介紹Java中線程的幾種主要狀態以及它們之間的轉換關系。 一、線程狀態概述 Java線程的生命周期有多個狀態&#xff0…

LabVIEW雙光子顯微鏡開發

基于LabVIEW 開發高性能雙光子顯微鏡系統&#xff0c;聚焦于生物樣本深層成像與納米材料三維表征。實現了超快激光控制、多維數據采集與實時圖像重建。系統采用飛秒激光光源與高精度振鏡掃描模塊&#xff0c;結合 LabVIEW 的 FPGA 實時控制能力&#xff0c;可對活體組織、熒光納…

數據庫操作-MySQL-4(JDBC編程)

JDBC&#xff1a;通過Java代碼操作mysql數據庫&#xff0c;數據庫會提供一些API供我們調用 MySQL、Oracle、等API有差異&#xff0c;但是Java統一了所有接口&#xff0c;即JDBC&#xff1b; 原始api-驅動包&#xff08;類似轉接頭&#xff09;-統一的api-Java 驅動包&#xff1…

windows修改躍點數調整網絡優先級

Windows有兩個網卡&#xff0c;一個有線網卡&#xff0c;一個無線網卡&#xff0c;通過修改躍點數來調整優先使用的網卡&#xff0c;這種只是眾多設置方式中的其中一種設置方式 文檔編寫時間&#xff1a;2025年6月 1.打開電腦的網絡連接 cmd--ncpa.cpl 在cmd中運行ncpa.cpl可…

實驗設計與分析(第6版,Montgomery著,傅玨生譯) 第10章擬合回歸模型10.9節思考題10.1 R語言解題

本文是實驗設計與分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅玨生譯) 第10章擬合回歸模型10.9節思考題10.1 R語言解題。主要涉及線性回歸、回歸的顯著性、回歸系數的置信區間。 vial <- seq(1, 10, 1) Viscosity <- c(160,171,175,182,184,181,188,19…

【深入 LangChain 的 Model I/O】提示設計、模型調用與輸出解析全解析

目錄 什么是 Model I/O&#xff1f; 一、提示模板&#xff08;PromptTemplate&#xff09; 1.1 什么是提示模板&#xff1f; 1.2 常見提示模板類型 二、模型調用&#xff08;Model Predict&#xff09; 三、輸出解析&#xff08;Output Parser&#xff09; 綜合示例&…

OD 算法題 B卷【跳格子2】

文章目錄 跳格子2 跳格子2 小明和朋友玩跳格子游戲&#xff0c;有n個連續格子組成的圓圈&#xff0c;每個格子有不同的分數&#xff0c;小朋友可以選擇從任意格子起跳&#xff0c;但是不能跳連續的格子&#xff0c;不能回頭跳&#xff0c;也不能超過一圈&#xff0c;給定一個代…

客戶線索商機怎么管?客戶線索商機管理工具哪個好?

做銷售、搞運營的朋友肯定都有過這種煩惱&#xff1a;每天收到海量客戶線索&#xff0c;卻不知道從哪條開始跟進&#xff1b;試了好幾個管理工具&#xff0c;要么功能太復雜&#xff0c;要么用起來不趁手。其實選對客戶線索商機管理工具&#xff0c;就像找到靠譜的 “銷售小助手…

008房屋租賃系統技術揭秘:構建智能租賃服務生態

房屋租賃系統技術揭秘&#xff1a;構建智能租賃服務生態 在房地產租賃市場日益活躍的當下&#xff0c;房屋租賃系統成為連接房東與租客的重要數字化橋梁。該系統集成用戶管理、房屋信息等多個核心模塊&#xff0c;面向管理員、房東和用戶三類角色&#xff0c;通過前臺展示與后…

SpringBoot 系列之集成 RabbitMQ 實現高效流量控制

系列博客專欄&#xff1a; JVM系列博客專欄SpringBoot系列博客 Spring Boot 2.2.1 集成 RabbitMQ 實現高效流量控制 在分布式系統中&#xff0c;消息隊列是實現異步通信、解耦服務的重要組件。RabbitMQ 作為一款成熟的開源消息隊列&#xff0c;廣泛應用于各類項目中。本文將…

新視訊影視官網入口,影視動漫在線播放網站

新視訊影視是一個免費為廣大追劇迷提供在線播放服務的影視平臺&#xff0c;深受眾多影視愛好者的喜愛。它涵蓋了大量免費的VIP電視劇資源、最新上映的大片、好看的綜藝節目以及動漫視頻&#xff0c;是一個播放速度快、資源多的免費影視網站。用戶無需注冊或登錄&#xff0c;即可…

【使用】【經驗】docker 清理未使用的鏡像的命令

docker images prune在 Docker 中清理未使用的鏡像&#xff08;包括懸空鏡像和完全未被引用的鏡像&#xff09;&#xff0c;可以使用以下命令&#xff1a; 1. ?刪除所有懸空鏡像?&#xff08;推薦常用&#xff09; docker image prune?懸空鏡像 (dangling images)?? 是指…

OpenCV CUDA模塊圖像處理------圖像融合函數blendLinear()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數執行 線性融合&#xff08;加權平均&#xff09; 兩個圖像 img1 和 img2&#xff0c;使用對應的權重圖 weights1 和 weights2。 融合公式…

【Typst】6.布局函數

概述 上節我們介紹了文檔結構元素的函數&#xff0c;本節介紹一些控制布局使用的函數&#xff0c;掌握他們之后你可以更進一步的控制頁面元素的布局。 系列目錄 1.Typst概述2.Typst標記語法和基礎樣式3.Typst腳本語法4.導入、包含和讀取5.文檔結構元素與函數6.布局函數 對齊…

【音視頻】FFmpeg 編碼H265

一、概述 實現了讀入本地yuv文件&#xff0c;通過libx265編碼為H265格式&#xff0c;并存儲到本地文件中 二、實現流程 準備文件 在build路徑下準備yuv文件 在項目中添加文件參數&#xff0c;輸出為h265文件&#xff0c;使用libx265編碼 初始化解碼器 通過傳進來的libx265…

ECreator低代碼平臺-文件管理器的使用說明

Ecreator是中山華拓信息技術公司旗下的一款低代碼平臺&#xff0c;主要功能包含&#xff1a;文件管理器&#xff0c;表單數據管理器&#xff0c;儀表盤設計界面&#xff0c;內容頁面自定義等功能&#xff0c;可以用于快速低成本的構建網站和企業內部應用。 下面介紹一下文件管…

高考加油!UI界面生成器!

這個高考助力標語生成器具有以下特點&#xff1a; 視覺設計&#xff1a;采用了藍色為主色調&#xff0c;搭配漸變背景和圓形裝飾元素&#xff0c;營造出寧靜而充滿希望的氛圍&#xff0c;非常適合高考主題。 標語生成&#xff1a;內置了超過 100 條精心挑選的高考加油標語&a…

阿姆達爾定律的演進:古斯塔夫森定律

前言 在上一篇文章《使用阿姆達爾定律來提升效率》中提到的阿姆達爾定律前提是假設問題的規模保持不變&#xff0c;并且給定一臺速度更快的機器&#xff0c;目標是更快地解決問題。然而&#xff0c;在大多數情況下&#xff0c;這并不完全正確。當有一臺更快的機器時&#xff0…

【RabbitMQ】- Channel和Delivery Tag機制

在 RabbitMQ 的消費者代碼中&#xff0c;Channel 和 tag 參數的存在是為了實現消息確認機制&#xff08;Acknowledgment&#xff09;和精細化的消息控制。 Channel 參數 作用 Channel 是 AMQP 協議的核心操作接口&#xff0c;通過它可以直接與 RabbitMQ 交互&#xff1a; 手…