Basically, TCHAR and the associated macros (_T/TEXT) are only really necessary if you're targeting both ANSI and Unicode, and, like 99.9% of developers out there, the possibility that someone might be using Windows 95,  98 or Me is not really a concern of mine.  I use WCHAR, LP(C)WSTR, etc. in my applications.If I'm explicitly using those types, should I also explicitly use the associated functions?For example: WCHAR wString[100]; StringCchCopyW(wString, 100, LHello World); MessageBoxW(0, wString, L, MB_OK | MB_ICONINFORMATION);As opposed to: WCHAR wString[100]; StringCchCopy(wString, 100, _T(Hello World)); MessageBox(0, wString, _T(), MB_OK | MB_ICONINFORMATION);It's not very likely that a colleague will go into the project and change the character set setting to Use Multi-Byte Character Set, and while the former code is more explicit in what I'm doing, the latter uses the well-known name of the function; they're the same names you expect to see on MSDN documentation, and even verbally, I'd find myself saying string see-see-ech copy rather than string see-see-ech copy double-you, even if that's the function I'm explicitly using in my code.
If I'm explicitly using WCHAR strings in my Windows application, should I use the -W functions rather than the TCHAR #defines?
naming;windows;functions
They're both equivalent. If you have a large code base, you should follow the same style as the existing project code. This can make it easier to read, search, copy/paste code, and use examples from Microsoft. You can choose whichever one you want for new projects. 