WNDPROC
- это имя typedef
. Я признаю, что зная, что это немного искусства. Правило в основном состоит в том, что имя переменной typedef
/ на самом деле является самой внутренней вещью в объявлении. Начиная с имени, двигайтесь вправо, когда можете, и влево, когда необходимо, соблюдая скобки (правило спирали). Объявление фактически гласит:
Объявить псевдоним типа WNDPROC
как указатель на CALLBACK
функцию, принимающую аргументы HWND
, UINT
, WPARAM
и LPARAM
, возвращающую LRESULT
.
Спиральное правило в основном происходит от вложенности. Начиная с простейшей возможной определения типа и неоднократно заменяя место, где идет фактическое имя определения типа, на «пропущенный» бит дерева:
typedef LRESULT WNDPROC; // WNDPROC = LRESULT
typedef LRESULT WNDPROC(...); // WNDPROC = function taking (...) returning LRESULT
typedef LRESULT (CALLBACK WNDPROC)(...); // WNDPROC = CALLBACK function taking (...) returning LRESULT
typedef LRESULT (CALLBACK *WNDPROC)(...); // WNDPROC = pointer to CALLBACK function taking (...) returning LRESULT