Почему бы не вызвать оконную процедуру вместо вызова CallWindowProc?

#windows #winapi #callback #function-pointers

#Windows #winapi #обратный вызов #указатели на функции

Вопрос:

Почему существует такая функция CallWindowProc? Мы указываем адрес оконной процедуры, так не лучше ли вызвать функцию вместо вызова другой функции, которая вызывает функцию?

Ответ №1:

Потому GetWindowLong что (или GetWindowLongPtr ) может возвращать значение, которое не является указателем на функцию, которое CallWindowProc может распознать и преобразовать в правильный вызов. [1]

Комментарии:

1. Если в Windows API есть что-то странное, вы можете поспорить, что это связано с совместимостью со старыми версиями.

Ответ №2:

Функция CallWindowProc обрабатывает преобразование Unicode в ANSI. Вы не сможете воспользоваться этим преобразованием, если вызовете оконную процедуру напрямую.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633571 (v= против 85).aspx

Комментарии:

1. Могу ли я спросить, почему CallWindowProc возникла проблема с unicode / ansi? В его подписи нет параметров TCHAR.

2. @ChenOT Я предполагаю, что LPARAM различных типов сообщений часто указывают на строки — либо узкие, либо широкие строки, в зависимости от того, как была создана оконная процедура.