从文本文件在组合框中添加项目
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 风格的空终止字符串(其中 TCHAR
是 char
对于 ANSI,或 wchar_t
对于 Unicode,取决于 ComboBox 是使用 A
nsi 还是 W
ide 版本的 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
。
我是 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 风格的空终止字符串(其中 TCHAR
是 char
对于 ANSI,或 wchar_t
对于 Unicode,取决于 ComboBox 是使用 A
nsi 还是 W
ide 版本的 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
。