我已经创建了一个使用WIN32将字符串发送到列表框的函数
char data[] = "abcd";
addToList(hWnd,data);
void addToList(HWND hWnd,char data[] ){
SendMessage(GetDlgItem(hWnd,IDC_LISTBOX),LB_ADDSTRING,0,(LPARAM)data);
}
当我执行此操作时,它将数据发送到列表框但问题出现在奇怪的字符中,我也尝试了wchar_t但问题仍然存在
答案 0 :(得分:4)
首先,您应该检查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);
}
显然,您的代码会添加我在开始时提到的错误检查。