It is to do with UNICODE and ANSI. A lot of Windows API calls have two versions with an 'general' (macro) version, for example MessageBoxW() and MessageBoxA() has the MessageBox(). Your project is set to use UNICODE so the general version is replaced with a call to MessageBoxW() this required an 'L' in front of the string literal (i.e. L"Hello, Win32 world!"). If you just put the L in front in the code above and later changed your project to non unicode it would fail again because it would require the plain string literal. The TEXT macro basically uses the correct format for the string literal based on how your project is configured.
Edit:
See: http://www.cplusplus.com/articles/2w6AC542/ NB: I have only skimmed it but Disch does seem to have his head screwed on right.