||padding-left: 2em||Начинает рисование нового окна. Функция возвращает 0, если окно спрятано или минимизировано -- в этом случае рисование содержимого окна не выполняется. Имя окна должно быть уникальным в пределах контекста и не должно совпадать с именем окна Windows.
Для окна Windows автоматически создается скрытое окно в контексте, действия с которым влияют на поведение окна Windows.
||padding-left: 2em||Аналогично, но с указанием заголовка, не совпадающего с name.
**void nk_end(struct nk_context *ctx);**
||padding-left: 2em||Завершение рисования окна.
**struct nk_rect nk_rect(float x, float y, float w, float h)**
||padding-left: 2em||Задать позицию и размеры области окна. Можно указать как относительные единицы от 0.0 до 1.0, так и абсолютные в пикселях, например, nk_rect(0,0,1,1) - окно занимает все окно Windows.
Если окно является перемещаемым или масштабируемым, то будут заданы только начальные позицию и размеры окна, и изменять их может только пользователь или с помощи функции nk_window_set_size или nk_window_set_position. Для остальных окон позицию и размеры можно менять при каждой перерисовке.
Флаг|Назначение|Окно|Можно указать для окна Windows
--|--|--|--
NK_WINDOW_BORDER|Рамка вокруг окна| + | -
NK_WINDOW_MOVABLE|Перемещаемое окно| + | -
NK_WINDOW_SCALABLE|Можно менять размеры| + | +
NK_WINDOW_CLOSABLE|Есть кнопка закрытия| + | +
NK_WINDOW_MINIMIZABLE|Есть кнопка минимизации| + | +
NK_WINDOW_MAXIMIZABLE|Есть кнопка максимизации| - | +
NK_WINDOW_NO_SCROLLBAR|Без полос прокрутки| + | -
NK_WINDOW_TITLE|Есть заголовок| + | +
NK_WINDOW_SCROLL_AUTO_HIDE|Убирать полосы прокрутки при неактивности окна| + | -
NK_WINDOW_BACKGROUND|Фоновое окно| + | +
NK_WINDOW_SCALE_LEFT|Для изменения размера использовать не правый, а левый угол| + | -
NK_WINDOW_NO_INPUT|Окно не взаимодействует с пользователем| + | -
NK_WINDOW_MINIMIZED|В начальном состоянии окно свернуто|-|+
NK_WINDOW_MAXIMIZED|В начальном состоянии окно развернуто на весь экран|-|+
Любой из флагов NK_WINDOW_CLOSABLE, NK_WINDOW_MINIMIZABLE, NK_WINDOW_MAXIMIZABLE включает показ заголовка.
Если приложение является однооконным, то заголовок и кнопку закрытия может выводить либо окно Windows
![float:right|Окно 1](50894.png)
```c++
int draw1(struct nk_context *ctx)
{ if (nk_begin(ctx, "Window 1", nk_rect(0, 0, 1, 1),0)) // используем заголовок окна Windows
{ // рисование элементов
}
nk_end(ctx);
return 1;
}
int main() {
...
nkgdi_window_create("GDI 1", nk_rect(10,10,250,100), (nkgdi_params) {.on_draw=draw1,
.flags=NK_WINDOW_TITLE|NK_WINDOW_SCALABLE|NK_WINDOW_MINIMIZABLE|NK_WINDOW_MAXIMIZABLE|NK_WINDOW_CLOSABLE});
```
либо окно nuklear
![float:right|Окно 2](50895.png)
```c++
int draw2(struct nk_context *ctx)
{ if (nk_begin(ctx, "Window 2", nk_rect(0, 0, 1, 1),
NK_WINDOW_BORDER|NK_WINDOW_TITLE|NK_WINDOW_CLOSABLE))
{ // рисование элементов
}
nk_end(ctx);
return !nk_window_is_hidden(ctx,"Window 2");
}
int main() {
...
nkgdi_window_create("GDI 2", nk_rect(300,10,250,100), (nkgdi_params) {.on_draw=draw2});
```
либо можно убрать оба заголовка, но тогда нужно предусмотреть собственную кнопку для закрытия окна
![float:right|Окно 3](50896.png)
```c++
int draw3(struct nk_context *ctx)
{ if (nk_begin(ctx, "Window 2", nk_rect(0, 0, 1, 1),0))
{ // рисование элементов
}
nk_end(ctx);
return 1;
}
int main() {
...
nkgdi_window_create("GDI 3", nk_rect(600,10,250,100), (nkgdi_params) {.on_draw=draw3});
```
Для управления окнами используются следующие функции:
||padding-left: 2em||Изменить состояние окна, здесь state может принимать значения
NK_MINIMIZED, NK_MAXIMIZED, NK_FULLSCREEN (последний вариант только для окна Windows).