Добавление обработчика событий в недавно созданное окно с использованием C ++ - PullRequest
2 голосов
/ 02 ноября 2010

Как добавить обработчик событий во вновь созданное окно с помощью C ++?

_hWnd = CreateWindow( NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL );

Это фиктивное окно, которое предназначено только для ожидания события WM_DEVICECHANGE и должно быть зарегистрировано с помощью RegisterDeviceNotification. Как мне прикрепить обработчик событий к этому окну? Я использую Visual Studio 2008. Спасибо.

Ответы [ 5 ]

3 голосов
/ 02 ноября 2010

Вы можете сделать это, установив процедуру окна с помощью SetWindowLongPtr и флага GWL_WNDPROC.

SetWindowLongPtr(_hWnd, GWL_WNDPROC, myWndProc);
2 голосов
/ 02 ноября 2010

В дополнение к тому, что говорили другие, при создании скрытого окна только для приема сообщений, рассмотрите возможность использования CreateWindowEx() с параметром hWndParent, установленным на HWND_MESSAGE.См. MSDN для получения дополнительной информации .

2 голосов
/ 02 ноября 2010

Вам необходимо связать оконную процедуру с классом окна, используя RegisterClass, а затем создать свое окно, используя этот класс. Это оконная процедура, которая обрабатывает все сообщения - в Win32 нет механизма "обработчика событий".

0 голосов
/ 02 ноября 2010

Возможно, вам не придется создавать отдельное окно только для обработки этого сообщения.

Я упоминаю об этом, потому что в большинстве приложений Windows уже создано окно, и вам просто нужно добавить обработку для сообщения WM_DEVICECHANGE в окнопроцедура вашего главного окна.

Если ваше приложение работает как служба Windows (демон), вы также можете получать уведомления об изменении устройства в вашем обработчике управления службами .

Если ваше приложение является приложением в консольном режиме, вы можете получить дескриптор его окна и подкласс его , добавив обработку для сообщения WM_DEVICECHANGE.

Веселитесь!

0 голосов
/ 02 ноября 2010

Обычно, по крайней мере, вы сначала вызываете RegisterClass, который указывает процедуру окна для этого класса окон. Затем вы указываете класс при вызове CreateWindow.

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