0

Windows8のVisualStudio2012でMFCを使用しようとしています。次のコードがあります。

BOOL CALLBACK EWP(HWND hwnd, LPARAM lParam)
{
    int txtlen = GetWindowTextLengthW(hwnd);
    std::wstring s;
    s.reserve(txtlen + 1);
    GetWindowText(hwnd, const_cast<wchar_t*>(s.c_str()), txtlen);

    return TRUE;
}

EnumWindows(EWP, 0);

何が起こるかというと、最初の文字列は「Task Switchin」として出力され、残りは「」として出力されます。私はこれらの文字列を約330個取得します。同じ話で、char buff [300]だけで、その奇妙な文字列メソッドも使用せずに試しました。

誰かが何が起こっているのか教えてもらえますか?

4

1 に答える 1

3

GetWindowText()への最後の引数は1つずつずれています。その引数のMSDN記事の説明から:

NULL文字を含め、バッファにコピーする最大文字数を指定します。テキストがこの制限を超えると、切り捨てられます。

txtlen+1修正に合格します。

于 2012-10-18T15:18:29.587 に答える