Blog. Just Blog

Как сделать окно размером больше монитора

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Для изменения размера окна в WinAPI используется функции SetWindowPos или MoveWindow, два параметра которых как раз и отвечают за размер. Обе функции прекрасно работают с окнами, размер которых не превышает размер монитора. Но есть неприятная особенность. При попытке увеличить окно до размеров, значительно превышающих размер монитора, оно действительно увеличится, но при любом последующем действии с окном оно тут же будет принудительно уменьшаться до максимально допустимого размера. Затрудняюсь сказать, с чем это связано, но факт имеет место быть. Таким образом, если ваше приложение подразумевает работу с большим окном, но оно запущено на компьютере с маленьким монитором, то с отображением возникнут проблемы. Не буду рассуждать на тему самой необходимости подобных действий, перейду сразу к реализации решения этой проблемы. Оно основано на обработке сообщения WM_GETMINMAXINFO.
  1.         cmp     [msg],WM_GETMINMAXINFO
  2.         je      .minmax
  3.         ...
  4.         ...
  5. .minmax:
  6.         ; В регистре EDI указатель на структуру координат окна
  7.         mov     edi,[lparam]
  8.  
  9.         ; Принудительно прописать размеры окна
  10.         mov     [edi+MINMAXINFO.ptMaxSize.x],7000
  11.         mov     [edi+MINMAXINFO.ptMaxTrackSize.x],7000
  12.         mov     [edi+MINMAXINFO.ptMinTrackSize.x],7000
  13.  
  14.         mov     [edi+MINMAXINFO.ptMaxSize.y],7000
  15.         mov     [edi+MINMAXINFO.ptMaxTrackSize.y],7000
  16.         mov     [edi+MINMAXINFO.ptMinTrackSize.y],7000
  17.         jmp     .processed
В обработчике основного окна проверяем, что пришло сообщение WM_GETMINMAXINFO, после чего в структуре MINMAXINFO, на которую указывает параметр lparam, принудительно прописываем необходимые значения размера окна.

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

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

Very.Big.Window.Demo.zip (2,387 bytes)


Поделиться ссылкой ВКонтакте
Просмотров: 229 | Комментариев: 1

Метки: Assembler, окна

Комментарии

Отзывы посетителей сайта о статье
Grey (18.10.2024 в 10:07):
Читая статью, вспомнил как искал давно, что то типа драйвера, чтобы винда "думала", что у меня огромный монитор, хотя бы 5 тыс. точек. Для скриншотов с одного ГИС сервиса. Ничего адекватного тогда не нашёл. Видимо желание было неадекватное)

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.06 сек. / MySQL: 2 (0.0048 сек.) / Память: 4.5 Mb
Наверх