簡體   English   中英

WINAPI:如何將編輯文本轉換為std :: string?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM