Скины через subclassing
От: NaZGuL_ITV  
Дата: 05.09.06 05:18
Оценка:
Кто-нибудь может помочь по этому вопросу!?
Задумка такая:
— установить хук на создание дочерних контролов;
— перехватить создание контрола и подменить отрисовку (только не пойму пока как именно! Есть сторонние компоненты типа: CExt..., нужно установить их перерисовку, вместо стандартной)
— при уничтожении контрола необходимо освободить память (если нужно)

Пробовал через стандартные SubclassWindow и UnsubclassWindow, но получается, что дальнейшая работа с контролами через переменные невозможна! Как я понял, при UnsubclassWindow приосходит Detach, который все портит! Были задумки подменить WindowProc через SetWindowLong, но как конкретно реализовать дальнейшую подмену обработчиков???
Гуру помогите!!!
Re: Скины через subclassing
От: Уважаемый товарищ Аноним  
Дата: 11.09.06 09:38
Оценка:
Здравствуйте, NaZGuL_ITV, Вы писали:

NZG>- установить хук на создание дочерних контролов;

NZG>- перехватить создание контрола и подменить отрисовку (только не пойму пока как именно!
Были задумки подменить WindowProc через SetWindowLong, но как конкретно реализовать дальнейшую подмену обработчиков???

Как сабклассить окна через SetWindowLongPtr есть в MSDN. Дальше нужно будет переписывать обработку сообщения WM_PAINT, и, возможно прочее, типа WM_ERASEBKGND, WM_NCPAINT, и пр. В MSDN это тоже есть, в описании сообшения WM_PAINT.
Re[2]: Скины через subclassing
От: NaZGuL_ITV  
Дата: 11.10.06 09:53
Оценка:
Здравствуйте, Уважаемый товарищ Аноним.

Все понятно, что нужно подменить OnPaint OnEraseBgr и др. функции.
Дело в том, что необходимо оставить все методы и свойства базового класса. Т.е. например, есть класс CMyButton мы его сабклассим как CExtButton, но работать с экземпляром класса CButton мы уже не можем и его обработчики не вызываются, а они нужны. Как я понимаю нужно сделать класс, который будет порожден от CExtButton и все сообщения, будет пересылать в класс CButton (или все-таки в экземпляр?). Только я сомневаюсь, что это будет работать...
Re[3]: Скины через subclassing
От: Аноним  
Дата: 12.10.06 08:45
Оценка:
Здравствуйте, NaZGuL_ITV, Вы писали:

NZG>Здравствуйте, Уважаемый товарищ Аноним.


NZG>Все понятно, что нужно подменить OnPaint OnEraseBgr и др. функции.

NZG> Дело в том, что необходимо оставить все методы и свойства базового класса. Т.е. например, есть класс CMyButton мы его сабклассим как CExtButton, но работать с экземпляром класса CButton мы уже не можем и его обработчики не вызываются, а они нужны. Как я понимаю нужно сделать класс, который будет порожден от CExtButton и все сообщения, будет пересылать в класс CButton (или все-таки в экземпляр?). Только я сомневаюсь, что это будет работать...

В CExtButton с помощюью CallWindowProc пересылай все что тебе нужно в CMyButton
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.