![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| LabelZero |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.1.2004 Где: СПБ Репутация: нет Всего: нет |
У меня возник тупой вопрос при написании простейшего класса окна на VC: каким образом взять адрес метода, который будет оконной процедурой и запихать в структуру окна? Вот о чем я говорю:
WNDCLASSEX wc; wc.lpfnWndProc = (WNDPROC)WndProcedure; присваивается только ф-я(не член класса), и static. Если далаем static, получается бред... Простой ф-ей не удобно, хочу юзать ООП WndProcedure хотелось бы сделать членом класса... но увы. (кстати таже проблема и с CreateThread, LPTHREAD_START_ROUTINE) Подскажите, как этот идиотизм обходить Это сообщение отредактировал(а) LabelZero - 24.1.2004, 06:55 |
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Я на этот вопрос сотню раз отвечал. Эй, модераторы FAQ, добавть эту тему у себя.
http://forum.vingrad.ru/index.php?act=ST&f=1&t=12981 http://forum.vingrad.ru/index.php?act=ST&f=1&t=10320 |
|||
|
||||
| LabelZero |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.1.2004 Где: СПБ Репутация: нет Всего: нет |
ха-ха! все равно через }|{0ny!!! сорри, конечно, у меня подобные способы
хотя есть и более извращенные методы гыыыы |
|||
|
||||
| LabelZero |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.1.2004 Где: СПБ Репутация: нет Всего: нет |
в общем спасибо RAN
|
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
при чём тут жопа? Ты думаешь в MFC или ещё где это по другому?
Windows API в понятиях С++ не объектно-ориентирована. В нем есть задатки ООП. Поэтому только так. Тут ничего не придумаешь. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
LabelZero, можно взять адрес виртуального метода (здесь описано, как), но смысла в этом нет, т.к. WinAPI будет пытаться вызвать обычную callback-функцию, а для корректного вызова (даже виртуального) метода требуется указатель на объект, в котором метод находится (о чём WinAPI, конечно же, понятия не имеет, "видя" обычный указатель на функцию).
Здесь подойдёт вариант с глобальной функцией-заглушкой, которая будет брать из GetWindowLong указатель на объект нашего класса и вызывать виртуальный метод WndProc, который можно переопределить в производных классах (и который будет вызывать обработчики для каждого конкретного сообщения - OnMouseMove и т.п.). Таким же способом построена оконная часть библиотеки MFC. Вот пример, как всё это можно реализовать на чистом WinAPI:
to RAN, мне кажется, нужно набросать какой-то пример, который можно скомпилировать и использовать в проектах. Не добавлять же в FAQ тему типа "в CreateWindow и CreateThread нельзя передавать указатель на метод" и пару строк кода, объясняющих - почему... -------------------- ![]() |
|||
|
||||
| LabelZero |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.1.2004 Где: СПБ Репутация: нет Всего: нет |
RAN это и так понятно, Маздай он и есть Маздай, увы.
кстати, в VCL вроде еще страшнее реализовано(как мне показалось), посмотрел на пару таких вещей(VCL, MFC, ATL...) и решил поискать что-нть поинтереснее, попроще. в общем еще раз сенкс, народ. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |