Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 17.01.2010
Сообщений: 18

WinAPI и обработчик события своего HWND

19.04.2010, 13:01. Показов 4089. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Утро доброе. Необходимо перехватывать сообщения Windows, имея хендл окна. Рылся в инете и МСДНе - нашел, но там окно создается, и при создании ссылаются на WndProc, где уже и обрабатываются соообщения. В моем случае я имею хендл уже созданного окна. Т.е. я даже не перехватываю сообщения - я просто хочу назначить обработку сообщения (WM_PAINT, например) окна, имея его описатель.
Подкиньте наводки

Есть некий метод, новая оконная процедура:
C++
1
LRESULT CALLBACK DrawMe(HWND, UINT, WPARAM, LPARAM);
Пытаюсь ввести ее -
C++
1
SetWindowLong(hWnd,  GWL_WNDPROC,   (LONG) DrawMe);
возникает ошибка еще на этапе компиляции:
error C2440: 'type cast' : cannot convert from 'LRESULT (__stdcall MyWnd::* )(HWND,UINT,WPARAM,LPARAM)' to 'LONG'
Хотя у Петцольда описано все точно так же:
C++
1
2
3
4
LRESULT CALLBACK ScrollProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
//...
fnOldScr[i] =(WNDPROC) SetWindowLong(hwndScrol[i], GWL_WNDPROC,(LONG) ScrollProc);
//...
Почему у меня компилятор пытается приводить типы? Может, надо указать что-то в опциях проекта?

Добавлено через 1 час 11 минут
Не заметил тему "Win API"...
Модераторам - перенесите по возможности
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2010, 13:01
Ответы с готовыми решениями:

Окно на WinAPI, параметр функции WndProc (HWND hWnd,.)
Пытаюсь понять какое значение хранит первый параметр HWND hWnd в функции WndProc. В Windows в качестве окна может быть не только главное...

Есть HWND окна. Нужно добавить на окно обработчик события KeyDown
Есть HWND окна. Нужно добавить на окно обработчик события KeyDown. Код в библиотеке загружаемой в приложение, можно получить HWND окна.

WinAPI RedrawWindow(HWND)
Вощм... изучаю потихоньку WinAPI и эксперементирую с исходниками, приложенными к книжке... есть участок кода одной проги //int...

2
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
19.04.2010, 13:54
Цитата Сообщение от yudjin Посмотреть сообщение
возникает ошибка еще на этапе компиляции:
error C2440: 'type cast' : cannot convert from 'LRESULT (__stdcall MyWnd::* )(HWND,UINT,WPARAM,LPARAM)' to 'LONG'
Хотя у Петцольда описано все точно так же:
C++
1
2
3
4
LRESULT CALLBACK ScrollProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
//...
fnOldScr[i] =(WNDPROC) SetWindowLong(hwndScrol[i], GWL_WNDPROC,(LONG) ScrollProc);
//...
Почему у меня компилятор пытается приводить типы? Может, надо указать что-то в опциях проекта?

Добавлено через 1 час 11 минут
Либо должена быть процедура (с __stdcall), либо метод должен быть статическим(тоже c __stdcall). Нельзя установить метод класа, как оконную процедуру, сигнатура не та. А наводка у тебя правильная.
1
1 / 1 / 0
Регистрация: 17.01.2010
Сообщений: 18
19.04.2010, 15:38  [ТС]
А разве макрос CALLBACK не содержит в себе __stdcall?

Добавлено через 9 минут
Спасибо, все понял - убрал из методов класса - дело пошло.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.04.2010, 15:38
Помогаю со студенческими работами здесь

Как вызвать один обработчик события в другом обработчике события?
Здравствуйте. Подскажите пожалуйста, каким образом можно вызвать информацию из одного обработчика события в другой обработчик события? ...

Как в одном обработчике события запустить другой обработчик события
Есть список listView1, который заполняется из массива PeopleListprivate void listView1_RetrieveVirtualItem(object sender,...

Почему когда я вешаю обработчик события на ячейку и этот обработчик срабатывает, то оказывается, он сработал совершенно для ДРУГОЙ ячейки?
Да, почему? Скропаем DataGridView; кинем на форму listBox2 и listBox1 и напишем такой обработчик для события EditingControlShowing...

Существует ли аналог WinAPI для работы с HWND?
существует ли аналог winapi для работы с HWND ? #if defined (__WIN32__) #include <windows.h> HWND hWnd =...

Почему окна WinAPI-приложения имеют одинаковые идентификаторы (hWnd), разве они не должны быть уникальными?
Здравствуйте. У каждого окна должен быть только уникальный идентификатор, чтобы система могла отличить одно окно от другого. Почему тогда в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru