c++ winapi,获取listview标题文本

c++ winapi, get listview header text

本文关键字:标题 文本 listview 获取 winapi c++      更新时间:2023-10-16

我创建了一个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);

但它没有工作,我做错了什么?

您必须在调用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
}