Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Как получить размеры и положение всего окна?

03.11.2014, 12:06. Показов 7670. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не рабочей области, а именно целиком.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.11.2014, 12:06
Ответы с готовыми решениями:

Как установить размеры и положение нового окна?
Новое окно создается вот таким кодом: <a href="#" onClick="winObj = window.open ('/my-files/st/st-clic.php', 'myWin','status=no,...

Как получить размеры клиентской области окна-родителя в функции дочернего окна?
задание такое: имеется дочернее окно,которое "убегает" от курсора мыши в пределах родительского окна. я создала главное окно,и дочернее,...

Как в апплете получить размеры окна броузера?
Как в апплете получить размеры окна броузера и отловить событие изменения размеров окна эксплорера? Помогите, плиз.

24
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
03.11.2014, 13:43
Посколько вопрос в ветке, где обсуждается С++ без привязки к чему либо, возникают очевидные вопросы - какого окна? При помощи чего это нужно сделать? На какой ОС?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 13:46  [ТС]
На винде.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.11.2014, 13:50
GetWindowRect

Не по теме:

Без тебя на форуме скучно..

0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 14:35  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 RECT WindowRectangle;
 switch (Message)
 {
  case WM_SIZE   : DefWindowProc(Window, Message, First, Second);
                   GetWindowRect(Window, &WindowRectangle);
                   Options.SetMainWindowSize(WindowRectangle.right-WindowRectangle.left, WindowRectangle.bottom-WindowRectangle.top);
  Options.Load();
  break;
  case WM_MOVE   : DefWindowProc(Window, Message, First, Second);
                   GetWindowRect(Window, &WindowRectangle);
                   Options.SetMainWindowPosition(WindowRectangle.top, WindowRectangle.left);
  Options.Load();
  break;
  case WM_DESTROY: Log<<"<Quite>By user command</Quite>"<<std::endl;
                   PostQuitMessage(0);
  break;
 }
 return DefWindowProc(Window, Message, First, Second);
После распахивания WindowRectangle.left и WindowRectangle.top почему то по минус восемь.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.11.2014, 15:14
Лично я не понял где там -8 ...
Не совсем по теме:
Зачем каждый раз вызывать DefWindowProc?
Зачем каждый раз сохранять размер и позицию?
Куда записывается позиция, как читается и как устанавливается?

Не по теме:

Quite - это тихий, Quit - это выход.



Добавлено через 21 секунду
Лично я не понял где там -8 ...
Не совсем по теме:
Зачем каждый раз вызывать DefWindowProc?
Зачем каждый раз сохранять размер и позицию?
Куда записывается позиция, как читается и как устанавливается?

Не по теме:

Quite - это тихий, Quit - это выход.

0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 15:41  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
Лично я не понял где там -8 ...
После выполнения 5-й и 10-й строк.

Добавлено через 23 секунды
Цитата Сообщение от castaway Посмотреть сообщение
Куда записывается позиция,
В файл.

Добавлено через 18 секунд
Цитата Сообщение от castaway Посмотреть сообщение
как читается и как устанавливается?
read.

Добавлено через 41 секунду
Цитата Сообщение от castaway Посмотреть сообщение
и как устанавливается?
Просто давлю крысой "развернуть".
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.11.2014, 15:51
Пойми, то что ты говоришь понятно только тебе. Эта информация никак не поможет решить проблему.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 16:09  [ТС]
Что не понятного? Жму сюда:

,потом в оконной процедуре
C++
1
2
case WM_SIZE   : DefWindowProc(Window, Message, First, Second);
                   GetWindowRect(Window, &WindowRectangle); // После выполнения этой строки WindowRectangle.top и WindowRectangle.left равны по минус восемь.
.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.11.2014, 16:25
Цитата Сообщение от taras atavin Посмотреть сообщение
После выполнения этой строки WindowRectangle.top и WindowRectangle.left равны по минус восемь.
Теперь хоть что-то понятно. Рамка ушла за приделы экрана, поэтому координаты отрицательные.

Когда ты жмёшь на кнопку "Развернуть", окно получает сообщение WM_SIZE с кодом SIZE_MAXIMIZED в wParam. Если окно "развёрнуто" то информацию об этом тоже нужно сохранить в файл конфигурации, чтобы потом его можно было развернуть с помощью функции ShowWindow( hWnd, SW_MAXIMIZE );

Добавлено через 15 секунд
Цитата Сообщение от taras atavin Посмотреть сообщение
После выполнения этой строки WindowRectangle.top и WindowRectangle.left равны по минус восемь.
Теперь хоть что-то понятно. Рамка ушла за приделы экрана, поэтому координаты отрицательные.

Когда ты жмёшь на кнопку "Развернуть", окно получает сообщение WM_SIZE с кодом SIZE_MAXIMIZED в wParam. Если окно "развёрнуто" то информацию об этом тоже нужно сохранить в файл конфигурации, чтобы потом его можно было развернуть с помощью функции ShowWindow( hWnd, SW_MAXIMIZE );
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 16:26  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
Теперь хоть что-то понятно. Рамка ушла за приделы экрана, поэтому координаты отрицательные.
Нет. Рамка не ушла за границы экрана, а распахнулась нормально:

. Это весь скриншот. Но GetWindowRect прочитала отрицательные координаты.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 16:30  [ТС]
А вот чему эти координаты соответствуют:

. Я сохранил прочитанные координаты в файл и использовал для функции CreateWindow и это тоже весь экран.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 16:33  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
чтобы потом его можно было развернуть с помощью функции ShowWindow( hWnd, SW_MAXIMIZE );
Нет. Я сохраняю сами размеры.
C++
1
2
3
4
5
6
7
8
int           WINAPI   WinMain                  (      HINSTANCE  Instance   ,
                                                       HINSTANCE  Previus    ,
                                                       PSTR       CommandLind,
                                                       int        Show       )
{
 ...
 ShowWindow  (WindowMain, Show);
 UpdateWindow(WindowMain);
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
03.11.2014, 16:36
Гугл (кстати удобная штука) говорит, что отрицательные координаты потому что они относительны какого-то дочернего элемента (может быть рабочей области). На другом форуме нашел такой же вопрос, там чувак пишет, что решил проблему путем поиска главного окна через FindWindowEx.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 16:47  [ТС]
Тогда почему при
C++
1
2
3
4
5
6
7
8
9
10
11
  WindowMain=CreateWindow("Sculptor.Window.Main"       ,
                          "Sculptor"                   ,
                          WS_OVERLAPPEDWINDOW          ,
                          0,
                          0,
                          Options.GetMainWindowWidth (),
                          Options.GetMainWindowHeight(),
                          NULL                         ,
                          NULL                         ,
                          Instance                     ,
                          NULL                         );
читаются ноли?

Добавлено через 1 минуту
Цитата Сообщение от Kastaneda Посмотреть сообщение
что решил проблему путем поиска главного окна через FindWindowEx.
Это и так оконная процедура главного кона. Его не надо искать.
0
 Аватар для behollder
47 / 28 / 12
Регистрация: 23.01.2013
Сообщений: 125
03.11.2014, 16:52
Такие дела. Нужно пользоваться отладчиком чтобы.
Когда вы нажимаете развернуть окно, по ширине оно разворачивается на всю клиентскую ширину, без рамки, но getwindowrect возвращает координаты с рамкой по краям.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.11.2014, 16:55
Вот такие дела.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 17:00  [ТС]
Цитата Сообщение от greenlight Посмотреть сообщение
Такие дела. Нужно пользоваться отладчиком чтобы.
А где я по-вашему прочитал минус восемь?

Добавлено через 1 минуту
Цитата Сообщение от greenlight Посмотреть сообщение
Такие дела. Нужно пользоваться отладчиком чтобы.
Когда вы нажимаете развернуть окно, по ширине оно разворачивается на всю клиентскую ширину, без рамки, но getwindowrect возвращает координаты с рамкой по краям.
Как исправить?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.11.2014, 17:26
Цитата Сообщение от taras atavin Посмотреть сообщение
Как исправить?
Цитата Сообщение от castaway Посмотреть сообщение
Когда ты жмёшь на кнопку "Развернуть", окно получает сообщение WM_SIZE с кодом SIZE_MAXIMIZED в wParam. Если окно "развёрнуто" то информацию об этом тоже нужно сохранить в файл конфигурации, чтобы потом его можно было развернуть с помощью функции ShowWindow( hWnd, SW_MAXIMIZE );
Прям какой-то круговорот воды в природе..
0
 Аватар для behollder
47 / 28 / 12
Регистрация: 23.01.2013
Сообщений: 125
03.11.2014, 17:30
Я бы, наверно, выбрал сохранять еще флаг окна(развернуто, свернуто) и показывать с ним. А может сделал бы по другому, тут что вам нужно, способ тысяча. Влом вникать дальше. Можете проверять wParam; // resizing flag
и делать расчеты, как вам кажется правильно или брать ширину клиентскую, или взять ширину монитора... Сами придумайте способ.

Добавлено через 16 секунд
Я бы, наверно, выбрал сохранять еще флаг окна(развернуто, свернуто) и показывать с ним. А может сделал бы по другому, тут что вам нужно, способ тысяча. Влом вникать дальше. Можете проверять wParam; // resizing flag
и делать расчеты, как вам кажется правильно или брать ширину клиентскую, или взять ширину монитора... Сами придумайте способ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.11.2014, 17:30
Помогаю со студенческими работами здесь

Как помимо сообщения WM_SIZE получить размеры клиентской области окна?
Как помимо сообщения WM_SIZE получить размеры клиенсткой области окна?

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

Какими способами можно в приложении ASP.NET получить размеры экрана пользователя и размер окна браузера?
Есть ASP.NET приложения. Для своих нужд требуется получить размер экрана у пользователя и размер окна браузера. Какими путями это можно...

Как узнать размеры окна?
Как узнать размеры окна за вычетом ширины границ окна, высоты заголовка и высоты меню?

Как узнать размеры окна?
Есть такой код в конструкторе главного окна: QPushButton *but = new QPushButton(&quot;Кнопка&quot;, this); int x =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
ПЛИС
zxcha1ka_ 27.01.2026
AHDL Разработать программы для синтеза следующих устройств: 1. Параллельного регистра 4-х разрядного с синхронной загрузкой и асинхронным сбросом (обнулением); Пoмoгитe пoжaлyйстa
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru