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

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

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

2019-11-11 05:47:10
字體:
來源:轉載
供稿:網友

一:程序效果

菜單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);};


上一篇:共享文件問題

下一篇:201409-2

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美与欧洲交xxxx免费观看| 国产精品免费小视频| 国产日韩在线亚洲字幕中文| 国产91精品黑色丝袜高跟鞋| 国产欧美韩国高清| 亚洲黄色片网站| 欧美激情乱人伦| 国产日韩欧美在线视频观看| 韩国欧美亚洲国产| 97超碰蝌蚪网人人做人人爽| 免费不卡在线观看av| 伊人男人综合视频网| 日韩欧美一区二区在线| 91精品国产九九九久久久亚洲| 亚洲网站视频福利| 成人免费视频97| 国产精品永久免费视频| 国产精品久久久久免费a∨| 蜜月aⅴ免费一区二区三区| 永久555www成人免费| 久久欧美在线电影| 国产精品黄视频| 欧美xxxx18性欧美| 国产精品久久久91| 中文字幕少妇一区二区三区| 2025国产精品视频| 国产成人精品免费久久久久| 国产精品久久久久久av福利| 69影院欧美专区视频| 亚洲成人激情小说| 米奇精品一区二区三区在线观看| 欧美日韩一区二区在线播放| 国内偷自视频区视频综合| 亚洲第一福利网站| 欧亚精品在线观看| 欧美日韩第一页| 在线观看国产欧美| 国内精品国产三级国产在线专| 97精品伊人久久久大香线蕉| 欧美精品在线观看| 亚洲视频自拍偷拍| 国产精品678| 欧美视频二区36p| 亚州欧美日韩中文视频| 亚洲精品国产综合久久| 久久久久久久成人| 色综合天天狠天天透天天伊人| 亚洲精品videossex少妇| 精品日韩美女的视频高清| 久久影院资源网| 色偷偷亚洲男人天堂| 91av在线视频观看| 91精品视频播放| 日韩激情第一页| 国产噜噜噜噜久久久久久久久| 欧美日韩在线一区| 亚洲天堂免费视频| 欧美激情中文字幕乱码免费| 欧美日韩一区二区三区在线免费观看| 成人免费福利在线| 日韩精品高清视频| 国产一区二区三区四区福利| 国产一区二区三区视频在线观看| www.久久久久久.com| zzijzzij亚洲日本成熟少妇| 国产精品一区二区久久国产| 黄色一区二区在线| 在线观看91久久久久久| 日本乱人伦a精品| 久久久久久av| 日韩免费观看在线观看| 欧美成人午夜视频| 精品精品国产国产自在线| 在线观看日韩专区| 亚洲一区二区久久| 亚洲第一av网| 欧美日韩国产丝袜美女| 欧美性videos高清精品| 久久色免费在线视频| 国产91精品青草社区| 欧美激情视频在线观看| 中文亚洲视频在线| 992tv成人免费视频| 欧美插天视频在线播放| 亚洲成人aaa| 亚洲黄色有码视频| 国产精品视频一区二区三区四| 亚洲第一精品久久忘忧草社区| 久久久成人精品视频| 91欧美精品成人综合在线观看| 2019中文字幕全在线观看| 欧美日韩另类字幕中文| 国产精品国产自产拍高清av水多| 亚洲欧美在线一区二区| 国产玖玖精品视频| 国产精品免费久久久久影院| 在线观看欧美日韩| 疯狂蹂躏欧美一区二区精品| 国产精品天天狠天天看| 精品国产1区2区| 久久久久国产一区二区三区| 国产日韩av在线| 国产亚洲精品久久久久久| 亚洲激情中文字幕| 亚洲自拍欧美另类| 亚洲一区二区国产| 2019日本中文字幕| 欧美性猛交xxxx黑人| 国产精品美女久久久久久免费| www.欧美三级电影.com| 欧美尤物巨大精品爽| 亚洲a中文字幕| 久久久久久一区二区三区| 国产精品自在线| 日本欧美中文字幕| 成人激情视频网| 亚洲精品二三区| 5278欧美一区二区三区| 蜜月aⅴ免费一区二区三区| 亚洲精品综合久久中文字幕| 亚洲精品久久久久久久久久久久| 日本一本a高清免费不卡| 欧美亚洲午夜视频在线观看| 成人欧美一区二区三区黑人孕妇| 亚洲剧情一区二区| 亚洲国产成人精品久久久国产成人一区| 亚洲综合在线中文字幕| 久热在线中文字幕色999舞| 亚洲女人天堂网| 久久久国产一区| 久久久天堂国产精品女人| 中文字幕一区二区三区电影| 91av在线视频观看| 精品国产乱码久久久久久天美| 成人美女av在线直播| 97精品国产97久久久久久| 亚洲黄色免费三级| 久久人人爽国产| 成人黄色激情网| 亚洲在线观看视频网站| 8x拔播拔播x8国产精品| 91美女片黄在线观| 91精品视频网站| 伊人久久久久久久久久久| 欧美成年人网站| 91久久精品一区| 日韩av影院在线观看| 亚洲人成毛片在线播放| 91在线视频导航| 欧美有码在线观看视频| 日本最新高清不卡中文字幕| 热久久免费视频精品| 欧美wwwwww| 日韩av片永久免费网站| 日韩激情视频在线| 欧美高清性猛交| 亚洲免费电影在线观看| 欧美高清videos高潮hd| 国产亚洲免费的视频看| 国产午夜精品麻豆| 欧美大学生性色视频| 亚洲欧洲午夜一线一品| 国产一区二区三区四区福利| 综合136福利视频在线|