最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年08月15日 16:38:18   作者:逐夢之  
此篇文章用于記錄學(xué)習(xí)C++封裝音樂播放按鈕,封裝將對(duì)象的屬性和行為作為一個(gè)整體,表現(xiàn)生活中的事物、將屬性和行為加以權(quán)限控制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、準(zhǔn)備工作:音樂、開發(fā)工具VS stdio及圖形庫工具

2、設(shè)計(jì)思路:先加載音樂,再通過點(diǎn)擊不同的按鈕執(zhí)行不同的操作(播放音樂,暫停音樂、繼續(xù)播放、結(jié)束播放)

繪制按鈕我們通過一個(gè)按鈕button類來操作,這樣數(shù)據(jù)會(huì)存在一些必要的訪問數(shù)據(jù)權(quán)限,并可以將多個(gè)函數(shù)聲明寫在同一個(gè)類中,調(diào)用只需使用 " 類名.函數(shù)名 “即可調(diào)用里面的函數(shù)

按鈕類頭文件:-----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;
};

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

注意:在類外寫類內(nèi)部函數(shù)的定義時(shí),需要加類名限定

1、初始化按鈕的一些參數(shù):如按鈕的長寬高、顏色和按鈕上的文字內(nèi)容:

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、求出文字所在矩形左上角的坐標(biāo)
    int xx = x+(w - textw) / 2;
    int yy = y+(h - texth) / 2;
    setbkmode(TRANSPARENT);
    settextcolor(BLACK);
    outtextxy(xx, yy, str.c_str());
}

注意:這里有一個(gè)文字在矩形框中居中顯示的:

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

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

步驟:

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

2、求出h1、w1的值

3、外矩形的寬高分別加上w1,h1就是需要繪制里面文字所在的矩形框的左上角的坐標(biāo)。繪制一個(gè)矩形只需直到矩形左上角的坐標(biāo)和矩形的寬高即可繪制繪制一個(gè)矩形。

4、判斷鼠標(biāo)是否在按鈕中---在矩形中矩形顯示一種顏色,不在顯示另外一種顏色

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、判斷鼠標(biāo)是否點(diǎn)擊矩形框

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

主函數(shù)---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), "繼續(xù)(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;
}

到此這篇關(guān)于C++音樂播放按鈕的封裝過程詳解的文章就介紹到這了,更多相關(guān)C++封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++超詳細(xì)講解貪心策略的設(shè)計(jì)及解決會(huì)場安排問題

    C++超詳細(xì)講解貪心策略的設(shè)計(jì)及解決會(huì)場安排問題

    為了更好的應(yīng)對(duì)《算法設(shè)計(jì)與分析》這門課程,我把書上以及老師講過的案例都詳細(xì)的做一個(gè)重現(xiàn)及解剖,讓你熟記每一個(gè)潛在的考點(diǎn),希望能給大家?guī)椭?/div> 2022-05-05
  • C++字符串反轉(zhuǎn)的幾種方法

    C++字符串反轉(zhuǎn)的幾種方法

    通過不同的方法,實(shí)現(xiàn)對(duì)所輸入字符串的反轉(zhuǎn),具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • C語言實(shí)現(xiàn)乒乓球比賽

    C語言實(shí)現(xiàn)乒乓球比賽

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)乒乓球比賽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 詳解C/C++高精度(加減乘除)算法中的壓位優(yōu)化

    詳解C/C++高精度(加減乘除)算法中的壓位優(yōu)化

    在高精度計(jì)算中數(shù)組的每個(gè)元素存儲(chǔ)一位10進(jìn)制的數(shù)字,這樣的存儲(chǔ)方式并不是最優(yōu)的,32位的整型其實(shí)至少可以存儲(chǔ)9位高精度數(shù)字,數(shù)組元素存儲(chǔ)更多的位數(shù)就是壓位優(yōu)化。本文將展示壓位優(yōu)化的原理以及壓9位的實(shí)現(xiàn)和性能對(duì)比,需要的可以參考一下
    2023-01-01
  • 十個(gè)C++惡搞朋友的代碼合集

    十個(gè)C++惡搞朋友的代碼合集

    這篇文章主要為大家整理了十個(gè)C++中可以惡搞朋友的代碼合集(注意!從第五個(gè)開始為危險(xiǎn)/永久性程序,請慎重使用),感興趣的小伙伴可以收藏一下
    2023-02-02
  • 淺析C++中memset,memcpy,strcpy的區(qū)別

    淺析C++中memset,memcpy,strcpy的區(qū)別

    本篇文章是對(duì)C++中memset,memcpy,strcpy的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • C++制作簡單的計(jì)算器功能

    C++制作簡單的計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了C++制作簡單的計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C語言實(shí)現(xiàn)BMP圖像開運(yùn)算處理

    C語言實(shí)現(xiàn)BMP圖像開運(yùn)算處理

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)BMP圖像開運(yùn)算處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++ 中私有繼承的作用

    C++ 中私有繼承的作用

    這篇文章主要介紹了C++ 中私有繼承的作用的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • Qt圖形圖像開發(fā)之曲線圖模塊QCustomplot庫生成靜態(tài)、動(dòng)態(tài)曲線詳細(xì)教程圖解

    Qt圖形圖像開發(fā)之曲線圖模塊QCustomplot庫生成靜態(tài)、動(dòng)態(tài)曲線詳細(xì)教程圖解

    這篇文章主要介紹了Qt圖形圖像開發(fā)之曲線圖模塊QCustomplot庫畫靜態(tài)、動(dòng)態(tài)曲線詳細(xì)教程圖解,需要的朋友可以參考下
    2020-03-03

最新評(píng)論

镇宁| 轮台县| 云南省| 柳江县| 二连浩特市| 徐水县| 原平市| 原平市| 伊吾县| 定南县| 木里| 育儿| 潞西市| 浮梁县| 甘孜| 丰县| 介休市| 岢岚县| 金昌市| 武威市| 海淀区| 连云港市| 沧州市| 屏东市| 台安县| 固安县| 徐闻县| 清新县| 宜都市| 瑞昌市| 阿克| 全州县| 北海市| 门源| 南通市| 澄江县| 云梦县| 北京市| 黎川县| 南宁市| 平武县|