Почему существует такая функция CallWindowProc?Мы предоставляем адрес оконной процедуры, поэтому не лучше ли вызывать функцию вместо вызова другой функции, которая вызывает функцию?
Поскольку GetWindowLong (или GetWindowLongPtr) может возвращать значение, которое не является указателем на функцию, которое CallWindowProc может распознать и преобразовать в правильный вызов. [1]
GetWindowLong
GetWindowLongPtr
CallWindowProc
Функция CallWindowProc обрабатывает преобразование Unicode в ANSI. Вы не можете воспользоваться этим преобразованием, если напрямую вызываете оконную процедуру.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633571(v=vs.85).aspx