Добавление элемента в выпадающий список из текстового файла - PullRequest
0 голосов
/ 11 октября 2018

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

0 голосов
/ 11 октября 2018

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.

0 голосов
/ 11 октября 2018

Я могу помочь.Я могу порекомендовать вам взглянуть на:

 while( getline(myfile,line) ) {

Проблема, похоже, заключается в использовании этих двух различных типов переменных.Также кажется, что вы хотите, чтобы ваш пользователь вводил данные и переносил всю эту строку данных в строковую переменную.Попробуйте:

 while( getline(cin, line) ) {

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

...