我是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
答案 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) ) {
行得通吗?