[英]WINAPI: how to get edit's text to a std::string?
我正在嘗試以下代碼:
int length = SendMessage(textBoxPathToSource, WM_GETTEXTLENGTH, 0, 0);
LPCWSTR lpstr;
SendMessage(textBoxPathToSource, WM_GETTEXT, length+1, LPARAM(LPCWSTR));
std::string s(lpstr);
但它不起作用。
你使用它絕對錯誤:
首先,您在這里傳遞一個類型而不是值:
SendMessage(textBoxPathToSource, WM_GETTEXT, length+1, LPARAM(LPCWSTR));
寫入字符串的WinAPI函數的接口需要緩沖區,因為std :: string不能直接寫入。 您需要定義一個空格來保存值:
WCHAR wszBuff[256] = {0};
(當然你可以使用new分配存儲空間,你沒有,你剛剛聲明了LPCWSTR lpstr
)。
提取字符串並存儲在該緩沖區中:
SendMessage(textBoxPathToSource, WM_GETTEXT, 256, (LPARAM)wszBuff);
並執行std::wstring s(lpStr)
。
編輯:請注意使用std :: wstring,而不是std :: string。
ALevy說的是正確的,但使用std::vector<WCHAR>
比使用固定大小的緩沖區(或使用new
)更好:
std::wstring s;
int length = SendMessageW(textBoxPathToSource, WM_GETTEXTLENGTH, 0, 0);
if (length > 0)
{
std::vector<WCHAR> buf(length + 1 /* NUL */);
SendMessageW(textBoxPathToSource,
WM_GETTEXT,
buf.size(),
reinterpret_cast<LPCWSTR>(&buf[0]));
s = &buf[0];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.