Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Fullscreen window

1.9K
22 января 2004 года
AviDen
91 / / 26.12.2003
Народ, подскажите плииз, как можно развернуть окно приложения во весь экран (а не только до границ Панели Задач)? Ну, например, как это умеют делать Word, Explorer, ACDSee и многие другие приложения? Весь MSDN перерыл - не нашел! Просто ступор какой-то!
3.7K
22 января 2004 года
freeze
29 / / 02.11.2003
Цитата:
Originally posted by AviDen
Народ, подскажите плииз, как можно развернуть окно приложения во весь экран (а не только до границ Панели Задач)? Ну, например, как это умеют делать Word, Explorer, ACDSee и многие другие приложения? Весь MSDN перерыл - не нашел! Просто ступор какой-то!


Надо пересоздать окно со стилем WS_POPUP (чтобы граней не было видно), поместить в верхний левый угол экрана, а потом написать:

 
Код:
DEVMODE ss;
ZeroMemory(&ss,sizeof(DEVMODE));
ss.dmPelsWidth  = WindowWidth; // Ширина окна
ss.dmPelsHeight = WindowHeight; // Высота окна
ss.dmSize       = sizeof(DEVMODE);
ss.dmFields     = DM_PELSWIDTH|DM_PELSHEIGHT;
ChangeDisplaySettings(&ss,CDS_FULLSCREEN);
1.9K
23 января 2004 года
AviDen
91 / / 26.12.2003
Цитата:
Originally posted by freeze

Надо пересоздать окно со стилем WS_POPUP (чтобы граней не было видно), поместить в верхний левый угол экрана, а потом написать:
 
Код:
DEVMODE ss;
ZeroMemory(&ss,sizeof(DEVMODE));
ss.dmPelsWidth  = WindowWidth; // Ширина окна
ss.dmPelsHeight = WindowHeight; // Высота окна
ss.dmSize       = sizeof(DEVMODE);
ss.dmFields     = DM_PELSWIDTH|DM_PELSHEIGHT;
ChangeDisplaySettings(&ss,CDS_FULLSCREEN);



Не получилось... :(((

Во-первых, после пересоздания со стилем WS_POPUP окно перестает отрисовываться вообще. Точнее, его изображение еще висит на экране, но это "мусор", который стирается при перерисовке фона (напр. десктопа).

А зачем вообще юзать ChangeDisplaySettings? В MSDN по этой функции сказано, что она меняет режим дисплея (это, собственно, и происходит). Режим мне менять не нужно. Просто мне нужно окно сделать развернутым на весь экран, даже поверх Панели Задач. Но не AlwaysOnTop - т.к. тогда я не смогу работать в других приложениях. Для примера нажми в Эксплорере кнопку "Во весь экран" (если ее нет - вынеси ее на панель инструментов) - это как раз то, что я хочу.

3.7K
23 января 2004 года
freeze
29 / / 02.11.2003
Тю... У меня WS_POPUP всегда нормально отрисовывался... Правда я с ним только OpenGL делал... Тогда попробуй спрятать панель задач:
 
Код:
HWND tray = FindWindow("Shell_TrayWnd",NULL);
ShowWindow(tray,SW_HIDE);

...И делай окно на всю ширину и высоту экрана:
 
Код:
...
Width = GetSystemMetrics(SM_CXSCREEN);
Height = GetSystemMetrics(SM_CYSCREEN);
...
1.9K
26 января 2004 года
AviDen
91 / / 26.12.2003
Цитата:
Originally posted by freeze
Тю... У меня WS_POPUP всегда нормально отрисовывался... Правда я с ним только OpenGL делал... Тогда попробуй спрятать панель задач:
 
Код:
HWND tray = FindWindow("Shell_TrayWnd",NULL);
ShowWindow(tray,SW_HIDE);

...И делай окно на всю ширину и высоту экрана:
 
Код:
...
Width = GetSystemMetrics(SM_CXSCREEN);
Height = GetSystemMetrics(SM_CYSCREEN);
...



Видишь ли, вопрос возник при юзании проги под Delphi, поэтому вполне возможны некоторые отличия в поведении. Мне просто интерсна реализация fullscreen'а на API-уровне, а уж потом я это все втулю в свой блин VCL.

Зачем растягивать окно до размеров всего экрана - понятно. Но непонятно, зачем юзать ChangeDisplaySettings и зачем устанавливать стиль WS_POPUP. Может, подскажешь, что это за стиль окна такой и где юзается? В MSDN только сказано, что этот стиль определяет pop-up окно. Но что имеется в виду под popup-окном? В смысле, popup-меню или как? Т.е., мне интересно, чем окно со стилем WS_POPUP отличается в поведении от других и не нужно ли его комбинировать с другими стилями? Плюс не отличается ли процесс отрисовки такого окна от других (может, там не WM_PAINT постится?). Короче, если не влом, научите меня, глупого, плииз.

1.9K
26 января 2004 года
AviDen
91 / / 26.12.2003
Цитата:
Originally posted by freeze
Тю... У меня WS_POPUP всегда нормально отрисовывался... Правда я с ним только OpenGL делал... Тогда попробуй спрятать панель задач:
 
Код:
HWND tray = FindWindow("Shell_TrayWnd",NULL);
ShowWindow(tray,SW_HIDE);

...И делай окно на всю ширину и высоту экрана:
 
Код:
...
Width = GetSystemMetrics(SM_CXSCREEN);
Height = GetSystemMetrics(SM_CYSCREEN);
...



Уже разобрался - на этом же форуме поиском нашел.

SetWindowPos(&wndTopMost,0,0,GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),SWP_SHOWWINDOW);

Оказывается, если окно лежит в левом верхнум углу (0, 0) и имеет размеры экрана - то винда автоматом делает его поверх остальных окон, даже TaskBar'а (но без StayOnTop). Все оказалось так просто! Спасибо за ответы.

3.7K
28 января 2004 года
freeze
29 / / 02.11.2003
WS_POPUP - это стиль окна при котором нет кнопок "Close","Maximize","Minimize", нет даже заголовка. То есть как в играх - тайтлбара не видно. А в Делфи всё просто:
 
Код:
...
Form1.BorderStyle := bsNone;
Form1.WindowState := wsMaximized;
...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог