所以GetWindowText函数是在MSDN声明如下:
int GetWindowText(
HWND hWnd,
LPTSTR lpString,
int nMaxCount
);
然而,对于代码的工作,我们必须声明的第二个参数
TCHAR[255] WTitle;
然后调用函数GetWindowText(hWnd,Wtitle,255);
所述LPTSTR是一个指向TCHAR的阵列,所以宣称LPTSTR类似于声明TCHAR []? 它不工作,虽然这种方式。 当使用TCHAR []程序返回有效结果GetWindowText函数(它等于符号的标题数的整数)。 现在的问题是:我怎么能得到确切的标题出来的TCHAR []? 喜欢码
TCHAR[255] WTitle;
cout<< WTitle;
要么
cout<< *Wtitle;
回报数字。 我如何比较这与给定的字符串?
TCHAR[4] Test= __T("TEST")
if (WTitle == Test) do smth
不也行。
OK,几个定义第一。
在“T”类型是将评估要么CHAR(单字节)或WCHAR(双字节)的定义,这取决于你是否已经有了在构建设置中定义的_UNICODE符号。 这样做的目的是让你的目标ANSI和UNICODE用一套单一的源代码。
定义:
TCHAR title[100];
TCHAR * pszTitle;
......是不等价的。 第一个定义100个TCHARS的缓冲区。 第二定义了一个指针到一个或多个TCHARS,但在缓冲液中没有指向它。 进一步,
sizeof(title) == 100 (or 200, if _UNICODE symbol is defined)
sizeof(pszTitle) == 4 (size of a pointer in Win32)
如果你有这样的功能:
void foo(LPCTSTR str);
...您可以通过其中在上述两个变量:
foo(title); // passes in the address of title[0]
foo(pszTitle); // passes in a copy of the pointer value
好了,你要号码,可能是因为你必须UNICODE定义(所以字符宽),并且正在使用COUT,这是特定的单字节字符。 使用wcout改为:
wcout << title;
最后,这些将无法正常工作:
TCHAR[4] Test == __T("TEST") ("==" is equality comparison, not assignment)
if (WTitle == Test) do smth (you're comparing pointers, use wcscmp or similar)
哇,让我们来看看从哪里开始。
首先,WTitle的声明只需要看起来像这样:
TCHAR WTitle[255];
接下来,如果COUT工作不写,这是因为你在Unicode模式,所以你需要这样做:
wcout << WTitle;
或者,以适应整个TCHAR框架更好,你可以添加这个(实际上,我很惊讶,这是不是已经TCHAR.H的一部分):
#ifdef _UNICODE
#define tcout wcout
#else
#define tcout cout
#endif
然后使用:
tcout << WTitle;
答案很简单:除非你的编码适用于Win98,使用wchar_t
而不是TCHAR
和wcout
,而不是cout
龙版本:
所述TCHAR
型存在,以允许在多个串模式来编译的代码。 例如支持ASCII和Unicode。 该TCHAR
类型将有条件地编译基于没有设置相应的字符类型。
所有新运系统都基于Unicode。 当ASCII字符串传递给OS的功能,它们将转换为Unicode和通话的真正功能。 因此,最好只使用Unicode整个应用程序。
使用_tcscmp或变体(其在需要的字符数来比较)。 http://msdn.microsoft.com/en-us/library/e0z9k731.aspx
喜欢:
if (_tcscmp(WTitle, Test) == 0) {
// They are equal! Do something.
}
在C中,wchar_t的是对于某些整数类型(通常为短整型)一个typedef。 在C ++中,它必须是一个独立的类型了自己的 - 但是,微软的编译器默认使用反正一个typedef它。 要使它成为一个独立的类型了自己,你需要使用/Zc:wchar_t
编译器开关。 随口说说,我不知道这是否会完全虽然解决这个问题 - 我不知道,如果库中有wchar_t的作为原生型重载实际打印出来的那些作为字符,而不是短整型。
但一般来说,我会建议对无论如何与微软的“T”变种搞乱 - 让他们的权利,是一种痛苦,而他们的目的主要是为用户提供16位Windows的兼容性反正。 既然它现在已经因为在此行的最后释放约10年,它可能安全地忽略它在新的代码,除非你真的确定至少有几个你的客户真正使用它。