将字符串参数传递给SendDlgItemMessage

时间:2014-07-09 09:44:36

标签: c++ windows string win32gui

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

如果我写下面的代码,它不会将任何字符串项添加到我的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 个答案:

答案 0 :(得分:1)

问题是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);
}