Цитата(TNT86 @ 30.11.2006, 11:36 ) | | Однако из WndProc хотелось бы вызывать другие нестатически функции класса - для это нужно передать ссылку на конкретный объект этого класса, но тогда опять возникают проблемы с регистрацией! |
никто передавать ссылку на объект в WndProc не будет, потому что вызывает её Windows, а она/оно/он про какие-то дополнительные объекты ничего не знает так что нужно каким-либо образом внутри WndProc узнать адрес объекта один раз туда можно передать свои данные - при создании окна (последний аргумент CreateWindow)
один из вариантов - в CreateWindow передавать адрес "управляющего" объекта, а в обработке WM_CREATE сопоставлять окну этот адрес с помощью (к примеру) SetProp, а потом при последующих вызовах WndProc брать этот адрес и вызывать уже методы соответствующего объекта
правда, в таком подходе есть проблема: сообщение WM_CREATE - не первое сообщение, которое приходит при создании окна (точно не помню, но там их около 3-х)
Добавлено @ 13:02 кстати, когда-то рылся в исходниках VCL там увидел другое решение этой задачи (надеюсь, я его правильно понял) при каждом создании формы они вызывают MakeObjectInstance для метода функция интересная: она выделяет кусок памяти и пишет туда вызов метода для того объекта, для которого она создаётся (т.е. внутри функции адрес объекта - простая константа) этакая лямбда-функция  |