亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

3.JUCE——Menus菜單控件(1)

2019-11-11 05:08:20
字體:
來源:轉載
供稿:網友

一:程序效果

菜單6為自定義菜單。

二:菜單程序

2.1 新建JUCE GUI空項目,添加模版 MainWindow.h , MainWindow.cpp 和 Main.cpp。

2.2 新建MenusDemo.h 和 MenusDemo.cpp文件。

MenusDemo.h:

/*  ==============================================================================    MenusDemo.h    Created: 6 Feb 2017 3:21:45pm    Author:  magewell  ==============================================================================*/#ifndef MENUSDEMO_H_INCLUDED#define MENUSDEMO_H_INCLUDED#include "../JuceLibraryCode/JuceHeader.h"enum CommandIDs{	//menu1	menuDemoOneOne = 0x2000,	menuDemoOneTwo = 0x2001,	menuDemoOneThree = 0x2002,	//menu2	menuDemoTwoOne = 0x2003,	menuDemoTwoTwo = 0x2004,	menuDemoTwoThree = 0x2005,	menuDemoTwoFour = 0x2006,	//menu3	menuDemoThreeOne = 0x2007,	menuDemoThreeTwo = 0x2008,	menuDemoThreeThree = 0x2009,	menuDemoThreeFour = 0x200a,	//menu4	menuDemoFourOne = 0x200b,	menuDemoFourTwo = 0x200c,	menuDemoFourThree = 0x200d,	//menu5	menuDemoFiveOne = 0x2100,	menuDemoFiveTwo = 0x2101,	menuDemoFiveThree = 0x2102};class MenusDemo : public Component,	public MenuBarModel,	public Button::Listener{public:	MenusDemo();	~MenusDemo();	//======================================override	void resized() override;	StringArray getMenuBarNames() override;	PopupMenu getMenuForIndex(int menuIndex, const String& /*menuName*/) override;	void menuItemSelected(int menuItemID, int /*topLevelMenuIndex*/) override;	void buttonClicked(Button* button) override;PRotected:	PopupMenu getDummyPopupMenu();private:	TextButton popupButton;	ScopedPointer<MenuBarComponent> menuBar;	//==============================================================================	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MenusDemo)};#endif  // MENUSDEMO_H_INCLUDEDCommandIDs 為定義的菜單項ID,當菜單被點擊時返回這個值。

JUCE基于MVC架構設計,因此實現菜單需要繼承 MenuBarModel 。

菜單類主要完成對以下幾個功能的重寫:

void resized() override; 對Component類的重寫,大小改變時調用,一般在內部重繪子組件(例如本例的TextButton)。StringArray getMenuBarNames() override;  對MenuBarModel 類的重寫,返回菜單名稱。PopupMenu getMenuForIndex(int menuIndex, const String& /*menuName*/) override; 對 MenuBarModel類的重寫,返回菜單子項。void menuItemSelected(int menuItemID, int /*topLevelMenuIndex*/) override; 對 MenuBarModel類的重寫,菜單選擇事件響應。 void buttonClicked(Button* button) override;對 Button::Listener類的重寫,TextButton的點擊事件響應。

MenusDemo.cpp:

/*  ==============================================================================    MenusDemo.cpp    Created: 6 Feb 2017 3:21:45pm    Author:  magewell  ==============================================================================*/#include "MenusDemo.h"//Construct/DeConstructMenusDemo::MenusDemo(){	menuBar = new MenuBarComponent(this);	addAndMakeVisible(menuBar);	popupButton.setButtonText("Show Popup Menu");	popupButton.setTriggeredOnMouseDown(true);	popupButton.addListener(this);	addAndMakeVisible(popupButton);}MenusDemo::~MenusDemo(){	PopupMenu::dismissAllActiveMenus();	popupButton.removeListener(this);}//overridevoid MenusDemo::resized(){	Rectangle<int> area(getLocalBounds());	menuBar->setBounds(area.removeFromTop(LookAndFeel::getDefaultLookAndFeel().getDefaultMenuBarHeight()));	area.removeFromTop(20);	area = area.removeFromTop(33);	popupButton.setBounds(area.removeFromLeft(200).reduced(5));}StringArray MenusDemo::getMenuBarNames(){	const char* const names[] = { "Menu1", "Menu2", "Menu3", "Menu4", "Menu5", "Menu6", nullptr };	return StringArray(names);}PopupMenu MenusDemo::getMenuForIndex(int menuIndex, const String& /*menuName*/){	PopupMenu menu;	if (menuIndex == 0)	{		menu.addItem(menuDemoOneOne,"menuDemoOneOne");		menu.addItem(menuDemoOneTwo,"menuDemoOneTwo");		menu.addSeparator();		menu.addItem(menuDemoOneThree,"menuDemoOneThree");	}	else if (menuIndex == 1)	{		menu.addItem(menuDemoTwoOne,"menuDemoTwoOne");		menu.addItem(menuDemoTwoTwo,"menuDemoTwoTwo");		menu.addItem(menuDemoTwoThree,"menuDemoTwoThree");		menu.addSeparator();		menu.addItem(menuDemoTwoFour,"menuDemoTwoFour");	}	else if (menuIndex == 2)	{		menu.addItem(menuDemoThreeOne,"menuDemoThreeOne");		menu.addItem(menuDemoThreeTwo,"menuDemoThreeTwo");		menu.addItem(menuDemoThreeThree,"menuDemoThreeThree");		menu.addItem(menuDemoThreeFour,"menuDemoThreeFour");	}	else if (menuIndex == 3)	{		menu.addItem(menuDemoFourOne,"menuDemoFourOne");		menu.addItem(menuDemoFourTwo,"menuDemoFourTwo");		menu.addItem(menuDemoFourThree,"menuDemoFourThree");	}	else if (menuIndex == 4)	{		menu.addItem(menuDemoFiveOne,"menuDemoFiveOne");		menu.addItem(menuDemoFiveTwo,"menuDemoFiveTwo");		menu.addItem(menuDemoFiveThree,"menuDemoFiveThree");	}	else if (menuIndex == 5)	{		return getDummyPopupMenu();	}	return menu;}void MenusDemo::menuItemSelected(int menuItemID, int /*topLevelMenuIndex*/){	//every command enter this...	printf("commands .../n");}void MenusDemo::buttonClicked(Button* button){	if (button == &popupButton)		getDummyPopupMenu().showMenuAsync(PopupMenu::Options().withTargetComponent(&popupButton), nullptr);}//protectedPopupMenu MenusDemo::getDummyPopupMenu(){	PopupMenu m;	m.addItem(1, "Normal item");	m.addItem(2, "Disabled item", false);	m.addItem(3, "Ticked item", true, true);	m.addColouredItem(4, "Coloured item", Colours::green);	m.addSeparator();	for (int i = 0; i < 8; ++i)	{		PopupMenu subMenu;		for (int s = 0; s < 8; ++s)		{			PopupMenu subSubMenu;			for (int item = 0; item < 8; ++item)				subSubMenu.addItem(1000 + (i * s * item), "Item " + String(item + 1));			subMenu.addSubMenu("Sub-sub menu " + String(s + 1), subSubMenu);		}		m.addSubMenu("Sub menu " + String(i + 1), subMenu);	}	return m;}當菜單被點擊時進入 menuItemSelected 消息響應。

三:將MenusDemo加入主Component:

class MainContentComponent : public Component{public:	MainContentComponent()	{		menusDemo = new MenusDemo;		addAndMakeVisible(menusDemo);	}	~MainContentComponent()	{		menusDemo = nullptr;	}	//=================================================override	void paint(Graphics &g) override	{		g.fillAll(Colour(0xff001F36));		//g.setFont(Font(16.0f));		//g.setColour(Colours::white);		//g.drawText("Hello World!", getLocalBounds(), Justification::centred, true);	}	void resized() override	{		Rectangle<int> area(getLocalBounds());		menusDemo->setBounds(area);	}private:	ScopedPointer<MenusDemo> menusDemo;	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MainContentComponent);};


上一篇:理解函數聲明

下一篇:正交基

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品中文字幕有码专区| 81精品国产乱码久久久久久| 国产精品久久久久久超碰| 国产91精品最新在线播放| 69视频在线播放| 久久久久中文字幕| 亚洲三级黄色在线观看| 欧美日韩国产麻豆| 成人久久久久久久| 91久久精品美女| 在线电影av不卡网址| 九九热这里只有在线精品视| 亚洲韩国日本中文字幕| 韩国精品久久久999| 91精品中国老女人| 国产精品网红福利| 亚洲已满18点击进入在线看片| 视频在线观看一区二区| 欧美黄色小视频| 欧美激情国产精品| 欧美成人免费网| 91精品在线国产| 91在线观看免费高清完整版在线观看| 亚洲久久久久久久久久久| 欧美激情一区二区三级高清视频| 欧美国产高跟鞋裸体秀xxxhd| 国产精品久久视频| 欧美日韩国产色| 欧美性猛交xxxx富婆| 成人在线国产精品| 欧美丰满少妇xxxx| 精品亚洲国产视频| 欧美综合在线第二页| 国产精品96久久久久久又黄又硬| 久久国产一区二区三区| 国产一区二中文字幕在线看| 91在线视频免费| 日韩动漫免费观看电视剧高清| 亚洲成人黄色在线观看| 精品亚洲永久免费精品| 日韩美女视频在线观看| 亚洲午夜精品久久久久久性色| 亚洲欧美国产精品专区久久| 国产成人精品在线观看| 亚洲一区二区三区xxx视频| 欧美成人免费小视频| 57pao成人永久免费视频| 国产精品久久久久久久久久久新郎| 国产亚洲精品日韩| 欧美成人免费网| 91探花福利精品国产自产在线| 久久久999精品| 亚洲自拍偷拍视频| 欧美成人中文字幕在线| 国产成人一区二| 伊人久久五月天| 国产亚洲精品久久久久久777| 78m国产成人精品视频| 国产日韩欧美另类| 中文字幕国产日韩| 国模gogo一区二区大胆私拍| 国模精品视频一区二区| 国产一区二区久久精品| 91久久国产综合久久91精品网站| 国产精品久久久久久久久粉嫩av| 亚洲国产精品va在线看黑人动漫| 国产精品爱啪在线线免费观看| 久久伊人精品天天| 91a在线视频| 亚洲精品自拍第一页| 欧美激情小视频| 66m—66摸成人免费视频| 午夜精品一区二区三区在线视频| 日韩中文字幕免费视频| 精品久久久久久久久久| 亚洲国产小视频在线观看| 丝袜情趣国产精品| 国产精品中文字幕在线观看| 久久久人成影片一区二区三区观看| 欧洲亚洲在线视频| 美女精品视频一区| 国产成人久久久精品一区| 国产做受69高潮| 国产精品高潮呻吟久久av无限| 97精品欧美一区二区三区| 米奇精品一区二区三区在线观看| 日韩电影中文字幕在线观看| 日韩av在线网| 在线性视频日韩欧美| 亚洲自拍偷拍第一页| 欧美一级视频免费在线观看| 亚洲国产成人91精品| 成人在线一区二区| 91精品国产自产在线| 成人免费视频a| 中文字幕综合在线| 中文字幕亚洲一区在线观看| 欧美午夜激情视频| 中文一区二区视频| 欧美亚洲成人精品| 国产一区二区在线免费视频| 国产成人精品国内自产拍免费看| 国内精品久久久久久影视8| 亚洲欧美日本精品| 日韩av中文在线| 91精品国产色综合久久不卡98| 91精品一区二区| 久久成年人视频| 久久久久久久久久久av| 日韩大陆欧美高清视频区| 国产亚洲激情视频在线| 久久精品电影网| 自拍偷拍亚洲在线| www欧美日韩| 韩国视频理论视频久久| 欧美孕妇孕交黑巨大网站| 亚洲热线99精品视频| 97精品视频在线| 国产精品大片wwwwww| 欧美大片大片在线播放| 一个色综合导航| 亚洲国产精品久久久| 黑人狂躁日本妞一区二区三区| 亚洲第一综合天堂另类专| 日韩精品亚洲视频| 法国裸体一区二区| 亚洲a一级视频| 日韩精品极品毛片系列视频| 一个人www欧美| 久久久久久国产三级电影| 久久视频在线视频| 中文字幕日韩有码| 国产成人jvid在线播放| 欧美性猛交xxxx黑人| 欧美极品在线视频| 欧美色另类天堂2015| 日韩中文字在线| 日韩精品丝袜在线| 久久久欧美一区二区| 国产免费观看久久黄| 亚洲欧美日韩成人| 亚洲欧洲一区二区三区久久| www.亚洲一二| 日韩毛片在线观看| 精品日本美女福利在线观看| 欧美黑人xxxⅹ高潮交| 国产精品视频地址| 精品亚洲一区二区三区在线播放| 97成人超碰免| 中文字幕亚洲欧美在线| 欧美成人精品影院| 国产精品免费视频久久久| 浅井舞香一区二区| 亚洲精品之草原avav久久| 久久精品国产一区二区三区| 成人国产亚洲精品a区天堂华泰| 中文字幕最新精品| 日本亚洲欧洲色| 国产精品美腿一区在线看| 欧美亚洲第一页| 日韩在线观看免费网站| 成人免费视频xnxx.com| 精品久久久久久久久久ntr影视| 国产日韩欧美综合|