SetWindowLongPtr с DialogBoxParam? - PullRequest
3 голосов
/ 06 января 2011

Некоторое время назад я писал программу на C ++ с Win32 API, которая отображала диалоговое окно и затем прослушивала генерируемые им сообщения. В какой-то момент мне было интересно связать часть данных с диалоговым окном. Если бы я вручную создавал окно и прикреплял процесс окна, я бы просто использовал SetWindowLongPtr, чтобы установить в поле GWLP_USERDATA указатель на данные, которые нужно связать. Однако в этом случае я создавал и отображал окно с DialogBoxParam, и не было ясно, связывает ли эта функция эти данные с ее собственным внутренним состоянием. Поскольку в MSDN не было описания того, что произойдет в этом случае, я решил использовать другой подход для решения проблемы.

У меня такой вопрос: безопасно ли использовать SetWindowLongPtr для перезаписи значения GWLP_USERDATA в окне, созданном DialogBoxParam?

1 Ответ

2 голосов
/ 07 января 2011

Технически, GWLP_USERDATA предназначен для использования класса окон (базовый в случае создания подклассов). Поскольку диалоговые окна являются готовым классом, GWLP_USERDATA предназначен для внутреннего использования, поэтому диалоговые окна предоставляют поле DWLP_USER для использования вашей реализацией DialogProc.

Однако, как есть, все классы внутренних окон, предоставляемые Microsoft - EDIT, BUTTON, Dialog и т. Д., Не используют и не могут использовать GWLP_USERDATA по причинам совместимости приложений, поэтому они эффективно доступны для использования приложением.

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