Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2015, 22:09   #1
OktXIV
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 18
По умолчанию Данные в CommonControls

Как хранятся данные в CommonControls (например ListView или ListBox)?

При создании своих контролов, регистрирую класс окна с WND_CLASS::cbWndExtra = sizeof(MyData*). Потом всё по порядку: при создании окна SetWindowLongPtr(hWnd, 0, PtrToLong(new MyData), затем в процедуре окна MyData* ptr = GetWindowLongPtr(hWnd, 0). Таким образом для каждого окна своя MyData. Если я напишу SetWindowLongPtr(hWnd, 0, <что нибудь другое>) - окно потеряет связь с структурой MyData.

Я применял SetWindowLongPtr(hWnd, 0, 0) и SetWindowLongPtr(hWnd, GWL_USERDATA, 0) к ListBox, но данные окна не повредились.

Так вот, как такие данные хранятся в стандартных окнах?
OktXIV вне форума Ответить с цитированием
Старый 03.04.2015, 09:07   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

GWL_USERDATA к cbWndExtra отношения не имеет - это будет работать даже если cbWndExtra равно 0.
Доступ к памяти, выделенной через cbWndExtra осуществляется положительными индексами:
GetWindowLong(hWnd, 0);
GetWindowLong(hWnd, 4);
GetWindowLong(hWnd, XXX);
Естественно, не следует выходить за пределы выделенной памяти.

По сути, это не решает вашу проблему - кто угодно может записать туда любые данные. Более секретным будет например SetProp(). Ну, и в конце концов, никто не мешает воспользоваться например std::map<> или написать аналогичный механизм.

http://www.codeproject.com/Articles/...-with-a-Window

http://en.wikipedia.org/wiki/Associative_containers
waleri вне форума Ответить с цитированием
Старый 03.04.2015, 17:59   #3
OktXIV
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 18
По умолчанию

Благодарю за информацию, про SetProp() - не знал.

А что используют Common Controls (comctl32.dll) ?
OktXIV вне форума Ответить с цитированием
Старый 03.04.2015, 20:22   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Никто не знает

Еще есть например SetWindowSubclass()
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача: есть БД с 2 файлами в которые записываются данные о квартирах, выбрать нужные данные lexa_7up Помощь студентам 4 11.01.2014 19:37
Как упорядочить данные (перевести данные из стольбцов в строки)? opeck Microsoft Office Excel 3 21.11.2011 01:43
Данные по столбцам - упорядочить данные к друг другу PetroD Microsoft Office Excel 10 07.08.2010 12:30
Сверить Данные valerij Microsoft Office Excel 19 12.01.2010 18:43
данные бд elfers БД в Delphi 5 02.04.2009 12:38