まず、API呼び出しでエラーをチェックする必要があります。API関数へのすべての呼び出しの戻り値を確認する必要があります。
そうは言っても、質問のコードを考えると、
SendMessage(GetDlgItem(hWnd,IDC_LISTBOX),LB_ADDSTRING,0,(LPARAM)data);
その結果、リストボックスに項目が追加された場合、それGetDlgItem
は実際に有効なウィンドウハンドルを返し、data
実際に有効なメモリを指していることを意味します。その場合、あなたが報告することの唯一の説明は、エンコードされたテキストが一致しなかったということです。
したがって、SendMessage
マクロはに評価されると想定できSendMessageW
ます。また、ANSIエンコードされたテキストを渡すため、その不一致が症状を説明します。この関数は、テキストをUTF-16でエンコードされたものとして扱います。
明らかな解決策の1つは、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);
}
明らかに、あなたのコードは、冒頭で述べたエラーチェックを追加します。