Я пытаюсь добавить отображение моей структуры в 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;
}
И как это выглядит в моем списке:
То же преобразование, которое я использую для моей формы редактирования, в текстовых окнах отображается правильно.
Если TCHAR wStr[16];
определяется в функции обработки WM_NOTIFY
тогда она не будет действительна, когда функция вернется. Измените это на глобальную переменную или сделайте ее static
и она устранит проблему.
Обратите внимание, что когда вы получаете уведомление LVN_GETDISPINFO
управления предоставляет вам буфер, который вы можете использовать, поэтому вы можете изменить свой код, чтобы сделать это:
case 4:
_itow_s(entry->data.appartment, plvdi->item.pszText, plvdi->item.cchTextMax, 10);
break;