从文本文件在组合框中添加项目

Adding item in combobox from text file

我是 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

我也许能帮上忙。我可以指导您查看您的:

 while( getline(myfile,line) ) {

问题似乎与使用这两种不同类型的变量有关。您似乎还希望用户输入数据并将整行数据放入字符串变量中。尝试:

 while( getline(cin, line) ) {

这有用吗?

CB_ADDSTRING 期望 lParam 参数是原始的 TCHAR* 指针,指向 C 风格的空终止字符串(其中 TCHARchar 对于 ANSI,或 wchar_t 对于 Unicode,取决于 ComboBox 是使用 Ansi 还是 Wide 版本的 CreateWindow/Ex() 创建的)。

但是您正试图对 std::string 对象本身进行类型转换,这是行不通的。您需要改为对字符串数据的指针进行类型转换。

要获取指向字符串字符数据的空终止指针,您需要使用字符串的 c_str() 方法(或 C++11 及更高版本中的 data() 方法),例如:

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