Добавление чисел в просмотр списка

0

Я пытаюсь добавить отображение моей структуры в listview. Поля TCHAR отображаются нормально, но для номеров отображаются неправильные пустые прямоугольники или китайские символы. Отладчик показывает правильную строку после преобразования. Вот моя структура:

typedef struct {
    unsigned phone_number, house, appartment;
    TCHAR Name[30], Street[15], date[11];
} PHONE_DATA;

Я инициализирую значения элементов и LVN_GETDISPINFO с LVN_GETDISPINFO обратного вызова LVN_GETDISPINFO.

TCHAR wStr[16];
//other code

switch (((LPNMHDR) lParam)->code)
{
case LVN_GETDISPINFO:

    plvdi = (NMLVDISPINFO*)lParam;
    entry = Get(&list, plvdi->item.iItem);

    switch (plvdi->item.iSubItem)
    {
    case 0:
        plvdi->item.pszText = entry->data.Name;
        break;
    case 1:     
        _itow(entry->data.phone_number, wStr, 10);
        plvdi->item.pszText = wStr;
        break;
    case 2:
        plvdi->item.pszText = entry->data.Street;
        break;
    case 3:
        _itow(entry->data.house, wStr, 10);
        plvdi->item.pszText = wStr;
        break;
    case 4:
        _itow(entry->data.appartment, wStr, 10);
        plvdi->item.pszText = wStr;
        break;
    case 5:
        plvdi->item.pszText = entry->data.date;
        break;
    default:
        break;
    }

    break;
}

И как это выглядит в моем списке: Изображение 174551

То же преобразование, которое я использую для моей формы редактирования, в текстовых окнах отображается правильно.

  • 0
    Каждый раз, когда вы вызываете _itow, вы используете один и тот же буфер - wStr. Так что это перезаписывается. Возможно, вы даже переписываете это в другом месте.
  • 0
    но отладчик отображает правильную строку. Я пытался очистить буфер перед использованием, ничего не изменилось.
Показать ещё 3 комментария
Теги:
winapi
listview

1 ответ

1
Лучший ответ

Если TCHAR wStr[16]; определяется в функции обработки WM_NOTIFY тогда она не будет действительна, когда функция вернется. Измените это на глобальную переменную или сделайте ее static и она устранит проблему.

Обратите внимание, что когда вы получаете уведомление LVN_GETDISPINFO управления предоставляет вам буфер, который вы можете использовать, поэтому вы можете изменить свой код, чтобы сделать это:

case 4:
    _itow_s(entry->data.appartment, plvdi->item.pszText, plvdi->item.cchTextMax, 10);
    break;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню