2013-11-27 71 views
0

我想添加顯示我的結構在ListView。 TCHAR字段通常顯示,但是對於數字它顯示錯誤的空矩形或中國符號。調試器在轉換後顯示正確的字符串。 這裏是我的結構:添加數字到ListView

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; 
} 

而且它的外觀在我的列表視圖: Listview

相同的轉換我用我的編輯形式,在文本框中正確顯示的。

+0

每次打電話_itow您使用的是相同的緩衝 - WSTR。所以它被覆蓋。你甚至有可能在其他地方覆蓋它。 – Trenin

+0

但調試器顯示正確的字符串。我試圖在使用前沖洗緩衝區,沒有任何改變。 – hmnzr

+1

是'TCHAR WSTR [16];'一個全局變量,或者它的功能處理'WM_NOTIFY'內限定?如果是後者,則該函數返回後無效。 –

回答

1

如果在處理函數WM_NOTIFY中定義了TCHAR wStr[16];,那麼當函數返回時它不會有效。更改到全局變量或使其static,它會解決這個問題。

注意,當你得到LVN_GETDISPINFO通知控制提供了你,你可以使用一個緩衝區,所以你可以改變你的代碼來做到這一點:

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