This page has been translated automatically.
Видеоуроки
Interface
Essentials
Advanced
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Professional (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Players
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Materials and Shaders
Rebuilding the Engine Tools
Двойная точность координат
API
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Сэмплы материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Tutorials
Внимание! Эта версия документация УСТАРЕЛА, поскольку относится к более ранней версии SDK! Пожалуйста, переключитесь на самую актуальную документацию для последней версии SDK.
Внимание! Эта версия документации описывает устаревшую версию SDK, которая больше не поддерживается! Пожалуйста, обновитесь до последней версии SDK.

Управление окнами

UNIGINE provides an advanced toolkit simplifying development of various visual tools, with a large number of widgets and capabilities.UNIGINE предоставляет расширенный инструментарий, упрощающий разработку различных визуальных инструментов, с большим количеством виджетов и возможностей.

For windows creation, the EngineWindow class is used. It allows managing engine windows components, relations with other windows, size, position, and other features.Для создания Windows используется класс EngineWindow. Это позволяет управлять компонентами Windows engine, связями с другими окнами, размером, положением и другими функциями.

All window management operations are performed via the WindowManager class enabling you to access any window of the application, group or stack windows, create various dialogs, and so on.Все операции по управлению окнами выполняются с помощью класса WindowManager, позволяющего вам получить доступ к любому окну приложения, группировать или стыковать окна, создавать различные диалоговые окна и так далее.

Примечание
Usually the engine windows stay available during the whole UNIGINE Engine runtime, so their creation and management must be implemented as a part of the System Logic.Обычно окна движка остаются доступными в течение всего времени выполнения UNIGINE Engine, поэтому их создание и управление должны быть реализованы как часть системной логики .

See AlsoCмотрите также#

Creating WindowsСоздание окон#

To create the engine window, one of the EngineWindow class constructors is used.Для создания окна движка используется один из конструкторов класса EngineWindow .

Исходный код (C++)
// create an engine window of the specified size with the specified name
EngineWindowPtr window_0 = EngineWindow::create("Window", 580, 300);
// create the main engine window of the specified size
EngineWindowPtr window_1 = EngineWindow::create(580, 300, EngineWindow::FLAGS_MAIN);

When the window is created, you can change its appearance and properties, specify the engine tools available for the window and add widgets to its client area. All these operations can be done by means of the EngineWindow class as well.Когда окно создано, вы можете изменить его внешний вид и свойства, указать инструменты движка, доступные для окна, и добавить виджеты в его клиентскую область. Все эти операции также могут быть выполнены с помощью класса EngineWindow.

Исходный код (C++)
// set an icon and a title for the window 
window_1->setIcon("icon.png");
window_1->setTitle("Main Window");

// allow using the window as a nested one
window_1->setNestedUsage(true);

// enable the console, profiler and visualizer for the window
window_1->setConsoleUsage(true);
window_1->setProfilerUsage(true);
window_1->setVisualizerUsage(true);

// add widgets to the client area of the window
window_1->addChild(WidgetLabel::create(window->getSelfGui(), String::format("This is %s window.", window->getTitle())));
window_1->addChild(WidgetButton::create(window->getSelfGui(), window->getTitle()), Gui::ALIGN_CENTER);

To render the engine window, use the show() function:Чтобы отобразить окно движка, используйте функцию show():

Исходный код (C++)
// render the window
window_1->show();

Accessing WindowsДоступ к окнам#

An application window can be accessed via the getWindow() function of the WindowManager class.Доступ к окну приложения можно получить с помощью функции getWindow() класса WindowManager.

Исходный код (C++)
// get the number of windows
int num = WindowManager::getNumWindows();
// check each window
for (int i = 0; i < num; i++)
{
	// get the window with the current index
	EngineWindowPtr window = WindowManager::getWindow(i);
	// change its position and size if it is main
	if (window->isMain())
	{
		window->setPosition(Math::ivec2(1020, 60));
		window->setSize(Math::ivec2(305, 670));
	}
}

There are also some functions (like getMainWindow()) that allow accessing the specific windows (the main, focused, fullscreen window and so on). For example:Существуют также некоторые функции (например, getMainWindow()), которые позволяют получить доступ к определенным окнам ( главное, сфокусированное, полноэкранное окно и так далее). Например:

Исходный код (C++)
// get the main window
EngineWindowPtr main_window = WindowManager::getMainWindow();
// change its position and size
if (main_window)
{
	main_window->setPosition(Math::ivec2(1020, 60));
	main_window->setSize(Math::ivec2(305, 670));
}

Grouping WindowsГруппировка окон#

The engine windows created via the EngineWindow class can be grouped. When two windows are grouped, a new window containing these windows is created. The new window is called a group. The number of windows in the group is unlimited.Окна движка, созданные с помощью класса EngineWindow, могут быть сгруппированы. Когда два окна сгруппированы, создается новое окно, содержащее эти окна. Новое окно называется группой . Количество окон в группе не ограничено.

There are three types of the window groups:Существует три типа групп окон:

  • VerticalВертикальный
  • HorizontalГоризонтальный
  • Group of tabsГруппа вкладок

Within the group, all windows are stacked according to one of these types.Внутри группы все окна расположены в соответствии с одним из этих типов.

Примечание
Grouping of the created windows can be done via the code or by using the mouse while the application is running.Группировку созданных окон можно выполнить с помощью кода или с помощью мыши во время работы приложения.

The WindowManager class provides two main functions for grouping windows:Класс WindowManager предоставляет две основные функции для группировки окон:

  • stack() creates a group of two windows.stack() создает группу из двух окон.
  • stackGroups() creates a group of two window groups.stackGroups() создает группу из двух групп окон.
Исходный код (C++)
// create separate windows
EngineWindowPtr horizontal_1 = EngineWindow::create("Horizontal 1", 512, 256);
EngineWindowPtr horizontal_2 = EngineWindow::create("Horizontal 2", 512, 256);
EngineWindowPtr horizontal_3 = EngineWindow::create("Horizontal 3", 512, 256);
EngineWindowPtr horizontal_4 = EngineWindow::create("Horizontal 4", 512, 256);

// create 2 horizontal window groups 
EngineWindowPtr horizontal_group_1 = WindowManager::stack(horizontal_1, horizontal_2, 1, EngineWindow::GROUP_TYPE_HORIZONTAL);
EngineWindowPtr horizontal_group_2 = WindowManager::stack(horizontal_3, horizontal_4, 1, EngineWindow::GROUP_TYPE_HORIZONTAL);
// create a vertical group of 2 horizontal groups
EngineWindowPtr vertical_group = WindowManager::stackGroups(horizontal_group_1, horizontal_group_2, EngineWindow::GROUP_TYPE_VERTICAL);
// specify position, size, title of the verical window group
vertical_group->setPosition(Math::ivec2(50, 60));
vertical_group->setSize(Math::ivec2(565, 310));
vertical_group->setTitle("Vertical Group");
// render the window group
vertical_group->show();

Each window or window group has a state, so it changes after stacking.Каждое окно или группа окон имеет состояние , поэтому оно изменяется после укладки.

There are also functions based on the stack() function that should be used in specific cases to avoid additional checking of arguments:Существуют также функции, основанные на функции stack(), которые следует использовать в определенных случаях, чтобы избежать дополнительной проверки аргументов:

  • stackToParentGroup() stacks the second window to the parent group of the first window. In the result, both windows passed as arguments will be on the same level in the group hierarchy.stackToParentGroup() помещает второе окно в родительскую группу первого окна. В результате оба окна, переданные в качестве аргументов, будут находиться на одном уровне в иерархии групп.

    Исходный код (C++)
    // stack 2 separate windows
    EngineWindowPtr group_0 = WindowManager::stackWindows(window_1, window_2, EngineWindow::GROUP_TYPE_HORIZONTAL);
    // stack a separate window to the parent group of "window_1"
    WindowManager::stackToParentGroup(window_1,window_3);

  • stackToWindow() stacks the window to the other window. If the first argument is the separate window, a new window group is returned. If the first argument is the nested window, the window is added to its group.stackToWindow() помещает окно в другое окно. Если первым аргументом является отдельное окно, возвращается новая группа окон. Если первым аргументом является вложенное окно, то окно добавляется в свою группу.

    Исходный код (C++)
    // create a group of 2 windows
    EngineWindowPtr group_1 = WindowManager::stack(window_1, window_2, 1, EngineWindow::GROUP_TYPE_HORIZONTAL);
    // stack a separate window to the window from the window group
    WindowManager::stackToWindow(window_1, window_3, EngineWindow::GROUP_TYPE_VERTICAL);

  • stackWindows() creates a group of the separate/nested windows. The windows are stacked in the default order.stackWindows() создает группу отдельных/вложенных окон. Окна расположены в порядке, установленном по умолчанию.
  • stackToGroup() stacks the window or window group to another window group.stackToGroup() помещает окно или группу окон в другую группу окон.

For ungrouping, the unstack() function is used: it removes the window or the window group from the parent group. If only one window remains in the group, it is automatically removed from the group and the group is deleted.Для разгруппировки используется функция unstack(): она удаляет окно или группу окон из родительской группы. Если в группе остается только одно окно, оно автоматически удаляется из группы, а сама группа удаляется.

Grouping Using the MouseГруппировка с помощью мыши#

While the application is running, you can group and ungroup the existing windows by using the mouse.Во время работы приложения вы можете группировать и разгруппировывать существующие окна с помощью мыши.

To group two separate windows, do the following:Чтобы сгруппировать два отдельных окна, выполните следующие действия:

  1. Hold the mouse button while moving the window to the destination one. The destination window will be divided into 9 sectors.Удерживая кнопку мыши, перемещайте окно в нужное место. Окно назначения будет разделено на 9 секторов.
  2. Choose the required sector and release the mouse button: the windows will be grouped.Выберите нужный сектор и отпустите кнопку мыши: окна будут сгруппированы.

To add the window to the existing group, you should hold the mouse button while moving the window and release it in one of the following areas:Чтобы добавить окно в существующую группу, вы должны удерживать кнопку мыши во время перемещения окна и отпустить ее в одной из следующих областей:

  • For the horizontal group:Для горизонтальной группы:

  • For the vertical group:Для вертикальной группы:

  • For the group of tabs:Для группы вкладок:

To ungroup the window, move it outside the group.Чтобы разгруппировать окно, переместите его за пределы группы.

Working with DialogsРабота с диалоговыми окнами#

To create a dialog window, use the corresponding functions of the class. For example:Чтобы создать диалоговое окно, используйте соответствующие функции класса. Например:

Исходный код (C++)
// event handler function
int AppSystemLogic::onButtonClicked()
{
	// show the message dialog
	WindowManager::dialogMessage("Message", "The button has been pressed.");
	
	return 1; 

}

int AppSystemLogic::init()
{
	// create a window with widgets in the client area
	auto create_window = [](const char *name)
	{
		EngineWindowPtr window = EngineWindow::create(name, 512, 256);

		window->addChild(WidgetLabel::create(window->getSelfGui(), String::format("This is a {0}.", name)), Gui::ALIGN_TOP);
		window->addChild(WidgetButton::create(window->getSelfGui(), name), Gui::ALIGN_CENTER);

		return window;

	};

	{
		// create a window
		EngineWindowPtr window = create_window("Window");
		// get the child widget of the window
		WidgetPtr button = window->getChild(1);
		// add a callback for this widget
		button->addCallback(Gui::CLICKED, MakeCallback(this, &AppSystemLogic::onButtonClicked));
		// show the window
		window->setPosition(Math::ivec2(50, 60));
		window->show();
	}

	return 1;

}

If you press the button in the client area of the created window, the following dialog will be shown:Если вы нажмете кнопку в клиентской области созданного окна, будет показано следующее диалоговое окно:

Последнее обновление: 05.11.2022
Build: ()