2014-07-09 232 views
-2

SendDlgItemMessage()函数的最后一个参数采用显式字符串,例如L“TEST”,并且当我将它传递给字符串或wstring变量时,它根本不起作用;将字符串参数传递给SendDlgItemMessage

如果我写下面的代码不会任何字符串项添加到我的LIST_BOX:

string str[10]; 
for(int i = 0; i<10; i++) 
    str[i] = "Item " + i; 
int index2 = SendDlgItemMessage(hdlg, IDC_LIST2, LB_ADDSTRING, 0, (LPARAM)str[MarkerNumber ]); 

你能不能帮我设置此功能使用字符串参数?

+1

您需要从中获取原始C字符串:即,您需要调用'str [i] .c_str()'来获取API正在查找的'char *'或'wchar_t *'对于 –

+0

检查你的代码 - 你使用变量i超出范围。 –

+0

该代码不会*编译*,更不用说成功执行。这不是你如何建立一个字符串与运行整数后缀,我都可以,但是,向你保证'“项目” + i'不是做你认为它是。关于设置项目文本的实际调用,你的数组是'string',而不是'wstring'。 'SendDlgItemMessageA(hdlg,IDC_LIST2,LB_ADDSTRING,0,(LPARAM)STR [1] .c_str());',但你需要正确地生成字符串* *第一。 – WhozCraig

回答

0

问题是,API函数SendDlgItemMessage不知道如何传递std::stringstd::wstring对象。您需要做的是将字符串中包含的原始C字符串传递给它。您可以通过使用成员函数std::string::c_str()(返回做一个const char*std::wstring::c_str()返回一个const wchar_t*

然后,您可以使用如下:

std::wstring szTest(L"Test String"); 
int iIndex = SendDlgItemMessage(hDlg, IDC_LIST2, LB_ADDSTRING, 0, (LPARAM)szTest.c_str()); 

然而,因为它代表此刻的你代码甚至不会编译,有范围的错误并没有转换,从std::stringLPARAM等投无效。此外,当你构建你的字符串(你大概想"Item n"其中n范围在[1 ..。 .10],你应该这样做:

for(int i = 1; i <= 10; ++i) 
{ 
    szStringArray[i] = L"Item " + std::to_wstring(i); 
} 
相关问题