Можно ли изменить размер окна за размер экрана / вне экрана? - PullRequest
4 голосов
/ 25 мая 2011

Моя цель состоит в том, чтобы программно настроить размер окна на ширину / высоту, превышающие размер моего физического экрана под Win32.Как я могу это сделать?

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

Я пробовал программно с SetWindowPos () и MoveWindow (), и оба ограничивают размер целевого окна.Странно, но я знаю, что у некоторых людей нет этой «заглавной буквы», поэтому мне интересно, возможно, это связано с некоторыми настройками ОС (реестра).Кто-нибудь знает что-нибудь об этом?Или, возможно, каким-то образом обойти это?

// Редактировать: новые разработки

Я тестирую на Windows XP и Windows 7. Я использую видеокарты NVIDIA Quadro NVS 290 (256 МБ) и Geforce 9800GT (1 ГБ).После дальнейшего исследования похоже, что Windows перехватывает сообщение и возится с параметрами.Например, если вы вызываете SetWindowPos для создания цели 2000x2000, он получит только WM_SIZE для ограниченного х / у.

Ответы [ 4 ]

10 голосов
/ 26 мая 2011

Реализация обработчика сообщений для WM_GETMINMAXINFO, чтобы запретить Windows применять нормальное поведение по умолчанию:

case WM_GETMINMAXINFO: {
    DefWindowProc(hWnd, message, wParam, lParam);
    MINMAXINFO* pmmi = (MINMAXINFO*)lParam;
    pmmi->ptMaxTrackSize.x = 2000;
    pmmi->ptMaxTrackSize.y = 2000;
    return 0;
}
3 голосов
/ 13 июля 2011

Окна с толстой рамкой (чтобы разрешить изменение размера пользователя) не должны быть больше, чем рабочий стол.

Попробуйте SetWindowLong () очистить флаг THICKFRAME (0x40000).

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

Ниже приведен фрагмент кода csharp, который также удаляет все границы:заголовок и т. д.:

WS style = (WS) GetWindowLong (ptr, GWL_STYLE);style = style & ~ WS.BORDER & ~ WS.ThickFrame & ~ WS.SYSMENU & ~ WS.CAPTION |WS.POPUP;SetWindowLong (ptr, GWL_STYLE, (int) style);


Хорошим инструментом для работы с настройками окна является uuSpy.Это похоже на Microsoft Spy ++, но позволяет изменять настройки, например THICKFRAME.

0 голосов
/ 22 марта 2016

Вы можете получить окно, которое будет иметь большее разрешение (и даже намного больше), чем ваш экран, используя программное обеспечение «Infinte Screen»: http://ynea.futureware.at/cgi-bin/infinite_screen.pl

Вот как это использовать:

  1. Скачайте, запустите.

  2. На вкладке «Негабаритные размеры» выберите окна, которые вы хотите увеличить.

  3. Укажите желаемую ширину и высоту. Готово!

На всякий случай, если вам нужен большой скриншот (вот как я здесь оказался): Если вы хотите получить скриншот окна, у вас есть опция скриншота на той же вкладке Oversize. (Поскольку скриншоты обычно не больше размера экрана, даже если окно больше). Другой (и лучший) способ сделать скриншот окна - использовать Greenshot, так как вы можете сохранить их в .tiff и непосредственно наблюдать за окном.

0 голосов
/ 25 мая 2011

Да, окна могут быть больше экрана (или даже суммы всех ваших мониторов).Windows также можно расположить вне экрана (что некоторые приложения делают скрытым, оставаясь активным).

Возможно, менеджер рабочего стола Windows 7 запускает и пытается «пристыковать» эти окна к краям экрана.ваш экран для вас.

Вы можете попробовать использовать API более низкого уровня SetWindowPos, который дает вам контроль над уведомлениями, z-порядком и другими вещами.

...