First of all, what is it exactly? I guess it is a pointer (LPC means long pointer constant), but what does “W” mean? Is it a specific pointer to a string or a pointer to a specific string?
For example I want to close a Window named “TestWindow”.
HWND g_hTest; LPCWSTR a; *a = ("TestWindow"); g_hTest = FindWindowEx(NULL, NULL, NULL, a); DestroyWindow(g_hTest);
The code is illegal and it doesn’t work since const char cannot be converted to CONST WCHAR.
I don’t get it at all.
I want to get a clear understanding of all these LPCWSTR, LPCSTR, LPSTR. I tried to find something , however I got confused even more. At msdn site
FindWindowEx is declared as
HWND FindWindowEx( HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow );
So the last parameter is LPCSTR, and the compiler demands on LPCWSTR.
LPCWSTR stands for “Long Pointer to Constant Wide String”. The W stands for Wide and means that the string is stored in a 2 byte character vs. the normal
char. Common for any C/C++ code that has to deal with non-ASCII only strings.=
To get a normal C literal string to assign to a
LPCWSTR, you need to prefix it with L
LPCWSTR a = L"TestWindow";
It’s a long pointer to a constant, wide string (i.e. a string of wide characters).
Since it’s a wide string, you want to make your constant look like:
L"TestWindow". I wouldn’t create the intermediate
a either, I’d just pass
L"TestWindow" for the parameter:
ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
If you want to be pedantically correct, an “LPCTSTR” is a “text” string — a wide string in a Unicode build and a narrow string in an ANSI build, so you should use the appropriate macro:
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
Few people care about producing code that can compile for both Unicode and ANSI character sets though, and if you don’t getting it to really work correctly can be quite a bit of extra work for little gain. In this particular case, there’s not much extra work, but if you’re manipulating strings, there’s a whole set of string manipulation macros that resolve to the correct functions.
LPCWSTR is equivalent to
wchar_t const *. It’s a pointer to a wide character string that won’t be modified by the function call.
You can assign to
LPCWSTRs by prepending a L to a string literal:
LPCWSTR *myStr = L"Hello World";
LPCTSTR and any other T types, take a string type depending on the Unicode settings for your project. If
_UNICODE is defined for your project, the use of T types is the same as the wide character forms, otherwise the Ansi forms. The appropriate function will also be called this way:
FindWindowEx is defined as
FindWindowExW depending on this definition.