![]() |
|
|
![]()
|
|
| AndreySol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Есть такой код
Как вместо _T("Это текст") воткнуть переменную типа CString ? Пробовал szString.GetBuffer(szString.GetLength()), получаются кракозяблики. Или может подскажите другой способ установить для LPARAM lParam итема текстовое значение из переменной типа CString ? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
CString теоретически воткнуть можно... т.к. размер ее 4 байта... но не стоит: нужно очень аккуратно работать с конструктором\деструктором, что не очень удобно, и вообще, извращение это... Выход в том, чтобы хранить в lParam указатель на строку, которой владеет кто-то еще. Например, есть у тебя в классе массив строк (CString m_str[N]), так вот не проблема поместить в lParam указатель на строковый буфер (а не на объект CString!):
Но! Это тоже не совсем безопасно: а если строки в массиве нужно изменять? Удалять\перемещать? И т.д. Гораздо проще хранить в классе тот же список строк (или структур посложнее) для каждого элемента, а в lParam записывать индекс в этом массиве. Тогда точно ничего никуда не денется. -------------------- ... |
|||
|
||||
| AndreySol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Так я для того и связался с SetItemData / GetItemData, чтобы избавиться от массива.
Хотя может это и не очень хорошая идея ? И как все-таки мона провернуть то что я хотел ? Это сообщение отредактировал(а) AndreySol - 10.11.2006, 01:53 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Идея не хорошая: таким образом ты отказываешься от поддержки компилятора по автоматическому разрушению объектов при выходе из области видимости.
Как сделать? Да просто создай динамический объект CString и сохрани указатель в lParam. Только вот при любых манипуляциях надо будет не забыть извлечь его и удалить строку, иначе получишь утечку. А отследить все - весьма проблематично. Поэтому лучше использовать внешние массивы. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |