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

标签 c++ winapi listview

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

但是没有用,我做错了什么?

最佳答案

你必须初始化 HDITEM调用 Header_GetItem 之前的参数。您必须在 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
}

关于c++ winapi,获取 ListView 标题文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722941/

相关文章:

c++ - sql 选择顺序的强制转换规范的字符值无效

c++ - C++调用抽象基类的构造函数

android - DialogFragment 中带有 LinearLayouts 的 ListView 不包装内容

Java动态添加项目到 ListView

android - 使用 URI 从 SD 卡获取缩略图

c++ - C级警告

c++ - PS3 的 Cell 架构是学习游戏编程的错误平台吗?

C++ WinApi Fillrect() 崩溃(多个矩形)

c++ - RST 数据包是否会被发送到应用程序而不考虑其序列号?

c - 如何从带有通配符的字符串中获取Appx全名?