CB_ADDSTRING
ожидает, что параметр lParam
будет необработанным указателем TCHAR*
на символьную строку с нулем в конце в стиле C (где TCHAR
равно char
для ANSI или wchar_t
для Unicode, в зависимости ото том, создается ли ComboBox с A
nsi или W
ide версией CreateWindow/Ex()
).
Но вы пытаетесь привести тип самого объекта std::string
, который не будет работать.Вам нужно вместо этого привести тип к указателю на данные строки.
Чтобы получить нулевой завершающий указатель на символьные данные строки, вам необходимо использовать метод c_str()
строки (или ее метод data()
в C ++ 11 и более поздних версиях), например:
SendMessage(hWndComboBox, CB_ADDSTRING, 0, (LPARAM) line.c_str());
Или, используя приведение в стиле C ++ вместо преобразования в стиле C:
SendMessage(hWndComboBox, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(line.c_str()));
Обратите внимание, что если ComboBox использует Unicode, вы не можете отправлять данные std::string
как есть.Вам придется переписать свой код, чтобы использовать вместо него std::wstring
, или, по крайней мере, преобразовать данные std::string
в std::wstring
(например, с MultiByteToWideChar()
или std::wstring_convert
), прежде чем передавать их в CB_ADDSTRING
.