See the question and my original answer on StackOverflow

This is explained here in official documentation: Working with Strings

When Microsoft introduced Unicode support to Windows, it eased the transition by providing two parallel sets of APIs, one for ANSI strings and the other for Unicode strings. For example, there are two functions to set the text of a window's title bar:

SetWindowTextA takes an ANSI string.

SetWindowTextW takes a Unicode string.

As for recommendation, where "New" means newer than 1995 or so ...

New applications should always call the Unicode versions. Many world languages require Unicode. If you use ANSI strings, it will be impossible to localize your application. The ANSI versions are also less efficient, because the operating system must convert the ANSI strings to Unicode at run time.