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

第二个参数GetWindowText一个输出参数:

lpString [out] 类型:LPTSTR

将接收文本的缓冲区。如果字符串与缓冲区一样长或更长,则字符串将被截断并以空字符终止。

所以你需要提供一个要填充的缓冲区,而不是一个指向常量字符串的指针(第三个参数表示缓冲区的最大大小以避免溢出)

尝试:

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

此外,您只需要调用GetLastErrorif gettusis 0 (GetWindowText()失败)

于 2012-06-21T13:00:06.130 回答