• Windows winapi freebasic Сделал программу. Она получает список доступных разрешений монитора, переключает разрешение и создаёт выскакивающее полноэкранное окно.
    Для полноэкранного окна ведь достаточно стиля WS_POPUP? Или нужно что‐то ещё?
    github.com
    Добавить нескучную анимацию, что ли.
    ♡ recommended by @ub

Replies (21)

  • @mabu, Нужно. Оторвать руки автору. Не делай так в продакшне.
  • @Linda-chan, Если игра тормозит в большом разрешении, а в маленьком нет — почему так делать нельзя?
  • @mabu, Потому что то, как обычно меняют разрешние в кустарных поделках приводит к хаосу в окнах и иконках на рабочем столе.
  • @Linda-chan, Так ты из списка выберешь то разрешение, которое тебе подходит ближе всего? Ты же сама его выбираешь.
  • @Linda-chan, Там две функции: ChangeDisplaySettings и ChangeDisplaySettingsEx.
  • @mabu, Часто тебе не дают ничего выбрать. Программа просто устанавливает нужное ей разрешение (640×480), а другое либо не предусмотрено, либо выбирается из меню в настройках. А потом программа вылетает, и тебе приходится возвращать всё, как было, ручками. А некоторые ещё и цветность любят менять.
  • @mabu, Игры должны использовать функции DirectX, которые не устраивают хаос.
  • @Linda-chan, Я специально проверял этот момент. Устанавливал 640 на 480 и убивал программу до того, как она вернёт всё взад.
    Там есть флаг CDS_FULLSCREEN. Мсдн не врала, кодга говорила, что этот флаг включает временный режим: после уничтожения процесса настройки вернулись обратно. Может это поведение бесятки, позже проверю на икспихе.
  • @Linda-chan, Направление Икс только для рисования же, а поверхность (окно) тебе самой нужно создать.
  • @Linda-chan, Разрешение монитора переключает по ChangeDisplaySettings, а не через Направление Икс.
  • @Linda-chan, А вот и релиз подъехал github.com
  • @mabu, Ну, может быть.
  • @mabu, То DirectDraw.
  • @Linda-chan, Я запутался. Педивикия говорит, что в DirectDraw можно рисовать в полноэкранном режиме, но DirectDraw устарел.
  • @mabu, Это норма. У нас есть WinInet API, который тоже устарел, но не COM замены нет.
  • @Linda-chan, Так в бесятке надо специально доустанавливать этот DirectDraw. Я долго не понимал, почему Dungeon Sige 2 не видит других в сетевом режиме.
  • @mabu, То DirectPlay.
  • @Linda-chan, Я вообще считаю, что в играх конфигуратор со всякими параметрами монитора и разрешениями следует выносить в отдельную программу. Сама игра же будет читать значения из реестра и применять настройки.
  • @mabu, Случаи бывают разные.
  • @Linda-chan, А вот пример с сайта корпорации Микрософт
    docs.microsoft.com
  • @mabu, Не вижу там никакого кода вызова функций Направления Икс, которое бы устанавливало некий полноэкранный режим». Есть лишь такое:

    // Make the window borderless so that the client area can fill the screen.
    SetWindowLong(m_hwnd, GWL_STYLE, m_windowStyle & ~(WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU | WS_THICKFRAME));

    Потом они получают текущее разрешение монитора, записывают его в прямоуольник и изменяют размер окна:

    SetWindowPos(
    m_hwnd,
    HWND_TOPMOST,
    fullscreenWindowRect.left,
    fullscreenWindowRect.top,
    fullscreenWindowRect.right,
    fullscreenWindowRect.bottom,
    SWP_FRAMECHANGED | SWP_NOACTIVATE);


    За HWND_TOPMOST разуплотнил бы!