2013-03-30 3 views
1

Я создал ListView и после того, что я хотел бы получить текст заголовка, что-то вроде этого:C++ WinAPI, получить заголовок ListView текст

HWND hwndHD = ListView_GetHeader(hListView); 
HDITEM hdi; 
Header_GetItem(hwndHD, 2, (LPHDITEMA) &hdi); 
unsigned char HDtext[lMAX]; 
hdi.pszText = (LPSTR)HDtext; 
SendMessage(hListView, HDM_GETITEM, (WPARAM) 0, (LPARAM) &hdi); 
std::string str(HDtext, HDtext + sizeof(HDtext)); 
MessageBox(hwnd, str.c_str() , "CreateFile", MB_OK); 

Но это не сработало, то, что я сделал не так?

+0

Гм, почему бы просто не спросить ListView напрямую? 'ListView_GetColumn'. Таким образом, вы можете получить текст, даже если заголовок будет подавлен. –

ответ

4

Перед вызовом Header_GetItem вам необходимо инициализировать параметр HDITEM. Вы должны указать в mask информацию, которую вы запрашиваете.

В вашем случае, если вы хотите сделать это следующим образом:

char HDtext[lMAX]; 
HWND hwndHD = ListView_GetHeader(hListView); 
HDITEM hdi = { 0 }; 
hdi.mask = HDI_TEXT; 
hdi.pszText = HDtext; 
hdi.cchTextMax = lMAX; 
Header_GetItem(hwndHD, 2, &hdi); 

Вы также полностью пренебрегли включить проверку ошибок в коде. Вы должны добавить его.

Необходимо проверить возвращаемое значение каждого вызова API. Обратитесь к документации по MSDN, чтобы узнать, как ее интерпретировать.

Используя код выше в качестве примера, можно было бы написать:

HWND hwndHD = ListView_GetHeader(hListView); 
if (hwndHD == NULL) { 
    // handle error 
} 
.... 
if (!Header_GetItem(hwndHD, 2, &hdi)) { 
    // handle error 
} 
+0

О, спасибо, что это работает, и я понимаю, что я сделал неправильно. Благодаря! –

Смежные вопросы