Какая польза от передачи дополнительных данных в CreateWindowEx - PullRequest
1 голос
/ 04 августа 2020

В документах API Windows упоминается, что вы можете передавать дополнительные данные, такие как информация о состоянии, в функцию CreateWindowEx() в качестве последнего параметра, к которому можно получить доступ во время событий WM_CREATE/WM_NCCREATE. Затем вы можете сохранить информацию о состоянии внутри самого окна, используя функцию SetWindowLongPtr().

Но какой смысл это делать, если мы можем напрямую устанавливать данные с помощью SetWindowLongPtr() сразу после инициализации окна (внутри wWinmain ())?

1 Ответ

4 голосов
/ 04 августа 2020

Передача пользовательских данных через параметр lpParam в CreateWindow/Ex() позволяет этим данным быть доступными для вашей оконной процедуры , пока CreateWindow/Ex() все еще выполняется. Сам CreateWindow/Ex() отправляет в окно несколько сообщений, включая WM_(NC)CREATE. Когда получено WM_(NC)CREATE, ваши данные доступны через CREATESTRUCT, на который указывает lParam, и поэтому вы можете затем назначить эти данные окну через SetWindowLongPtr() (или SetProp()) для последующих сообщений для доступа через GetWindowLongPtr() (или GetProp()).

Если вы подождете, пока не выйдет CreateWindow/Ex(), прежде чем позвонить по номеру SetWindowLongPtr(), эти начальные сообщения не будут иметь доступа к вашим данным, если только вы сохраняете его в глобальной или локальной переменной потока, к которой оконная процедура может получить доступ.

Приемлемо ли это для вас, зависит от вашей конкретной ситуации.

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