0

私はコードを持っています:

......
    g_hWnd = CreateWindow( L"Urok6WindowClass", L"TitleWindow", WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, hInstance,
                           NULL );
    if( !g_hWnd )
        return E_FAIL;

    ShowWindow(g_hWnd, nCmdShow );

すべて正常に動作します。しかし、私が追加すると:

    LPTSTR tilte_old= L"Old title";
    int gettus = GetWindowText(g_hWnd, tilte_old, 100);
    DWORD error = GetLastError();
    WCHAR szTest[10];
    swprintf_s(szTest, 10, L"%d", error); 
    MessageBox(NULL, szTest, L"TEST2", MB_OK); 

メッセージボックス >> 1400

ゲタス >> ''

なぜこうなった?Windowsハンドルが無効なのはなぜですか?

4

1 に答える 1

2

2 番目のパラメーターGetWindowText出力パラメーターです。

lpString [アウト] タイプ: LPTSTR

テキストを受け取るバッファ。文字列がバッファと同じかそれよりも長い場合、文字列は切り捨てられ、null 文字で終了します。

そのため、定数文字列へのポインタではなく、埋められるバッファを指定する必要があります (3 番目のパラメータは、オーバーフローを回避するためのバッファの最大サイズを示します)。

試す:

const size_t BUFF_SIZE = 100;
TCHAR title_old[BUFF_SIZE];
int gettus = GetWindowText(g_hWnd, title_old, BUFF_SIZE);

また、 is 0 (失敗)のGetLastError場合にのみ呼び出す必要があります。gettusGetWindowText()

于 2012-06-21T13:00:06.130 に答える