![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Vizator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.9.2007 Репутация: нет Всего: нет |
В структуре WNDCLASS есть параметр lpfnWndProc.
У меня есть класс, который будет рулить всеми действимя с окном, хотлеосьбы чтобы и калл бэк функция была внутри класса, возможно ли это и как это сделать ? |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
Можно, но только если она статическая.
|
|||
|
||||
Vizator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.9.2007 Репутация: нет Всего: нет |
||||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
Вот так
Если метод не будет статическим, его нельзя будет передать в качестве ф-ии обратного вызова, так как там неявно передается указатель на this |
|||
|
||||
Vizator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.9.2007 Репутация: нет Всего: нет |
Спасибо, разобрался
Добавлено через 14 минут А не статический вариант невозможен ? |
|||
|
||||
SABROG |
|
||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Сначала как-то так
а потом как-то так
И там уже присваиваешь переданную ссылку внутреннему указателю-члену класса. Или попробывать объявить статический метод:
|
||||||
|
|||||||
Vizator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 19.9.2007 Репутация: нет Всего: нет |
Это немного не то, хотелось бы чтобы кал бэк функция лежала внутри класса и принадлежала ему. Т.е. что то типа
и чтобы в wnd.lpfnWndProc указывать именно ее , а не определенную в глобальном контексте, а статический метод накладывает ряд ограничений и неудобств |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: нет Всего: 91 |
Вот, почитай, может поможет http://www.gamedev.ru/faq/?id=34
|
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Это сообщение отредактировал(а) 586 - 11.12.2007, 16:46 |
|||
|
||||
Cycle |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 1.12.2007 Репутация: нет Всего: 3 |
586, Правильно пишет. Добавлю только маленькое замечание. Для использования SetWindowLong необходимо установить значение атрибута cbWndExtra равным sizeof(LONG) при регистрации класса окна.
Это сообщение отредактировал(а) Cycle - 11.12.2007, 13:30 |
|||
|
||||
Simargl |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 12.12.2007 Репутация: нет Всего: нет |
там ещё с помощью "асма" можно сделать.
|
|||
|
||||
EnergoHokum |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: 3 Всего: 6 |
А там, где
Не должно-ли быть
Хотя нет, что-то у меня не так. Что именно -- не пойму пока. Это сообщение отредактировал(а) EnergoHokum - 14.12.2007, 11:22 |
||||
|
|||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
EnergoHokum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: 3 Всего: 6 |
Использую MinGW и GCC, не получилось внутрь класса вкрячить перенастройку на собственную нестатическую функцию (тоже внутри класса) обработки сообщений. Тут ведь что получается (в моём понимании):
1. Создаём замещающую функцию-обработчик сообщений 2. Получаем указатель на стандартную функцию-обработчик сообщений графпримитива, который тоже в классе создаётся (GetWindowLong) 3. Перенастраиваем (SetWindowLong) графпримитив на новую функцию-обработчик Так вот, уже при получении указателя на стандартный обработчик начиналась ругань. Сейчас наворотил костылей, вынес и создание графпримитивов, и новые обработчики, и перенастройку за пределы класса. Но это костыли, а как нормально сделать -- пока не знаю. |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |