2014-07-09 291 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); 
} 
相關問題