首頁 > 軟體

C++音樂播放按鈕的封裝過程詳解

2022-08-15 22:03:44

1、準備工作:音樂、開發工具VS stdio及圖形庫工具

2、設計思路:先載入音樂,再通過點選不同的按鈕執行不同的操作(播放音樂,暫停音樂、繼續播放、結束播放)

繪製按鈕我們通過一個按鈕button類來操作,這樣資料會存在一些必要的存取資料許可權,並可以將多個函數宣告寫在同一個類中,呼叫只需使用 " 類名.函數名 “即可呼叫裡面的函數

按鈕類標頭檔案:-----button.h

#include "graphics.h"
#include <iostream>
#include <string>
using namespace std;
class Button
{
public:
	void Show();
	void InitButton(int xx, int yy, int ww, int hh, COLORREF color, string text);
	bool InButton(ExMessage message);
	bool OnClickButton(ExMessage message);
private:
	int x;
	int y;
	int w;
	int h;
	COLORREF curColor;
	COLORREF oldColor;
	string str;
};

寫類中函數的定義(即寫函數的函數體) ----button.cpp

注意:在類外寫類內部函數的定義時,需要加類名限定

1、初始化按鈕的一些引數:如按鈕的長寬高、顏色和按鈕上的文字內容:

void Button::InitButton(int xx, int yy, int ww, int hh, COLORREF color, string text)
{
    x = xx;
    y = yy;
    w = ww;
    h = hh;
    curColor = color;
    oldColor = color;
    str = text;
}

2、繪製矩形按鈕:

void Button::Show()
{
    //矩形框
    setfillcolor(curColor);
    solidrectangle(x, y, x + w, y + h);
    //文字
    settextstyle(15, 0, "FZZJ-XHFTJW.TTF");
    //1、求文字所在矩形的寬高
    int textw = textwidth(str.c_str());
    int texth = textheight(str.c_str());
    //2、求h1 w1
    //(w - textw) / 2   <=> w1
    //(h - texth) / 2   <=> h1
    //3、求出文字所在矩形左上角的座標
    int xx = x+(w - textw) / 2;
    int yy = y+(h - texth) / 2;
    setbkmode(TRANSPARENT);
    settextcolor(BLACK);
    outtextxy(xx, yy, str.c_str());
}

注意:這裡有一個文字在矩形框中居中顯示的:

如何將文字在矩形框中居中顯示?

如圖:要使文字在矩形中居中顯示: h1=h2 ; w1=w2

步驟:

1、求出文字的 高(textwidth(文字)) 與 寬(text(文字)) 返回的是一個整數

2、求出h1、w1的值

3、外矩形的寬高分別加上w1,h1就是需要繪製裡面文字所在的矩形框的左上角的座標。繪製一個矩形只需直到矩形左上角的座標和矩形的寬高即可繪製繪製一個矩形。

4、判斷滑鼠是否在按鈕中---在矩形中矩形顯示一種顏色,不在顯示另外一種顏色

bool Button::InButton(ExMessage message)
{
    if (message.x >= x && message.x <= x + w && message.y >= y && message.y <= y + h) 
    {
        curColor = RGB(236, 244, 255);
        return true;
    }
    curColor = oldColor;
    return false;
}

5、判斷滑鼠是否點選矩形框

bool Button::OnClickButton(ExMessage m)
{
    if (InButton(m) && m.message == WM_LBUTTONDOWN) 
    {
        return true;
    }
    return false;
}

主函數---main

載入音樂,繪製按鈕,按鈕訊息的製作,顯示介面等

#include "button.h"
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
int main() 
{
	initgraph(800, 600);
	IMAGE mm;
	loadimage(&mm, "mm.jpg",800,600);
	Button* play = new Button;
	play->InitButton(5, 5, 100, 25, RGB(204, 213, 240), "播放(play)");
	Button* pause = new Button;
	pause->InitButton(110, 5, 100, 25, RGB(204, 213, 240), "暫停(pause)");
	Button* resume = new Button;
	resume->InitButton(215, 5, 100, 25, RGB(204, 213, 240), "繼續(resume)");
	Button* stop = new Button;
	stop->InitButton(320, 5, 100, 25, RGB(204, 213, 240), "停止(stop)");
	ExMessage m;
	BeginBatchDraw();
	while (1) 
	{
		putimage(0, 0, &mm);
		peekmessage(&m);
		play->Show();
		if (play->OnClickButton(m)) 
		{
			mciSendString("open 1.mp3", 0, 0, 0);
			mciSendString("play 1.mp3", 0, 0, 0);
		}
		pause->Show();
		if (pause->OnClickButton(m)) 
		{
			mciSendString("pause 1.mp3", 0, 0, 0);
		}
		resume->Show();
		if (resume->OnClickButton(m))
		{
			mciSendString("resume 1.mp3", 0, 0, 0);
		}
		stop->Show();
		if (stop->OnClickButton(m))
		{
			mciSendString("close 1.mp3", 0, 0, 0);
		}
		FlushBatchDraw();
	}
	EndBatchDraw();
	closegraph();
	return 0;
}

到此這篇關於C++音樂播放按鈕的封裝過程詳解的文章就介紹到這了,更多相關C++封裝內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com