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

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

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

Author24 — интернет-сервис помощи студентам
Не рабочей области, а именно целиком.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2014, 12:06
Ответы с готовыми решениями:

Как установить размеры и положение нового окна?
Новое окно создается вот таким кодом: <a href="#" onClick="winObj = window.open...

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

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

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

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

Не по теме:

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

0
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 14:35  [ТС] 5
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,169
Записей в блоге: 10
03.11.2014, 15:14 6
Лично я не понял где там -8 ...
Не совсем по теме:
Зачем каждый раз вызывать DefWindowProc?
Зачем каждый раз сохранять размер и позицию?
Куда записывается позиция, как читается и как устанавливается?

Не по теме:

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



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

Не по теме:

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

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

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

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

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

,потом в оконной процедуре
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,169
Записей в блоге: 10
03.11.2014, 16:25 10
Цитата Сообщение от 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
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 16:26  [ТС] 11
Цитата Сообщение от castaway Посмотреть сообщение
Теперь хоть что-то понятно. Рамка ушла за приделы экрана, поэтому координаты отрицательные.
Нет. Рамка не ушла за границы экрана, а распахнулась нормально:
Как получить размеры и положение всего окна?

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

. Я сохранил прочитанные координаты в файл и использовал для функции CreateWindow и это тоже весь экран.
0
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 16:33  [ТС] 13
Цитата Сообщение от 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
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
03.11.2014, 16:36 14
Гугл (кстати удобная штука) говорит, что отрицательные координаты потому что они относительны какого-то дочернего элемента (может быть рабочей области). На другом форуме нашел такой же вопрос, там чувак пишет, что решил проблему путем поиска главного окна через FindWindowEx.
0
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 16:47  [ТС] 15
Тогда почему при
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
47 / 28 / 12
Регистрация: 23.01.2013
Сообщений: 125
03.11.2014, 16:52 16
Такие дела. Нужно пользоваться отладчиком чтобы.
Когда вы нажимаете развернуть окно, по ширине оно разворачивается на всю клиентскую ширину, без рамки, но getwindowrect возвращает координаты с рамкой по краям.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
03.11.2014, 16:55 17
Вот такие дела.
0
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.11.2014, 17:00  [ТС] 18
Цитата Сообщение от greenlight Посмотреть сообщение
Такие дела. Нужно пользоваться отладчиком чтобы.
А где я по-вашему прочитал минус восемь?

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

Добавлено через 16 секунд
Я бы, наверно, выбрал сохранять еще флаг окна(развернуто, свернуто) и показывать с ним. А может сделал бы по другому, тут что вам нужно, способ тысяча. Влом вникать дальше. Можете проверять wParam; // resizing flag
и делать расчеты, как вам кажется правильно или брать ширину клиентскую, или взять ширину монитора... Сами придумайте способ.
0
03.11.2014, 17:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2014, 17:30
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru