c++ - Winapi ListView_GetItemText 错误的输出格式

标签 c++ listview winapi char items

我以这种方式使用 ListView_GetItemText:

int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048]; //Init buffer
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function
LPWSTR itemtxt = buffer; //Create LPWSTR var

stringstream s;
s << itemtxt;
MessageBoxA(NULL, s.str().c_str(), NULL, NULL);

Sleep(7000); //Sleep because this piece of code is inside a While loop

MessageBox 函数显示如下:

enter image description here

我需要的是获取该行的整个文本,但似乎我得到的是一个十六进制字符串...

最佳答案

std::stringstreamwchar_t* 指针视为通用指针,因此存储指针的值,而不是它指向的字符。

如果要使用MessageBoxA,需要将wchar_t数据转换为ANSI。

int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048] = {0}; //Init buffer
char buffer_ansi[2048 * 2] = {0};
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function
WideCharToMultiByte(CP_ACP, 0, buffer, -1, buffer_ansi, sizeof(buffer_ansi), NULL, NULL);

stringstream s;
s << buffer_ansi;
MessageBoxA(NULL, s.str().c_str(), NULL, 0);

更新:您不应该为 MessageBoxA 的第四个参数使用 NULL,它不是指针。


更新 2:不是将字符串转换为 ANSI,而是使用 std::wstringstream 而不是 std::stringstream,并调用 MessageBoxW() 而不是 MessageBoxA()

int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048] = {0}; //Init buffer
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function

std::wstringstream s;
s << buffer;
MessageBoxW(NULL, s.str().c_str(), NULL, 0);

注意:您有注释“Init buffer”,所以初始化缓冲区


更新 3:或者,根本不使用 std::wstringstream

int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048] = {0}; //Init buffer
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function

MessageBoxW(NULL, buffer, NULL, 0);

关于c++ - Winapi ListView_GetItemText 错误的输出格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33610997/

相关文章:

android: ListView 中的动态复选框

c++ - 使用用户密码加密

java - 审查将带有 Lambda 的 C++ for_each 移植到 Java

c++ - 简单的 C++ 循环前缀后缀运算符

android - 如何改变ListView的外观?

c++ - 如何设置蓝色边框来编辑控件?

winapi - HBITMAP 到 BITMAP 的转换

c++ - MFC 中是否有一个标准的目录浏览器对话框,不涉及用户创建目录以指定尚不存在的目录?

c++ - 使用 SDL 库时出现链接器错误 : _main already defined in main. obj

excel - Excel-2016 下未安装 ListView 控件