|
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 9
|
|||||||||||||||||||||||||||||||
WindowProcedure в собственном классе29.01.2017, 16:16. Показов 1375. Ответов 8
Метки нет (Все метки)
Прошу прощения за долгое вступление, но по другому никак:
У меня возникла необходимость написать свой класс элемента управления, чтобы в программе можно было свободно создавать экземпляры этого класса и использовать их как угодно. Например надо две кнопки, по нажатию каждой родительскому окну приходить сообщение VM_COMMAND с разным значением. Для этого значение передается сразу при создании контрола. Реализовал так: есть класс, внутри него описана функция создания класса окна, и оконная процедура, а так же некоторые вспомогательные функции. Ниже сама оконная процедура, так как если она вынесена в класс, то вы обязаны использовать Static то из функции нет доступа к полям вашего класса и приходится это обходить передавая во время создания окна указатель на свой класс функцией SetWindowLong.
Так же для удобства дальнейшего использования я прописал функцию-оболочку создания контрола, здесь видно, что я сразу передаю номер команды в глобальную переменную:
а родительское окно в своей процедуре проверяет
вместо this->hMenu число 100, то все работает. Но мне то надо, чтобы каждый контрол отправлял свое собственное сообщение, которое я назначаю ему при создании. А когда я произвожу дебаг, то в this->hMenu лежит мусор
Это как то связано с тем, что в оконной процедуре контрола в первый раз происходит обнуление всех полей класса. То есть все работает и контрол рисуется, нажимается , но внутренние его переменные проходят обнуление. Кто может ,помогите пожалуйста!
0
|
|||||||||||||||||||||||||||||||
| 29.01.2017, 16:16 | |
|
Ответы с готовыми решениями:
8
Обработка ON_WM_PAINT в собственном классе Vector собственных классов в собственном классе
|
|
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 9
|
|
| 29.01.2017, 16:29 [ТС] | |
|
0
|
|
|
Ушел с форума
|
||
| 29.01.2017, 18:43 | ||
|
0 - это DWLP_MSGRESULT, а тебе нужна другая константа - GWLP_USERDATA.
0
|
||
|
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 9
|
||||||||||||||||
| 29.01.2017, 19:17 [ТС] | ||||||||||||||||
|
Конечно работает! Иначе бы картинку с кнопочкой не получилось бы.
По сути информация об окне содержится в виде некоторого стека переменных. И с помощью функции SetWindowLong можно перезаписать информацию в этом стеке, а идентификаторами типа GWL_EXSTYLE или GWLP_WNDPROC ты задаешь смещение от начала этого стека, таким путем перезаписывая определенную строго определенную информацию. Так вот весь этот стек можно сместить на определенное число байт при регистрации класса окна, таким образом можно зарегистрировать под свои нужды эту область данных:
теперь можно брать его по дескриптору окна, так же с нулевым смещением:
http://www.catch22.net/tuts/custom-controls
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 9
|
||||||
| 29.01.2017, 20:27 [ТС] | ||||||
|
В этом, пожалуй, прав ты! Однако в данной ситуации меня беспокоит другое.
Как мне таки вытащить данные из своего класса?
0
|
||||||
|
31 / 31 / 15
Регистрация: 02.02.2015
Сообщений: 152
|
||||||||||||||||
| 29.01.2017, 20:59 | ||||||||||||||||
Сообщение было отмечено Orangutang как решение
Решение
Orangutang, друг, вот так сделай и всё будет у тебя работать.
Регистрируешь класс окна (своего элемента), в методе Create():
Обрати внимание, что в функции CreateWindow() сразу указывается указатель на объект this.
1
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 9
|
|
| 29.01.2017, 21:10 [ТС] | |
|
Спасибо!
Как ни странно, я делал нечто подобное для создания самого окна. Оно у меня тоже определено внешним собственным классом. А при создании контрола, решил пробовать другой метод! В общем попробую переписать, как ты написал. Позже отпишусь если заработает!
0
|
|
|
31 / 31 / 15
Регистрация: 02.02.2015
Сообщений: 152
|
|
| 29.01.2017, 21:15 | |
|
Orangutang, будет работать!)
Здесь же нет ни какой магии.)
0
|
|
|
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 9
|
|
| 31.01.2017, 19:03 [ТС] | |
|
Все заработало! Спасибо!
0
|
|
| 31.01.2017, 19:03 | |
|
Помогаю со студенческими работами здесь
9
Прокрутка в собственном компоненте Макрос в собственном блоке Поиск в собственном массиве Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
|
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит значение перечислений.
/ / Событие "НачалоВыбора" реквизита на форме. . .
|