Как получить ширину и высоту из окна CreateWindowEx ()? C ++ - PullRequest
10 голосов
/ 05 марта 2009

Я сделал окно с функцией CreateWindowEx (), теперь, как мне получить ширину и высоту из того окна, которое я создал? Это звучит очень просто, но я просто не могу найти никакого ответа; _;

Это необходимо, поскольку высота окна создается автоматически в зависимости от того, как Windows хочет его создать.

Язык C или C ++

Ответы [ 4 ]

25 голосов
/ 05 марта 2009

Использовать GetWindowRect . Вычтите справа налево, чтобы получить ширину, и снизу сверху, чтобы получить высоту.

RECT rect;
if(GetWindowRect(hwnd, &rect))
{
  int width = rect.right - rect.left;
  int height = rect.bottom - rect.top;
}

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

1 голос
/ 05 марта 2009

Вы пробовали GetWindowRect() или GetWindowInfo(), который возвращает WINDOWINFO структуру?

1 голос
/ 05 марта 2009

Я полагаю, вы ищете GetWindowInfo

Пример:

HWND window = ::CreateWindowEx(...);
WINDOWINFO info;
if ( ::GetWindowInfo(window, &info) ) {
  ...
}
0 голосов
/ 05 марта 2009

Учитывая, что нет никаких указаний на то, почему вам нужен размер, и что размер может измениться, если стиль окна настроен на включение атрибутов с изменяемым размером [и пользователь изменяет размер окна, используя свернуть / развернуть / восстановить или перетащить край окна], Самый безопасный выбор - включить обработчик сообщений для WM_SIZE и использовать значения параметров wparam и lparam для определения размеров окна. Таким образом, вы всегда будете знать текущий размер. WM_SIZE вызывается в последовательности сообщений после создания окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...