|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.03.2011, 10:32 | #1 |
Регистрация: 12.03.2011
Сообщений: 8
|
Как привязать данные к HWND ?
Код:
У всех экземпляров этого класс будет один и тотже обработчик сообщений окна (WndProc). Кагда Windows посылает сообщение моему окну, обработчику сообщения известен только хэндл окна (HWND), код сообщения и данные (WPARAM, LPARAM). Этот обработчик (WndProc) ничего не знает о переменной Data. В результате: WndProc не знает какую MyControl::Data использовать. Как мне привязать данные к HWND, чтобы WndProc использовал Data именно того экземпляра класса с которым связан HWND. Также необходимо чтобы пользователи этой dll не смогли палучить доступ к этим данным. Последний раз редактировалось Stilet; 12.03.2011 в 11:33. |
12.03.2011, 10:37 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
используйте список/массив/ассоциативный массив(точнее реализации)
состоящий из двух элементов(в случае ассоц массива первое ключ, второе значение): HWND hwnd - хендл. MyControl* ctr - объект контрола. и далее просто проводите поиск в нем. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
12.03.2011, 10:41 | #3 |
Регистрация: 12.03.2011
Сообщений: 8
|
Этот вариант не подходит, также как и вариант с SetWindowLong.
|
12.03.2011, 10:43 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
почему не подходит?
именно этот вариант полностью удовлетворяет вашим условиям. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
12.03.2011, 10:44 | #5 |
Регистрация: 12.03.2011
Сообщений: 8
|
Как Microsoft реализовала подобное для своих контролов (ComboBox, ListView, и т.д.) ?
я уже рассмотрел вариант с поиском, он работает, но мне нужна альтернатива Последний раз редактировалось Stilet; 12.03.2011 в 11:33. |
12.03.2011, 10:49 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
скорее всего SetWindowLong с использованием при регистрации класса поля cbWndExtra;
кстати этот вариант скорее быстрее. ЗЫ:оконный класс BUTTON не обязан являться классов ООП, там можно использовать процедурное программирование, а все данные контрола хранить в пространстве выделенном cbWndExtra; добавил: третьего варианта я не знаю, хотя и занимался глубоко в этой сфере. еще добавил: хотя есть третий, но совершенно не совместим с вашим кодом.(я его описал в ЗЫ, после запятой) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 12.03.2011 в 10:54. |
12.03.2011, 11:35 | #7 |
Регистрация: 12.03.2011
Сообщений: 8
|
Благодарю.
Если третьего варианта нет - буду использовать SetWindowLong. |
12.03.2011, 17:27 | #8 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
GWL_USERDATA?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как вывести hwnd? | GrindeX | C++ Builder | 2 | 25.11.2010 01:33 |
Как найти путь к документу зная hWnd | Maladoj | Общие вопросы .NET | 1 | 12.06.2009 20:26 |
как привязать время? | Alexi | Компоненты Delphi | 2 | 12.04.2009 22:32 |
Как привязать help файл к программе? | Волк | Общие вопросы Delphi | 1 | 13.02.2009 07:13 |
Как привязать рисунок к записи в БД? | DIBAZOL | БД в Delphi | 12 | 17.07.2008 10:29 |