Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » вопрос по WNDPROC

Ответить
Настройки темы
вопрос по WNDPROC

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вопрос в следующем:
можно ли указать функцию сишного класса, в качестве функции обработки сообщений виндового класса(WNDCLASSEX) ??

Отправлено: 23:33, 29-01-2005

 

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Формат "функции обработки сообщений" жестко задан:

для обычных окон (windows):
Код: Выделить весь код
LRESULT CALLBACK WindowProc(
    HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
);
для диалогов (dialogs):
Код: Выделить весь код
INT_PTR CALLBACK DialogProc(
    HWND hwndDlg,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
);
Или я Вас неправильно понимаю?

Отправлено: 23:41, 31-01-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Netscaper

Пользователь


Сообщения: 84
Благодарности: 0

Профиль | Отправить PM | Цитировать


В классах бывают методы...

Отправлено: 16:38, 01-02-2005 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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);
}
Метод, определённый как static, отличается от остальных тем, что является обычной функцией с большими правами доступа, но в отличие от friend, находится в пространстве имён класса.

Отправлено: 13:18, 08-02-2005 | #4


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Проблемма была решена немного другим образом так как статические функции в данном случае не совсем то, что хотелось бы. Создавался дополнительный класс с данными и функциями которые мы планируем использовать в WNDPROC и после создания окна прицепляем указатель на объект дополнительного класса с помощью функции SetWindowLongPtr. Теперь дополнительные данные доступны в WNDPROC

Отправлено: 16:53, 08-02-2005 | #5

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » вопрос по WNDPROC

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Вопрос по 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




 
Переход