Winapi ListView_GetItemText输出格式错误

时间:2015-11-09 14:10:24

标签: 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

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

1 个答案:

答案 0 :(得分:1)

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);

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

更新2:而不是使用std::wstringstream而不是std::stringstream将字符串转换为ANSI,而是调用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);