Добавление элемента в выпадающий список из текстового файла
Я новичок в C++. Кажется, я не могу добавить элемент ComboBox. Я всегда получаю ошибку, что str не может быть преобразован в lparam, и я не могу найти другой способ.
Может кто-нибудь, пожалуйста, помогите мне с этим. Спасибо!
string line;
ifstream myfile ("test.txt");
if (myfile.is_open()) {
while ( getline (myfile,line) ) {
// SendMessage(hWndComboBox,(UINT) CB_ADDSTRING,(WPARAM) 0,(LPARAM) line);
cout << line << '\n';
}
myfile.close();
}
Линия получает ошибку. Назначение строки в lparam
2 ответа
CB_ADDSTRING
ожидает lParam
параметр, чтобы быть сырым TCHAR*
указатель на символьную строку с нулем в конце в стиле C (где TCHAR
является char
для ANSI или wchar_t
для Unicode, в зависимости от того, создан ли ComboBox с A
нси или W
Идея версия 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
,
Я могу быть в состоянии помочь. Я могу направить вас посмотреть на ваши:
while( getline(myfile,line) ) {
Проблема, похоже, заключается в использовании этих двух разных типов переменных. Также кажется, что вы хотите, чтобы ваш пользователь вводил данные и переносил всю эту строку данных в строковую переменную. Пытаться:
while( getline(cin, line) ) {
это работает?