Все программы, которые мы рассматривали до настоящего момента, были оконными приложениями. Такие приложения размещаются среди других окон на рабочем столе Windows, и могут быть перекрыты другими окнами, свернуты или развернуты. Поскольку оконные приложения располагаются на рабочем столе Windows, они вынуждены использовать установленный Windows видеорежим. В этой главе мы познакомимся с полноэкранными приложениями.
Полноэкранные приложения — это программы, которые игнорируют рабочий стол Windows и все устанавливаемые им правила. Полноэкранные приложения получают полный контроль над видеокартой и могут использовать любые поддерживаемые видеокартой видеорежимы.
Внутренне устройство полноэкранных и оконных приложений весьма различается. Полноэкранные приложения более сложны, чем их аналоги, работающие в оконном режиме. Кроме того, существует ряд практических отличий.
Возможно наибольшим отличием является то, что в полноэкранном приложении мы должны сами реализовать обновление экрана и работу с палитрой. В приложениях Direct3D, которые работают в оконном режиме, мы не думали об этих задачах. Хорошей новостью является то, что палитра необходима только приложениям, работающим в 8-разрядных видеорежимах (16-, 24- и 32-разрядные видеорежимы обходятся без палитр).
Другое отличие заключается в том, что Windows не «понимает» полноэкранные приложения. Обычно обновление экрана Windows выполняет интерфейс графических устройств Windows (GDI). GDI ничего не знает о полноэкранных приложениях и предполагает, что всегда сам управляет экраном. Это может вызвать проблемы, поскольку если GDI будет использоваться для вывода меню или окон в полноэкранном режиме, он будет делать это не учитывая текущий видеорежим и палитру. Некоторые полноэкранные приложения используют GDI для отображения меню, несмотря на его плохую поддержку работы в полноэкранном режиме, однако наилучший способ — вообще отказаться от использования GDI в полноэкранном режиме. Чтобы сделать GDI неактивным можно разместить поверх всех остальных окон развернутое на весь экран пустое окно без меню.
Наше обсуждение мы начнем с краткого обзора DirectDraw. Затем мы модифицируем класс RMWin для поддержки полноэкранных операций. И в заключение мы используем новую версию класса RMWin при создании приложения FullScreen.