- Как заставить приложение WinForms работать в полноэкранном режиме
- Проверенное и простое решение
- Пример использования
- Как создать Full-screen форму?
- Автоматическое масштабирование в Windows Forms Automatic scaling in Windows Forms
- Необходимость автоматического масштабирования Need for automatic scaling
- Исходная поддержка автоматического масштабирования Original support for automatic scaling
- Текущая поддержка автоматического масштабирования Current support for automatic scaling
- Автоматическое масштабирование в действии Automatic scaling in action
Как заставить приложение WinForms работать в полноэкранном режиме
У меня есть приложение WinForms, которое я пытаюсь сделать в полноэкранном режиме (что-то вроде того, что VS делает в полноэкранном режиме).
В настоящее время я устанавливаю FormBorderStyle в None и WindowState к , Maximized что дает мне немного больше пространства, но это не распространяется через панель задач , если она видна.
Что мне нужно сделать, чтобы использовать это пространство?
Что касается бонусных баллов, могу ли я что-то сделать, чтобы MenuStrip автоматически скрыть свое место, чтобы освободить и это место?
К основному вопросу поможет следующее (скрытие панели задач)
Но что интересно, если вы поменяете местами последние две строки, панель задач останется видимой. Я думаю, что последовательность этих действий будет сложно контролировать с помощью окна свойств.
Проверенное и простое решение
Я искал ответ на этот вопрос в SO и некоторых других сайтах, но один из ответов был для меня очень сложным, а некоторые другие ответы просто не работают правильно, поэтому после большого тестирования кода я решил эту головоломку.
Примечание. Я использую Windows 8, и моя панель задач не находится в режиме автоматического скрытия.
Я обнаружил, что установка WindowState на Normal перед выполнением любых изменений остановит ошибку с непокрытой панелью задач.
Я создал этот класс с двумя методами, первый входит в «полноэкранный режим», а второй выходит из «полноэкранного режима». Итак, вам просто нужно создать объект этого класса и передать форму, которую вы хотите установить в полноэкранном режиме, в качестве аргумента методу EnterFullScreenMode или методу LeaveFullScreenMode:
Пример использования
Я поместил тот же ответ на другой вопрос, и я не уверен, является ли он дубликатом этого вопроса или нет. (Ссылка на другой вопрос: как отобразить форму Windows в полноэкранном режиме поверх панели задач? )
Как создать Full-screen форму?
в этих случаях размеры формы не охватывают экран полностью, в область не попадают панель инструментов и по несколько пикселей слева и справа.
Подскажите как узнать реальное разрешение экрана или как выводить изображение на полный экран без формы. Заранее благодарен.
Добавлено через 1 час 9 минут 8 секунд
Вопрос снят
Нужно было всего лишь максимизировать окно.
Как создать Splash screen?
Подскажите пожалуйста, как сделать, чтобы перед загрузкой главной формы секунды три провисела.
Full Screen
Доброго времени суток. Только начал осваивать JavaScript. Стоит задача организовать работу сайта.
Full Screen Flash
Доброго времени суток. Задача следующая: при загрузке страницы в браузере стартовать Flash.
Full Screen Mode
Кто нибудь знает как прописать для консольного win32 приложения работу в полноэкранном режиме?
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Full Screen в видео плеере
Как реализовать чтобы при клики на VideoView исчезал System UI и наше окно вставало во весь экран и.
Full screen mode в приложении.
Здравствуйте, мастерА! Не подскажите, как можно заставить приложение развернуться на полный экран +.
Full Screen для медиа элэмента в WPF
Full Screen для медиа элэмента в WPF Full Screen View for Media Element in WPF I am just.
Функция, которая открывает страницу в режиме Full Screen + Maximize
На загрузку страницы мне надо написать небольшую функцию, которая открывает страницу в режиме Full.
Автоматическое масштабирование в Windows Forms Automatic scaling in Windows Forms
Автоматическое масштабирование позволяет форме и ее элементам управления, разработанным на одном компьютере с использованием определенного разрешения или системных шрифтов, правильно отображаться на другом компьютере с другим разрешением или системным шрифтом. Automatic scaling enables a form and its controls, designed on one machine with a certain display resolution or system font, to be displayed appropriately on another machine with a different display resolution or system font. Оно гарантирует, что размеры формы и ее элементов управления будут изменяться автоматически в соответствии с приложениями Windows и другими приложениями на компьютерах пользователя и разработчика. It assures that the form and its controls will intelligently resize to be consistent with native windows and other applications on both the users’ and other developers’ machines. Поддержка .NET Framework для автоматического масштабирования и визуальных стилей позволяет .NET Framework приложениям поддерживать единообразный вид и поведение при сравнении с собственными приложениями Windows на компьютере каждого пользователя. The support of the .NET Framework for automatic scaling and visual styles enables .NET Framework applications to maintain a consistent look and feel when compared to native Windows applications on each user’s machine.
В большинстве случаев автоматическое масштабирование работает правильно в .NET Framework версии 2,0 и более поздних. For the most part, automatic scaling works as expected in .NET Framework version 2.0 and later. Однако внесение изменений в схему шрифтов может быть проблематичным. However, font scheme changes can be problematic. Пример решения этой проблемы см. в разделе как реагировать на изменения шрифтовой схемы в приложении Windows Forms. For an example of how to resolve this, see How to: Respond to Font Scheme Changes in a Windows Forms Application.
Необходимость автоматического масштабирования Need for automatic scaling
Без автоматического масштабирования приложения, разработанные для определенного разрешения экрана или шрифта, будут выглядеть либо слишком маленькими, либо слишком большими при изменении разрешения или шрифта. Without automatic scaling, an application designed for one display resolution or font will either appear too small or too large when that resolution or font is changed. Например, если приложение разработано с использованием базового шрифта Tahoma размером 9 пунктов, то без коррекции оно будет выглядеть слишком маленьким при запуске на компьютере, на котором в качестве системного шрифта используется Tahoma размером 12 пунктов. For example, if the application is designed using Tahoma 9 point as a baseline, without adjustment it will appear too small if run on a machine where the system font is Tahoma 12 point. Текстовые элементы, такие как заголовки, меню, содержимое текстовых полей и т. д., будут меньше, чем в других приложениях. Text elements, such as titles, menus, text box contents, and so on will render smaller than other applications. Более того, размер содержащих текст элементов пользовательского интерфейса, таких как строки заголовков, меню и т. д., зависит от используемого шрифта. Furthermore, the size of user interface (UI) elements that contain text, such as the title bar, menus, and many controls are dependent on the font used. В рассматриваемом примере эти элементы также будут выглядеть относительно меньше. In this example, these elements will also appear relatively smaller.
Аналогичная ситуация возникает, когда приложение разработано для определенного разрешения экрана. An analogous situation occurs when an application is designed for a certain display resolution. Наиболее распространенное разрешение экрана — 96 точек на дюйм (DPI), что соответствует 100% масштабирования экрана, но более высокое разрешение показывает, что поддерживаются 125%, 150%, 200% (что соответствует соответственно 120, 144 и 192 DPI) и выше. The most common display resolution is 96 dots per inch (DPI), which equals 100% display scaling, but higher resolution displays supporting 125%, 150%, 200% (which respectively equal 120, 144 and 192 DPI) and above are becoming more common. Без коррекции приложение, особенно графическое, разработанное для одного разрешения, будет отображаться либо слишком большим, либо слишком маленьким при запуске с другим разрешением. Without adjustment, an application, especially a graphics-based one, designed for one resolution will appear either too large or too small when run at another resolution.
Автоматическое масштабирование предназначено для решения таких проблем путем автоматического изменения размеров формы и ее дочерних элементов управления согласно относительному размеру шрифтов и разрешению экрана. Automatic scaling seeks to ameliorate these problems by automatically resizing the form and its child controls according to the relative font size or display resolution. Операционная система Windows поддерживает автоматическое масштабирование диалоговых окон с помощью относительной единицы измерения, называемой единицей размера диалогового окна. The Windows operating system supports automatic scaling of dialog boxes using a relative unit of measurement called dialog units. Единица размера диалогового окна основана на системном шрифте, а ее связь с пикселями можно определить с помощью функции GetDialogBaseUnits пакета Win32 SDK. A dialog unit is based on the system font and its relationship to pixels can be determined though the Win32 SDK function GetDialogBaseUnits . При изменении темы, используемой Windows, все диалоговые окна автоматически настраиваются соответствующим образом. When a user changes the theme used by Windows, all dialog boxes are automatically adjusted accordingly. Кроме того, .NET Framework поддерживает автоматическое масштабирование в соответствии с системным шрифтом по умолчанию или разрешением экрана. In addition, the .NET Framework supports automatic scaling either according to the default system font or the display resolution. При необходимости автоматическое масштабирование можно отключить в приложении. Optionally, automatic scaling can be disabled in an application.
Исходная поддержка автоматического масштабирования Original support for automatic scaling
Версии 1,0 и 1,1 .NET Framework поддерживали автоматическое масштабирование простым способом, который зависит от шрифта Windows, используемого по умолчанию для пользовательского интерфейса, представленного значением пакета SDK для Win32 DEFAULT_GUI_FONT. Versions 1.0 and 1.1 of the .NET Framework supported automatic scaling in a straightforward manner that was dependent on the Windows default font used for the UI, represented by the Win32 SDK value DEFAULT_GUI_FONT. Обычно этот шрифт изменяется только при изменении разрешения экрана. This font is typically only changed when the display resolution changes. Для реализации автоматического масштабирования применялся описанный ниже механизм. The following mechanism was used to implement automatic scaling:
Во время разработки свойству AutoScaleBaseSize (которое теперь устарело) присваивалась высота и ширина системного шрифта по умолчанию на компьютере разработчика. At design time, the AutoScaleBaseSize property (which is now deprecated) was set to the height and width of the default system font on the developer’s machine.
Во время выполнения для инициализации свойства Font класса Form использовался стандартный системный шрифт компьютера пользователя. At runtime, the default system font of the user’s machine was used to initialize the Font property of the Form class.
Перед отображением формы вызывался метод ApplyAutoScaling для ее масштабирования. Before displaying the form, the ApplyAutoScaling method was called to scale the form. Этот метод вычислял относительный масштаб с помощью свойств AutoScaleBaseSize и Font, а затем вызывал метод Scale для масштабирования формы и ее дочерних элементов. This method calculated the relative scale sizes from AutoScaleBaseSize and Font then called the Scale method to actually scale the form and its children.
Значение свойства AutoScaleBaseSize обновлялось таким образом, чтобы последующие вызовы ApplyAutoScaling не продолжали изменять размер формы. The value of AutoScaleBaseSize was updated so that subsequent calls to ApplyAutoScaling did not progressively resize the form.
Этого механизма было достаточно для большинства целей, но он имел ряд ограничений. While this mechanism was sufficient for most purposes, it suffered from the following limitations:
Так как AutoScaleBaseSize свойство представляет базовый размер шрифта как целочисленные значения, возникают ошибки округления, которые становятся очевидными, когда форма циклически проходит несколько разрешений. Since the AutoScaleBaseSize property represents the baseline font size as integer values, rounding errors occur that become evident when a form is cycled through multiple resolutions.
Автоматическое масштабирование было реализовано только в классе Form, но не в классе ContainerControl. Automatic scaling was implemented in only the Form class, not in the ContainerControl class. В результате пользовательский элемент управления масштабировался корректно, только если он был разработан с тем же разрешением, что и форма, и был помещен в форму во время разработки. As a result, user controls would scale correctly only when the user control was designed at the same resolution as the form, and it was placed in the form at design time.
Несколько разработчиков могли параллельно разрабатывать формы и их дочерние элементы управления, только если разрешение экрана на их компьютерах совпадало. Forms and their child controls could only be concurrently designed by multiple developers if their machine resolutions were the same. Аналогичным образом наследование форм зависело от разрешения родительской формы. Likewise it also made inheritance of a form dependent on the resolution associated with the parent form.
Он несовместим с новыми диспетчерами макетов, появившимися в .NET Framework версии 2,0, например FlowLayoutPanel и TableLayoutPanel . It is not compatible with the newer layout managers introduced with the .NET Framework version 2.0, such as FlowLayoutPanel and TableLayoutPanel.
Он не поддерживал масштабирование непосредственно на основе разрешения экрана, необходимого для обеспечения совместимости с .NET Compact Framework. It did not support scaling based directly on the display resolution that is required for compatibility to the .NET Compact Framework.
Хотя этот механизм сохранен в .NET Framework версии 2,0 для обеспечения обратной совместимости, он был заменен более надежным механизмом масштабирования, описанным далее. Although this mechanism is preserved in the .NET Framework version 2.0 to maintain backward compatibility, it has been superseded by the more robust scaling mechanism described next. Как следствие, методы AutoScale, ApplyAutoScaling, AutoScaleBaseSize и некоторые перегрузки Scale помечены как устаревшие. As a consequence, the AutoScale, ApplyAutoScaling, AutoScaleBaseSize, and certain Scale overloads are marked as obsolete.
Вы можете безопасно удалить ссылки на эти члены при обновлении устаревшего кода до версии .NET Framework 2,0. You can safely delete references to these members when you upgrade your legacy code to the .NET Framework version 2.0.
Текущая поддержка автоматического масштабирования Current support for automatic scaling
.NET Framework версии 2,0 сурмаунтс предыдущие ограничения путем внесения следующих изменений в автоматическое масштабирование Windows Forms: The .NET Framework version 2.0 surmounts previous limitations by introducing the following changes to the automatic scaling of Windows Forms:
Базовая поддержка масштабирования была перемещена в класс ContainerControl, чтобы формы, собственные составные элементы управления и пользовательские элементы управления получали единообразную поддержку масштабирования. Base support for scaling has been moved to the ContainerControl class so that forms, native composite controls and user controls all receive uniform scaling support. Были добавлены новые члены AutoScaleFactor, AutoScaleDimensions, AutoScaleMode и PerformAutoScale. The new members AutoScaleFactor, AutoScaleDimensions, AutoScaleMode and PerformAutoScale have been added.
Класс Control также имеет несколько новых членов, которые позволяют ему участвовать в масштабировании и поддерживать смешанное масштабирование в одной и той же форме. The Control class also has several new members that allow it to participate in scaling and to support mixed scaling on the same form. В частности, члены Scale, ScaleChildren и GetScaledBounds поддерживают масштабирование. Specifically the Scale, ScaleChildren, and GetScaledBounds members support scaling.
В дополнение к поддержке системного шрифта была добавлена поддержка масштабирования на основе разрешения экрана в соответствии со значениями перечисления AutoScaleMode. Support for scaling based upon the screen resolution has been added to complement system font support, as defined by the AutoScaleMode enumeration. Этот режим совместим с автоматическим масштабированием, поддерживаемым .NET Compact Framework что позволяет упростить перенос приложений. This mode is compatible with automatic scaling supported by the .NET Compact Framework enabling easier application migration.
В реализацию автоматического масштабирования была добавлена совместимость с диспетчерами макетов, такими как FlowLayoutPanel и TableLayoutPanel. Compatibility with layout managers such as FlowLayoutPanel and TableLayoutPanel has been added to the implementation of automatic scaling.
Коэффициенты масштабирования теперь представляются в виде чисел с плавающей запятой, обычно с помощью структуры SizeF, что позволило практически устранить ошибки округления. Scaling factors are now represented as floating point values, typically using the SizeF structure, so that rounding errors have been practically eliminated.
Произвольные сочетания режимов масштабирования на основе разрешения экрана и размера шрифта не поддерживаются. Arbitrary mixtures of DPI and font scaling modes are not supported. Вы без всяких проблем можете масштабировать пользовательский элемент управления в одном режиме (например, на основе разрешения экрана) и поместить его в форму с помощью другого режима (на основе размера шрифта), но использование базовой формы в одном режиме и производной формы в другом может привести к непредвиденным результатам. Although you may scale a user control using one mode (for example, DPI) and place it on a form using another mode (Font) with no issues, but mixing a base form in one mode and a derived form in another can lead to unexpected results.
Автоматическое масштабирование в действии Automatic scaling in action
В Windows Forms для автоматического масштабирования формы и ее содержимого теперь используется описанная ниже логика. Windows Forms now uses the following logic to automatically scale forms and their contents:
Во время разработки каждый объект ContainerControl регистрирует режим масштабирования и его текущее разрешение в свойствах AutoScaleMode и AutoScaleDimensions соответственно. At design time, each ContainerControl records the scaling mode and it current resolution in the AutoScaleMode and AutoScaleDimensions, respectively.
Во время выполнения фактическое разрешение хранится в свойстве CurrentAutoScaleDimensions. At run time, the actual resolution is stored in the CurrentAutoScaleDimensions property. Свойство AutoScaleFactor динамически вычисляет отношение между разрешением во время выполнения и разрешением во время разработки. The AutoScaleFactor property dynamically calculates the ratio between the run-time and design-time scaling resolution.
Если при загрузке формы значения CurrentAutoScaleDimensions и AutoScaleDimensions различны, то для масштабирования элемента управления и его дочерних элементов вызывается метод PerformAutoScale. When the form loads, if the values of CurrentAutoScaleDimensions and AutoScaleDimensions are different, then the PerformAutoScale method is called to scale the control and its children. Этот метод приостанавливает размещение и вызывает метод Scale для выполнения фактического масштабирования. This method suspends layout and calls the Scale method to perform the actual scaling. Впоследствии значение AutoScaleDimensions обновляется во избежание прогрессивного масштабирования. Afterwards, the value of AutoScaleDimensions is updated to avoid progressive scaling.
Метод PerformAutoScale также вызывается автоматически в перечисленных ниже ситуациях. PerformAutoScale is also automatically invoked in the following situations:
В ответ на событие OnFontChanged, если используется режим масштабирования Font. In response to the OnFontChanged event if the scaling mode is Font.
Если при возобновлении размещения элементов управления внутри контейнера обнаруживается изменение свойства AutoScaleDimensions или AutoScaleMode. When the layout of the container control resumes and a change is detected in the AutoScaleDimensions or AutoScaleMode properties.
При масштабировании родительского объекта ContainerControl, как указанно выше. As implied above, when a parent ContainerControl is being scaled. Каждый контейнерный элемент управления отвечает за масштабирование своих дочерних элементов с помощью своих собственных коэффициентов масштабирования, а не коэффициентов его родительского контейнера. Each container control is responsible for scaling its children using its own scaling factors and not the one from its parent container.
Поведение дочерних элементов управления при масштабировании может изменяться несколькими способами. Child controls can modify their scaling behavior through several means:
Можно переопределить свойство ScaleChildren, чтобы указать, следует ли масштабировать дочерние элементы управления. The ScaleChildren property can be overridden to determine if their child controls should be scaled or not.
Можно переопределить метод GetScaledBounds для корректировки границ, до которых масштабируется элемент управления, но не логики масштабирования. The GetScaledBounds method can be overridden to adjust the bounds that the control is scaled to, but not the scaling logic.
Можно переопределить метод ScaleControl для изменения логики масштабирования текущего элемента управления. The ScaleControl method can be overridden to change the scaling logic for the current control.