2012-06-21 226 views
0

我有代码:错误1400无效的窗口句柄

...... 
    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); 

的MessageBox >> 1400个

gettus >>'

这究竟是为什么?为什么窗口句柄无效?

+1

您确定'GetWindowText'失败吗?除非你真的知道最后一个函数返回一个错误,否则你不应该相信错误'GetLastError'。首先检查'gettus'。 –

+2

您可能需要一个实际的数组来保存您的窗口的文本,而不是指向只读内存中某个字符串的指针。 'TCHAR tilte_old [100];' – chris

回答

2

的的GetWindowTextsecond parameter是一个输出参数:

lpString [OUT] 类型:LPTSTR

将接收的文本的缓冲区。如果字符串的长度或长度大于缓冲区,则该字符串将被截断并以空字符结尾。

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

尝试:

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

另外,如果gettus为0(GetWindowText()失败),则只需拨打GetLastError