【发布时间】:2013-11-27 18:16:48
【问题描述】:
我正在尝试在列表视图中添加显示我的结构。 TCHAR 字段显示正常,但对于数字,它显示错误的空矩形或中文符号。调试器在转换后显示正确的字符串。
这是我的结构:
typedef struct {
unsigned phone_number, house, appartment;
TCHAR Name[30], Street[15], date[11];
} PHONE_DATA;
我正在使用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;
}
以及它在我的列表视图中的外观:
我用于编辑表单的相同转换,在文本框中正确显示。
【问题讨论】:
-
每次调用 _itow 时都在使用相同的缓冲区 - wStr。所以它被覆盖了。您甚至可能在其他地方也重写了它。
-
但调试器显示正确的字符串。我尝试在使用之前刷新缓冲区,没有任何改变。
-
TCHAR wStr[16];是全局变量还是在处理WM_NOTIFY的函数中定义?如果是后者,则一旦该函数返回,它就无效。 -
@JonathanPotter 谢谢! wStr 变量是在 WM_NOTIFY 句柄中定义的,现在它可以正常工作了!请发布答案,以便我确认。
-
没问题,已经这样做了。