Как сделать окно в c

Добавил пользователь Евгений Кузнецов
Обновлено: 17.09.2024

В чём же причина такого поведения? Об этом расскажу дальше. Рассмотрим открытие и закрытие форм на примерах.

Открываем и закрываем форму из другой формы

У нас в приложении есть две формы Form1 — главная, которая открывается сразу при запуске приложения и Form2, которую открываем по нажатию на кнопку.

Чтобы открыть Form2 нам необходим следующий код, который будет срабатывать при нажатии на кнопку:

Теперь у нас открылась Form2 и спряталась Form1. Поработав с Form2 мы её закрываем и при этом нам надо после этого отобразить Form1. Многие начинающие, включая меня начинают писать следующий код, который помещаем в событие, которое происходит после закрытия Form2:

Это работает, однако правильно ли это? Решать вам.

Первая часть кода: мы отображаем Form2 и скрываем Form1. Не закрываем, а именно скрываем, т.е. экземпляр Form1 продолжает существовать.

Закрыть Form1 вместо скрытия не получится, так как это главная форма приложения и при её закрытии мы закроем всё приложение.

Сейчас мы с вами рассмотрим правильный код, который не будет создавать второй экземпляр Form1 и отображать его, а будет отображать скрытую до этого Form1.

OpenForms — получает коллекцию открытых форм приложения. В нашем случае мы сразу обратились к главной форме приложения (OpenForms[0]).

Теперь при закрытии Form2 у нас будет вызываться и отображаться та форма, которая породила закрывающуюся.

Учитываем координаты форм при открытии

Form ifrm = new Form2();
ifrm.ShowDialog();

Это правильное решение, которое всегда будет открывать Form2 поверх Form1 и всегда по центру Form1. Однако этот код не применим, если вам надо скрывать Form1, так как Form1 не будет скрываться.

Сейчас приведу полное решение, которое позволит открывать Form1 и Form2 в той же точке, где находилась до этого форма, вызывающая другую форму. Код включает всё вышеописанное. В свойствах форм надо прописать следующее (прямо в студии выбираете эти значения):

Теперь вы не создаёте второго экземпляра Form1 и приложение всегда будет закрываться, не оставаясь в памяти.

Открываем форму поверх другой формы, как модальное окно

Чтобы открыть Form2 поверх Form1, как модальное окно, не скрывая Form1, вам хватит этого кода:

В итоге Form2 будет открыта поверх Form1. В этом случае пользователь не сможет переключиться на Form1 не закрыв Form2.

у меня есть приложение WinForms, которое я пытаюсь сделать полноэкранным (что-то вроде того, что VS делает в полноэкранном режиме).

Я FormBorderStyle до None и WindowState to Maximized что дает мне немного больше места, но он не покрывает панель задач, если она видна.

что мне нужно сделать, чтобы использовать это пространство, а?

для бонусных очков, есть ли что-то, что я могу сделать, чтобы сделать мой MenuStrip autohide, чтобы отказаться от этого пространства?

к основному вопросу, следующее сделает трюк (скрывая панель задач)

но, что интересно, если вы поменяете эти последние две строки, панель задач останется видимой. Я думаю, что последовательность этих действий будет трудно контролировать с помощью окна Свойства.

Я искал ответ на этот вопрос в SO и некоторых других сайтах, но один дал ответ был очень сложным для меня, а некоторые другие ответы просто не работают правильно, поэтому после Большого тестирования кода я решил эту головоломку.

Примечание: я использую Windows 8 и моя панель задач не находится в режиме автоматического скрытия.

я обнаружил, что установка WindowState в нормальное состояние перед выполнением каких-либо изменений остановится ошибка с не покрытой панелью задач.

Я создал этот класс, который имеет два метода, первый входит в" полноэкранный режим", а второй выходит из"полноэкранного режима". Поэтому вам просто нужно создать объект этого класса и передать форму, которую вы хотите установить полный экран в качестве аргумента методу EnterFullScreenMode или методу LeaveFullScreenMode:

пример использования

Я разместил это же ответьте на другой вопрос, который я не уверен, является ли дубликатом или нет этого. (Ссылка на другой вопрос: как отобразить форму Windows в полноэкранном режиме поверх панели задач?)

и для menustrip-вопрос, попробуйте set

в полноэкранном режиме он должен затем исчезнуть.

и при выходе из fullscreenmode сбросьте menustrip1.parent к форме снова и menustrip будет нормальным снова.

вы можете использовать следующий код, чтобы соответствовать экрану системы и панель задач видна.

нет необходимости использовать:

эта линия мешает alt+tab переключиться на другое приложение. ("Верхний" означает, что окно остается поверх других окон, если они также не помечены как "верхний".)

недавно я сделал приложение Mediaplayer, и я использовал API-вызовы, чтобы убедиться, что панель задач была скрыта, когда программа работала в полноэкранном режиме, а затем восстановила панель задач, когда программа не была в полноэкранном режиме или не имела фокуса или вышла.

вам нужно установить окно, чтобы быть лучшими.

уведомления: Вы должны поместить его в класс своей формы (пример: partial class Form1 : Form < /* Code goes here */ >) или он не будет работать, потому что, если вы не разместите его в любой форме, код this создаст исключение.


Хотя возможны и иные варианты - зависит от конкретной задачи. Строго же новоря, на такие вопросы быстрее всего находить ответы в доках, коих в Интернете очень много. Но если уж задавать их на форумах, то неплохо было бы и конкретизировать свою цель.

Pечь идет о переходе в полноэкранный режим, то это проще всего сделать с помощью следующей строки:

Спасибо за помощь.

А какой файл надо к проекту подклюсить.


Это что за зверь такой?!
По названию напоминает что-то от OpenGL.
В MSDN такой функции нет.

Чтобы сделать окно full screen достаточно сделать его размер равным размеру экрана. Win автоматически поставит его над всеми другими окнами, кроме AlwaysOnTop.

Изменить размер окна можно SetWindowPos
Узнать размер экрана (разрешение) - GetSystemMetrics, с параметрами SM_CXSCREEN,
SM_CYSCREEN

Спасибо за помощь.

А какой файл надо к проекту подклюсить.

1) Размести файлы gl.h, glu.h, glut.h в некоторой директории, которую далее будем обозначать как

(я рекомендую использовать в качестве такой директории ту, где у тебя лежат все остальные включаемые файлы, ибо тогда путь

2) Далее библиотеки glu32.lib, glut32.lib, opengl.lib подключи к своему проекту.

3) Файлы opengl32.dll, glu32.dll, glut32.dll следует поместить в директорию Windows\system32.

После этого все должно работать. Однако судя по тому, что у тебя все выше приведенные файлы не были установлены, следует, что ты не знаком с OpenGL. Я крайне рекомендую потратить хотя бы несколько дней на изучение его основ, ибо OpenGL может быть полезен не только для различных специфический целей (разработка 3D-приложений, etc.), но и для улучшения интерфейса обычных Windows-приложений (ну или хотя бы просто для его украшения). Для изучения основ OpenGL я НЕ рекоменду всякие доки в Интернете и пр. "брошуры", ибо они скорее предназначены для тех, кто уже неплохо, а зачистую и очень хорошо знает OpenGL, и кроме того, информации в таких доках разрознена по всему Интернету, что весьма и весьма неудобно вне зависимости от навыков работы с OpenGL. Поэтому порукомендую начать с покупки книги "OpenGL для профессионалов", в которой все изложено с одной стороны просто и доступно, а с другой - достаточно подробно.

Конечно, ты можешь и не изучать OpenGL, но я гарантирую, что коли ты за это возмешся - то о времени, потраченного на его изучение, ты никогда не пожалеешь, тем более что этого времени понадобится не так уж много, если изучать все внимательно и целенаправлено (т.е. например, если ты хотел бы уметь добавлять в свои приложения в основном только 2D-эффекты, а с помощью 3D-функций лишь реализововать какие-то несложные задачи, то и изучать в начале следует прежде всего тексты, посвещенные именно этому).

Тем не менее, повторюсь, что окно распахнуть на весь экран можно по-разному, и вполне возможно, что все приведенные советы не совсем те, которые ты хотел бы получить. Если так, то пожалуйста, объясни подробнее цель открытия окна на весь экран.

9 простых правил, которые помогут вам создать более удачный дизайн модальных окон

Jul 12, 2021 · 5 min read


Модальное окно — это такое окошко, которое появляется поверх родительского экрана. Его называют модальным, потому что оно вызывает состояние, при котором главная страница уходит на второй план, но все еще остается в поле зрения. Пользователю предлагается выполнить какое-либо действие, чтобы вернуться к основному окну.

Дизайнеры используют такой формат, чтобы привлечь внимание пользователей. Информация и интерактивные действия в модальном окне должны занимать все внимание. В этой статье мы рассмотрим несколько простых правил о том, как лучше создавать такие окна.

Дизайнеры часто примен я ют такой паттерн, чтобы выводить ошибки, строку загрузки или уведомления о завершении действия. Однако в таком случае модальные окна не очень эффективны, так как они перекрывают родительский экран.


Модальное окно в формате “Загрузка…” является довольно распространённой практикой для уведомления о длительных операциях. Использование модальных окон в таких случаях можно считать логичным, поскольку такое окно не позволяет пользователю взаимодействовать с экраном. Однако можно найти и более подходящее решение — добавление на сайт строки загрузки прямо в кнопку, которая начинает действие. Такое решение будет сигнализировать о том, что нужно немного подождать, и не дает пользователю снова нажать на кнопку загрузки.

Уведомление об успешном выполнении всегда лучше выводить либо прямо внутри интерфейса, либо на отдельной странице.

Примечание: модальные окна можно использовать в том случае, если пользователю необходимо совершить действие, которое может иметь серьезные последствия или которое трудно или невозможно отменить.


2. Осторожнее с модальными окнами, вызываемыми системой

Есть два типа модальных окон: вызываемые пользователем и вызываемые системой:

  • Те, что вызваны пользователем, появляются на экране лишь тогда, когда человек сам этого хочет (например, нажимает на кнопку). В этом случае пользователь понимает, почему появляется окно.
  • Те окна, вызываемые системой, которые лишь прерывают задачу, выполняемую человеком. Одна из самых больших проблем с таким типом модальности заключается в том, что эти окна отвлекают пользователей от того, что они делали до появления окна. Человек может даже не понять, почему оно всплыло.

Дизайнеры обычно используют такие окна в рекламных целях. Такие окна прерывают пользователя и заставляют его выполнить какое-либо определенное действие. “Незваные” окна часто производят плохое впечатление на пользователей — люди инстинктивно ищут кнопку “закрыть”. Такие окна считаются раздражающими и неуместными.


3. Убедитесь, что пользователи понимают, что от них требуется

Сопоставление текста кнопки с заголовком страницы поможет понять ее контекст. Рекомендуется использовать очевидные места для кнопки, где точно будет видно, что произойдет, когда пользователь нажмет на нее.

К примеру, если пользователь хочет удалить свои файлы, то вместо того, чтобы спрашивать “Очистить хранилище?” с ответами “Да” или “Нет”, лучше спросить “Вы точно хотите удалить свои файлы?” с вариантами “Удалить” и “Отмена”.

4. Выносите содержимое сайта и его активные кнопки в модальные окна

Старайтесь избегать ситуаций, когда в модальном окне требуется скроллить контент. Скроллинг пригоден для длинных страниц, а модальные окна предназначены лишь для короткой, действительно важной информации или действий. Поэтому если вы чувствуете, что в модальном окне содержится слишком много информации, то лучше пересмотреть, что действительно стоит включить в него. В таких случаях лучше просто разместить информацию прямо на сайте.

  • В идеале, модальное окно должно содержать пару-тройку предложений, а также не более двух кнопок действия.
  • Третье действие, например кнопка “Узнать больше”, лишь уводит пользователя от основного окна и не дает ему завершить желаемое действие.

5. Делайте кнопки закрытия окна видимыми

Пользователи должны иметь возможность закрыть модальное окно, когда им вздумается. Вот несколько способов, как этого добиться:

  • Добавить заметную кнопку “Закрыть” или “×” в правом верхнем углу окна.
  • Добавить заметную кнопку “Закрыть” или “Отменить” в нижней части окна.
  • Добавить возможность закрытия модального окна при клике за его пределами.

Размер модального окна не должен быть чересчур большим, оно не должно занимать все пространство — в идеале не более 25% площади экрана. Если у вас не получается вместить все, что вы хотите, в модальное окно, то в таком случае будет лучше создать под эту информацию отдельную страницу.

7. Выделяйте модальные окна

Вот как можно дать пользователям понять, что перед ними модальное окно:

  • Поместите модальное окно прямо в поле зрения пользователя. Если модальное окно появляется за пределами экрана, то человеку придется скроллить, чтобы его найти, а это является плохой практикой. Проблема в том, что пользователь может не понять, что нужно скроллить куда-то по странице, это может привести к путанице.
  • Убедитесь, что модальное окно визуально отличается от фоновой страницы. Затемнение фона окна поможет пользователям понять, что оно расположено поверх основного сайта.

8. Сделайте содержимое модального окна доступным для пользователей с клавиатурой (для ПК)

Как только на странице открывается модальное окно, фокус страницы должен быть переведен на него. Пользователь должен иметь возможность перемещаться по функциональным элементам управления в окне с помощью клавиатуры.

Сделайте так, чтобы пользователь мог закрыть окно по нажатию Esc. Когда пользователи случайно открывают модальное окно, многие из них инстинктивно нажимают клавишу Esc, чтобы вернуться на предыдущую страницу.

9. Не используйте вложенные модальные окна

Никогда не создавайте модальные окна, которые могут вызывать новые модальные окна. Такой подход создает визуальный бардак в дизайне сайта.

Читайте также: