| Цитата | The main problem When you create a WNDCLASSEX structure you need to give the structure a pointer to your window procedure in the lpfnWndProc member. The window procedure is a callback, a special kind of function called directly by Windows when needed.
To make callbacks work correctly, strict typedefs are defined in the Windows header files. If you try to use a class member as a callback, the compiler will give you an error, saying that the member prototype does not match the required typedef.
To get around this compiler error, we need to make the window procedure static. From this static method we then call another method of the class to actually handle the messages.
|
Да, здесь есть часть ответа, но в конечном счете, компилятор можно всегда обмануть и указать любую другую функцию в качестве процедуры окна.
Главная же причина в том, что очень умные люди просто придумали некий стандарт, который позволяет нам встраивать в Win32 свои оконные классы и, соответственно, окна. Стандарт этот говорит нам о том, что процедура окна имеет 16 байт параметров, которые опускаются в стек, а возвращает 4-х байтовый результат, с поднятием стека на те же 16 байт. Есть несколько стандартов вызова процедур и функций: fastcall, cdecl, stdcall, thiscall, pascal(Borland придумал) и т.д. Win32 использует stdcall, поэтому мы все тоже его используем. Напишет Microsoft винду с другим интерфейсом - и нам всем придется использовать именно его. thiscall весьма похож на cdecl, но не на stdcall, поэтому нужно использовать то, что нам диктует Microsoft. |