Как связать оконную процедуру с моим существующим диалоговым окном

У меня был проект на основе диалогового окна Windows, который автоматически генерируется VS 2013. Теперь я хочу добавить код для обнаружения вставки USB-устройства. Я прочитал пример кода см. 1. Это оконная процедура может обрабатывать сообщения. Я также знаю, что мне нужно было связать этот WinProc с объектом WNDCLASS и вызвать RegisterClass, как пример кода ссылается на 2.

Однако мой код, сгенерированный VS 2013, кажется, не так. Например, я не могу найти WinMain, как см. 2. Он начинается с глобального объекта CWinApp::MyApp и в MyApp::InitInstance() создает и открывает мое главное диалоговое окно. Я реализую детали в диалоге реализации.

Я не знаю, как связать оконную процедуру с моим основным диалогом. Или как это сделать в главном диалоговом окне, когда USB вставил Main_OnDeviceChange( HWND hwnd, WPARAM wParam, LPARAM lParam) в ссылке 1 будет вызван автоматически.

2 ответа

Я нашел решение двух шагов в главном диалоговом классе.

  1. Добавьте ON_WM_DEVICECHANGE() между BEGIN_MESSAGE_MAP и END_MESSAGE_MAP

  2. Добавить afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData); и реализовать это.

OnDeviceChange - это имя по умолчанию. Он не работает, если изменить имя.

Мне не удалось получить доступ к ссылкам примеров, но, как я понял из вашего вопроса, образцы написаны с использованием Windows APIS, в то время как ваше приложение является приложением на основе MFC Dialog.

Я думаю, что вам нужно только переопределить метод WindowProc в классе диалога

LRESULT WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{       
    return CWnd::WindowProc(uMsg, wParam, lParam);
}
Другие вопросы по тегам