<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
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!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45