вопрос по WNDPROC
|
Новый участник Сообщения: 6 |
Профиль | Отправить PM | Цитировать Вопрос в следующем:
можно ли указать функцию сишного класса, в качестве функции обработки сообщений виндового класса(WNDCLASSEX) ?? |
|
Отправлено: 23:33, 29-01-2005 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать Формат "функции обработки сообщений" жестко задан:
для обычных окон (windows): для диалогов (dialogs): Или я Вас неправильно понимаю? |
Отправлено: 23:41, 31-01-2005 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 84
|
Профиль | Отправить PM | Цитировать В классах бывают методы...
|
Отправлено: 16:38, 01-02-2005 | #3 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать как я делаю (C++):
class QWindow { HWND fhandle; ... static long __stdcall WndProc(HWND, UINT, WPARAM, LPARAM); public: static void staticInit(); // register class static void staticUinit(); // unregister class } void QWindow::staticInit() { WNDCLASSEX wcla = {sizeof(WNDCLASSEX), WNDPROC(WndProc), ...}; RegisterClassEx(&wcla); } |
Отправлено: 13:18, 08-02-2005 | #4 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Проблемма была решена немного другим образом так как статические функции в данном случае не совсем то, что хотелось бы. Создавался дополнительный класс с данными и функциями которые мы планируем использовать в WNDPROC и после создания окна прицепляем указатель на объект дополнительного класса с помощью функции SetWindowLongPtr. Теперь дополнительные данные доступны в WNDPROC
|
|
Отправлено: 16:53, 08-02-2005 | #5 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Можно не создавать дополнительный класс. Можно сделать всё то же самое с использованием статического члена (всё-таки он правами обладает). В конструкторе собклассится какой-нибудь стандартный класс с DefWindowProc, а класс имеет следующую структуру:
class QWindow { long __stdcall WndProc(...); protected: virtual bool process(long&, unsigned, long, long) = 0; public: QWindow(...) { ... SetWindowLong(..., long(this)); SetWindowLong(..., GWL_USERDATA, long(WndProc)); } }; long __stdcall QWindow::WndProc(...) { QWindow* ptr = GetWindowLong(...); long result; if (!ptr->process(...)) result = DefWindowProc(...); return result; } |
Отправлено: 13:28, 14-02-2005 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Вопрос по AD | rattle | Microsoft Windows NT/2000/2003 | 5 | 08-08-2007 16:39 | |
Вопрос по Си | Grekalov | Программирование и базы данных | 3 | 22-12-2005 08:46 | |
Вопрос по VB | NLDSoft | Программирование и базы данных | 1 | 29-08-2003 09:51 | |
Вопрос по Си | Mihien | Программирование и базы данных | 4 | 05-02-2003 01:38 |
|