Page 1 of 1

Помогите разобраться с элементами интерфейса

Posted: Mon May 25, 2015 8:43 pm
by Sindbad
Всем привет!
Предпринимаю первые в жизни попытки разработать нормальное оконное приложение.
Такие вещи, как menuBar, statusBar, toolBar в принципе интуитивно понятны.
По примеру стало понятно, как создавать пункты меню, вешать на них обработчики клика и как добавлять что-нибудь (например wxStyledTextCtrl) в рабочую область.
Только вот, пытаясь добавить в рабочую область окна доки, (как у notepad++) столкнулся с трудностями.
Пример, вобщем-то, есть, но разбирая его и пытаясь создать своё, я получаю окно с рабочей областью, которая не рендерится.
Не мог бы кто-нибудь, вкратце, рассказать, как манипулировать этими всеми wxSplitterWindow, wxPanel, wxBoxSizer?
В идеале хочется получить возможность пристыковывать-отстыковывать ресизабельные доки слева, справа и внизу. В доки добавлять рабочие области - вкладками. Нужно только понять иерархию элементов и механизм манипуляции, ну и, возможно, помучить добровольца еще парой глупых "почему") Дальше надеюсь продвинуться по API.
Пишу на PHP (wxPHP), сгодятся пояснения с C++, JS или Python.

Re: Помогите разобраться с элементами интерфейса

Posted: Tue May 26, 2015 7:05 am
by Sindbad
Нашел таки туториал - http://wxwidgets.info/wxaui_tutorial_1_ru/ , мне нужен в данном случае AUI.
Вот только одна проблемка: ошибка при закрытии окна "any pushed event handlers must have been removed".
Вызывал UnInit в деструкторе и пытался перегрузить метод Destroy. Это не дало никакого результата...
UPD.1 Не ясно так же, как растягивать контролы на всю доступную видимую ширину панели, а панель на ширину дока. -1 даёт какие-то непредсказуемые результаты...
UPD.2 Теперь понятно, зачем нужен wxBoxSizer :lol: Может, кому из новичков пригодится:

Code: Select all

		//EDITOR PANE
		//создаем панель с вкладками
		$notebook = new \wxAuiNotebook(
			$this, //экземпляр wxFrame - целевого окна
			wxID_ANY, 
			wxDefaultPosition, 
			new \wxSize(-1, -1), //на всю доступную ширину и высоту
			wxAUI_NB_DEFAULT_STYLE|wxNO_BORDER
		);
		//определяем параметры дока, создаем его, добавляем в него панель вкладок, она будет главной (CenterPane)
		$editInfo = new \wxAuiPaneInfo();
		$editInfo->CenterPane(); 
		$this->Manager->AddPane($notebook, $editInfo); 
		
		//DOCUMENT TAB ADDING
		//создаем панель документа и добавляем её как вкладку
		$m_Page1 = new \wxPanel($notebook, wxID_ANY);
		$notebook->AddPage($m_Page1, "Page1");
		//установил scintilla как редактор документа
		$scite = new \wxStyledTextCtrl(
			$m_Page1, 
			wxID_ANY, 
			wxDefaultPosition
		);
		//а вот теперь - тадам! - чтобы документ растянулся на всю панель, создаем сайзер
		//и добавляем документ сначала в него:
		$m_Page1Sizer = new \wxBoxSizer(wxVERTICAL);
		$m_Page1Sizer->Add($scite, 1, wxALL|wxEXPAND, 0); //0 - это рамка вокруг документа
		//а затем добавляем сайзер в панель
		$m_Page1->SetSizer($m_Page1Sizer);