2013-11-27 7 views
0

리스트 뷰에 내 구조체를 추가하려고합니다. TCHAR 필드는 정상적으로 표시되지만 숫자의 경우 빈 사각형 또는 중국어 기호가 잘못 표시됩니다. 디버거는 변환 후 올바른 문자열을 표시합니다. 내가 LVN_GETDISPINFO 콜백 항목과 하위 항목의 값을 초기화하고있어리스트 뷰에 숫자 추가하기

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

: 여기 내 구조입니다.

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

TCHAR wStr[16];이 함수 처리 내에서 정의 된 경우 WM_NOTIFY이면 함수가 반환 될 때 유효하지 않습니다. 이를 전역 변수로 변경하거나 static으로 변경하면 문제가 해결됩니다.

참고하면 컨트롤이 당신에게 당신이 사용할 수있는 버퍼를 제공 LVN_GETDISPINFO 알림을, 그래서 때이 작업을 수행하는 코드를 변경할 수 :

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