Как сделать окно размером больше монитора
Для изменения размера окна в WinAPI используется функции SetWindowPos или MoveWindow, два параметра которых как раз и отвечают за размер. Обе функции прекрасно работают с окнами, размер которых не превышает размер монитора. Но есть неприятная особенность. При попытке увеличить окно до размеров, значительно превышающих размер монитора, оно действительно увеличится, но при любом последующем действии с окном оно тут же будет принудительно уменьшаться до максимально допустимого размера. Затрудняюсь сказать, с чем это связано, но факт имеет место быть. Таким образом, если ваше приложение подразумевает работу с большим окном, но оно запущено на компьютере с маленьким монитором, то с отображением возникнут проблемы. Не буду рассуждать на тему самой необходимости подобных действий, перейду сразу к реализации решения этой проблемы. Оно основано на обработке сообщения WM_GETMINMAXINFO.Code (Assembler) : Убрать нумерацию
- cmp [msg],WM_GETMINMAXINFO
- je .minmax
- ...
- ...
- .minmax:
- ; В регистре EDI указатель на структуру координат окна
- mov edi,[lparam]
- ; Принудительно прописать размеры окна
- mov [edi+MINMAXINFO.ptMaxSize.x],7000
- mov [edi+MINMAXINFO.ptMaxTrackSize.x],7000
- mov [edi+MINMAXINFO.ptMinTrackSize.x],7000
- mov [edi+MINMAXINFO.ptMaxSize.y],7000
- mov [edi+MINMAXINFO.ptMaxTrackSize.y],7000
- mov [edi+MINMAXINFO.ptMinTrackSize.y],7000
- jmp .processed
В приложении пример программы с исходным текстом, которая разными способами пытается менять размер своего окна до очень больших значений с обработкой WM_GETMINMAXINFO и без.
Просмотров: 229 | Комментариев: 1
Комментарии
Отзывы посетителей сайта о статье
Grey
(18.10.2024 в 10:07):
Читая статью, вспомнил как искал давно, что то типа драйвера, чтобы винда "думала", что у меня огромный монитор, хотя бы 5 тыс. точек. Для скриншотов с одного ГИС сервиса. Ничего адекватного тогда не нашёл. Видимо желание было неадекватное)
Добавить комментарий
Заполните форму для добавления комментария