Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,014

Определение размеров "бордюров" чужого окна

28.10.2013, 19:06. Показов 1177. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Чтобы стало понятней, объясню на примере формы в среде разработки.
Форма имеет свойства ClientWidth и ClientHeight. С помощью них задача решается просто:
C++
1
2
3
4
brdLeft = (Width - ClientWidth) / 2;
brdRight = brdLeft;
brdBot = brdLeft;
brdTop = Height - ClientHeight - brdBot;
Как мне "провернуть" подобное для любого окна (или есть ли у него "аналоги" ClientWidth и ClientHeight)?
В своей программе я указываю примерные значения "бордюров", а желательно определять их точно.
C++
1
2
3
4
5
6
7
8
9
10
11
HWND hWnd = FindWindow(NULL, "Warcraft III");
 
TRect WarRect;
GetWindowRect(hWnd, &WarRect);
 
WarRect.left += 10;
WarRect.top += 30;
WarRect.right -= 10;
WarRect.bottom -= 10;
 
ClipCursor(&WarRect);
Миниатюры
Определение размеров "бордюров" чужого окна  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.10.2013, 19:06
Ответы с готовыми решениями:

Масштабирование размеров графика в Image при изменении размеров окна
Подскажите пожалуйста, как использовать масштабирование, у меня построен график в Image1, как сделать чтобы при изменение размеров окна,...

Определение размеров окна
Доброго всем времени суток. Очередной вопрос назрел. Как в Microsoft Visual Studio C++ нарисовать прямоугольник чуть меньше чем само...

Изменение размеров виджета при изменении размеров окна
Здравствуйте! Окно, созданное Qt (в моем случае QMainWindow), можно увеличивать и уменьшать в размерах. А как сделать так, чтобы...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
28.10.2013, 19:43
GetClientRect для определения размеров клиентской области - в помощь, и по твоему же алгоритму далее...
1
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,014
28.10.2013, 21:21  [ТС]
Весьма забавно и странно, однако у меня GetClientRect() не требует параметров (при их наличии выдает ошибку).
Хотя в справке описание "правильное" (параметры такие же, как и у GetWindowRect).
Builder 2007.
Миниатюры
Определение размеров "бордюров" чужого окна  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
28.10.2013, 21:45
В TCustomForm есть метод GetClientRect, именно он имеет приоритет при вызове из метода класса формы. Чтобы вызвать одноименную WinAPI функцию, надо

C++
1
::GetClientRect(hWnd, &WarRect);
(я вообще, всегда, когда вызываются API-функции, добавляю ::, независимо от того, есть пересечение имен или его нет...)

И, разумеется, не надо читать размеры в одну и ту же переменную...
1
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,014
28.10.2013, 22:31  [ТС]
Про переменную понятно, написал так, чтобы ошибка ясна была.
Код - удержание курсора мыши в клиентской части окна - работает в лучшем виде.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HWND hWnd = FindWindow(NULL, "Warcraft III");
 
TRect WarRect, WarArea;
GetWindowRect(hWnd, &WarRect);
::GetClientRect(hWnd, &WarArea);
 
int brdLRB = (WarRect.Width() - WarArea.Width()) / 2;
int brdTop = WarRect.Height() - WarArea.Height() - brdLRB;
 
WarArea.left = WarRect.left + brdLRB;
WarArea.right = WarRect.right - brdLRB;
WarArea.bottom = WarRect.bottom - brdLRB;
WarArea.top = WarRect.top + brdTop;
 
ClipCursor(&WarArea);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.10.2013, 22:31
Помогаю со студенческими работами здесь

Изменение размеров окна при изменении размеров виджета
Доброго времени суток, господа программисты! Возникла такая ситуация: есть окно программы, в нем виджет, который увеличивается при...

Получение размеров чужого окна
Возник вопрос по получению размеров окна стороннего приложения. Пробовал WinAPI GetWindowRect(), но он выдает совершенно не то, что выдает...

Определение размеров окна
Не могу определить размеры окна. Когда пишу window.width/height выдает udefinded Как же их определить, эти размеры?

Определение размеров основного окна
Есть приложение которое имеет основное окно (JFrame) и несколько внутренних(JIntenalFrame). С помощью какого метода можно определить...

Определение размеров клиентской части окна
Здравствуйте. Можно ли как-нибудь получить размеры клиентской части окна браузера в IE? Для Gecko - window.innerWidth и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
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" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru