错误1400无效的窗口句柄
问题描述:
我有代码:错误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 >>'
这究竟是为什么?为什么窗口句柄无效?
答
的的GetWindowText
second 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
您确定'GetWindowText'失败吗?除非你真的知道最后一个函数返回一个错误,否则你不应该相信错误'GetLastError'。首先检查'gettus'。 –
您可能需要一个实际的数组来保存您的窗口的文本,而不是指向只读内存中某个字符串的指针。 'TCHAR tilte_old [100];' – chris