首先,究竟是什么?我猜它是一个指针(LPC意味着长指针常量),但“W”是什么意思?它是指向字符串的特定指针还是指向特定字符串的指针? 例如,我想关闭一个名为“TestWindow”的窗口。
HWND g_hTest;
LPCWSTR a;
*a = ("TestWindow");
g_hTest = FindWindowEx(NULL, NULL, NULL, a);
DestroyWindow(g_hTest);
代码是非法的,因为const char [6]无法转换为CONST WCHAR,所以它不起作用。
我根本得不到它。
我想清楚地了解所有这些LPCWSTR,LPCSTR,LPSTR。我试图找到一些东西,但我更加困惑。在msdn网站FindWindowEx
被声明为
HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
所以最后一个参数是LPCSTR,编译器要求LPCWSTR。 请帮忙。
答案 0 :(得分:114)
LPCWSTR
代表“指向常量宽字符串的长指针”。 W代表Wide,表示字符串以2字节字符存储,而不是普通char
。任何必须处理非ASCII字符串的C / C ++代码的通用。=
要获得要分配给LPCWSTR
的普通C字符串,您需要在其前面加上L
LPCWSTR a = L"TestWindow";
答案 1 :(得分:10)
LPCWSTR
相当于wchar_t const *
。它是一个指向宽字符串的指针,不会被函数调用修改。
您可以通过将L添加到字符串文字来指定LPCWSTR
:LPCWSTR *myStr = L"Hello World";
LPC T STR和任何其他 T 类型,根据项目的Unicode设置采用字符串类型。如果为您的项目定义了_UNICODE
,则T类型的使用与宽字符形式相同,否则Ansi形式。相应的函数也将以这种方式调用:FindWindowEx
定义为FindWindowExA
或FindWindowExW
,具体取决于此定义。
答案 2 :(得分:6)
它是指向常量宽字符串(即一串宽字符)的长指针。
因为它是一个宽字符串,所以你想让它看起来像L"TestWindow"
。我也不会创建中间a
,我只是为参数传递L"TestWindow"
:
ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
如果你想要迂腐正确,“LPCTSTR”是一个“文本”字符串 - Unicode构建中的宽字符串和ANSI构建中的窄字符串,所以你应该使用适当的宏:
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
很少有人关心如何生成可以为Unicode和ANSI字符集编译的代码,如果你没有让它真正正常工作,可能会有很多额外的工作,但收效甚微。在这种特殊情况下,没有太多额外的工作,但如果你正在操作字符串,那么就有一整套字符串处理宏可以解析为正确的函数。