因此,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也不起作用。
发布于 2010-02-10 03:21:42
好的,先给出几个定义。
“T”类型的定义将计算为CHAR (单字节)或WCHAR (双字节),这取决于您是否在构建设置中定义了_UNICODE符号。其目的是让您通过一组源代码同时针对ANSI和UNICODE。
定义:
TCHAR title[100];
TCHAR * pszTitle;...are不是等效项。第一个定义了一个包含100个TCHAR的缓冲区。第二个函数定义了一个指向一个或多个TCHAR的指针,但没有将它指向缓冲区。此外,
sizeof(title) == 100 (or 200, if _UNICODE symbol is defined)
sizeof(pszTitle) == 4 (size of a pointer in Win32)如果你有一个这样的函数:
void foo(LPCTSTR str);...you可以将上述两个变量中的任意一个传入:
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)发布于 2010-02-10 03:16:35
哇,让我们看看从哪里开始。
首先,WTitle的声明需要如下所示:
TCHAR WTitle[255];接下来,如果cout没有运行write,这是因为您处于Unicode模式,因此需要执行以下操作:
wcout << WTitle;或者,为了更好地适应整个tchar框架,您可以添加以下内容(实际上,我很惊讶这不是tchar.h的一部分):
#ifdef _UNICODE
#define tcout wcout
#else
#define tcout cout
#endif然后使用:
tcout << WTitle;发布于 2010-02-10 03:13:26
简而言之:除非您正在为Win98编码,否则请使用wchar_t而不是TCHAR,使用wcout而不是cout
长版本:
TCHAR类型允许以多种字符串模式编译代码。例如支持ASCII和Unicode。TCHAR类型将根据设置有条件地编译为适当的字符类型。
所有新的Win系统都基于Unicode。将ASCII字符串传递给OS函数时,它们将转换为unicode并调用实际函数。因此,最好在整个应用程序中只使用Unicode。
https://stackoverflow.com/questions/2231720
复制相似问题