Как получить HWND в win32? - PullRequest
       6

Как получить HWND в win32?

0 голосов
/ 01 декабря 2010

Есть ли способ получить обработчик HWND моего окна?
Я использую win32.

Ответы [ 3 ]

7 голосов
/ 01 декабря 2010

Вы можете вызвать GetActiveWindow, чтобы получить активный элемент управления в вашем приложении, а затем повторно вызывать GetParent для возвращаемого дескриптора, пока он не вернет NULL.Последний действительный дескриптор, который вы получите, должен быть дескриптором вашего главного окна.

Самый простой способ, как сказал кто-то другой, - сохранить возвращенное значение из CreateWindow где-нибудь.

6 голосов
/ 01 декабря 2010

Наверное, хорошо понять, почему не существует простого способа. Все сводится к « какому окну?». Скорее всего, прямо сейчас на вашем экране будет видно несколько окон. Например, панель задач внизу экрана - это окно. даже ваше собственное приложение обычно имеет более одного. Например, диалоговое окно «Сохранить файл» является окном. Даже простой MessageBox - это окно.

Итак, как определить о каком окне вы говорите? Общий ответ таков: вы идентифицируете их по HWND. Таким образом, чтобы получить позицию диалогового окна «Сохранить файл», вы запрашиваете позицию, связанную с этим HWND. Очевидно, что таким способом вы можете получить любое свойство, , кроме самого HWND! Имеет смысл задать X / Y позицию HWND(0x5e21), но глупо спрашивать, какой HWND принадлежит HWND(0x5e21).

Теперь может случиться, что у вас есть другое более или менее уникальное свойство, и вы хотите получить HWND от этого. Например, у вас может быть позиция X / Y. В этом случае WindowFromPoint(xy) вернет HWND в этой позиции.

Но наиболее распространенным случаем является то, что вам нужно реагировать на сообщение Windows для вашего окна. В этом случае вы получите HWND вашего окна в качестве первого аргумента вашего WindowProc().

Таким образом, если вы не сообщите нам, какой уникальной информацией вы обладаете, мы не сможем рассказать вам, как найти соответствующий HWND.

6 голосов
/ 01 декабря 2010

Разве вы не создали свое окно с помощью CreateWindow() или CreateWindowEx()?Функция CreateWindowEx () и функция CreateWindow () возвращают HWND только что созданного окна.

Кроме того, операционная система передает вам HWND ваших окон через вашу оконную процедуру .Это не функция, которую вы вызываете;это функция, которую операционная система вызывает, чтобы ваше приложение могло выполнять любую необходимую обработку.

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