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

时间:2018-10-11 02:33:40

标签: c++ winapi combobox ifstream

我是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 :(得分:1)

CB_ADDSTRING期望lParam参数是指向C样式的以null终止的字符串(其中TCHAR*TCHAR的原始char指针) ANSI还是Unicode的wchar_t,取决于ComboBox是使用A的{​​{1}} nsi还是W版的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

答案 1 :(得分:-3)

我可以提供帮助。我可以指导您看一下您的:

 while( getline(myfile,line) ) {

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

 while( getline(cin, line) ) {

行得通吗?