2013-03-30 35 views
1

我創建了一個列表視圖之後,我想獲得的標題文字,像這樣: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

哦,謝謝你的工作,我明白我做錯了什麼。謝謝! –