Форум: "WinAPI";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизОконная процедура и класс Найти похожие ветки
← →
RagE © (2004-08-20 09:27) [0]Добрый день всем. Я вот вчера пробовал написать класс который будет на WinAPI окошко создавать и обрабатывать сообщения. Так вот столькнулся со следующей проблемой. Помещаю функцию WndProc внутрь класса, при заполнении структуры WNDCLASS компилятор кричит что ему нужна переменная. Кто нибудь сталкивался с таким? И вообще возможно ли это реализовать. Пробовал искать в исходниках делфийских форм но нифига не понял. Вернее не нашел где есть подобный момент.
← →
Digitman © (2004-08-20 09:33) [1]
> Помещаю функцию WndProc внутрь класса
это как ? поясни кодом ...
> при заполнении структуры WNDCLASS компилятор кричит что
> ему нужна переменная
если кричит, дай ему переменную)... все равно не отстанет
а еще лучше приведи сюда свой проблемный код ..
← →
KSergey © (2004-08-20 09:40) [2]Да, для запихавния в класс оконной процедуры надо попотеть. Штука в том, что при вызове любого метода из любого класса ему неявно передается указатель на экземпляр объекта. Понятно, что ни о каких экземплярах никаких объектов никакая виндовс не знает.
Насколько я понимаю, фактически всегда получается, что делается некая универсальная единая процедура (все класса), которая собственно и привязывается всем окнам. Связь окон и экземпляров объектов обеспечивается либо внешними структурами, либо через приписывание доп. параметров виндовому окну при создании экземпляра. А уже из этой общей процедуры вызывается метод соотв. экземпляра объекта, связанного с данным окном.
← →
jack128 © (2004-08-20 09:44) [3]
> Помещаю функцию WndProc внутрь класса
>
>
> это как ? поясни кодом ...
ИМХО, имелось ввиду, что WinProc - метод..
> при заполнении структуры WNDCLASS компилятор кричит что
>
> > ему нужна переменная
Там суть в том, что у тя WinProc - метод, то есть процедура, в которую первым неявным параметром передается Self. У тя список параметров в WinProc будт отличаться от необходимого.. Если WinProc обязательно должна быть методом, то см в сторону MakeObjectInstance.. И вообще в сторону TWinControl/TCustomForm , там все это уже делалось..
← →
Digitman © (2004-08-20 09:51) [4]
> jack128 © (20.08.04 09:44) [3]
> имелось ввиду, что WinProc - метод
из авторского описания это вовсе не очевидно
но, думаю, автор действительно не видит и/или не понимает разницы между просто функцией и функциональным методом класса
← →
RagE © (2004-08-20 10:59) [5]KSergey © (20.08.04 09:40) [2]
По такому пути и пришлось идти
jack128 © (20.08.04 09:44) [3]
в исходники смотрел но так нифига и не понял, не нашел я там места где это реализовано, может конечно плохо искал.
Digitman © (20.08.04 09:51) [4]
в том то и дело что до конца не понимаю.
← →
KSergey © (2004-08-20 11:13) [6]> [4] Digitman © (20.08.04 09:51)
> > имелось ввиду, что WinProc - метод
> из авторского описания это вовсе не очевидно
Разве???
> RagE © (20.08.04 09:27)
> Помещаю функцию
> WndProc внутрь класса
← →
Digitman © (2004-08-20 11:29) [7]
> KSergey © (20.08.04 11:13) [6]
> Разве???
а мне вот не очевидно, под этой фразой можно понимать все что угодно, к тому же в эту кашу попадает упоминание WNDCLASS и посему непонятно, о каком классе идет речь - то ли о классе окна то ли о собственном создаваемом классе
> RagE © (20.08.04 10:59) [5]
ты бы посмотрел для начала внимательно, как это реализовано в ф-ции AllocateHWND() у самого Борланда и сделал бы собственную реализацию по образу и подобию, почерпнув из борландовской реализации только самые необходимые ключевые моменты во всей этой петрушке
← →
RagE © (2004-08-20 12:53) [8]Digitman © (20.08.04 11:29) [7]
Cпасибо за наводку. Буду смотреть
← →
Darthman © (2004-08-20 15:47) [9]Прочитал ветку, но проблему так и не понял.
← →
RagE © (2004-08-20 16:03) [10]Darthman © (20.08.04 15:47) [9]
Все проблемы больше нет. помог makeobjectinstance. Хотя он же породил проблему увеличения бинарника.
← →
Darthman © (2004-08-20 16:09) [11]Так а в чем была проблема, может быть я без мейкобджектинстансе помочь смогу?
← →
Digitman © (2004-08-20 16:15) [12]
> RagE © (20.08.04 16:03) [10]
ну если ты его "один в один" содрал, со всеми зависимостями, то - конечно)
тады и вся затея твоя выеденного яйца не стоит, если тянешь за собой те же самые стандартные модули
← →
jack128 © (2004-08-20 17:40) [13]на вскидку такая идея:
Для каждого виндового оконного класса можно аллокировать дополнительную память (при регистрации класса - WNDCLASS.cbClsExtra) - запиши в эту память адрес твоего метода. А для каждого окна можно создать атом и записать в него твой объект, ассоциированный с этим окном (как в VCL ControlAtom). Соответственно в оконной процедуре ты видираешь адрес метода и объект и вызываешь этот метод..
← →
RagE © (2004-08-20 18:53) [14]jack128 © (20.08.04 17:40) [13]
Да вобщем такая затея наверное никчему. Обойдусь расположением WinProc как обычной функции вне класса.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.03 c