首先,您应该检查 API 调用是否有错误。您需要检查对 API 函数的所有调用的返回值。
也就是说,鉴于问题中的代码,
SendMessage(GetDlgItem(hWnd,IDC_LISTBOX),LB_ADDSTRING,0,(LPARAM)data);
如果这导致一个项目被添加到列表框中,那么这意味着它GetDlgItem
确实返回了一个有效的窗口句柄,并且data
确实指向了有效的内存。在这种情况下,您报告的唯一解释是编码的文本不匹配。
因此,我们可以假设SendMessage
宏的计算结果为SendMessageW
。而且由于您传递的是 ANSI 编码的文本,因此这种不匹配说明了症状。该函数将文本视为 UTF-16 编码。
一种明显的解决方案是SendMessageA
改用。但是,在我看来,更好的解决方案是传递 UTF-16 编码的数据。
wchar_t data[] = L"abcd";
....
void addToList(HWND hWnd, const wchar_t *data)
{
SendMessage(GetDlgItem(hWnd,IDC_LISTBOX), LB_ADDSTRING, 0, (LPARAM)data);
}
显然,您的代码会添加我在开始时提到的错误检查。