Добавление элемента в выпадающий список из текстового файла

Я новичок в 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) ) {

это работает?

Другие вопросы по тегам