#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 различных типов сообщений часто указывают на строки — либо узкие, либо широкие строки, в зависимости от того, как была создана оконная процедура.