I am using code blocks to create a basic windows application, and I have some basic questions about the skeleton program that it creates, and it does work all ok.

Firstly, when the window is defined by filling in the WNDCLASSEX, i noticed that there is a member lpszClassName. Does this have to be unique for every window class that you define, i.e. Will the same name cause RegisterClass() to fail?

Another thing I have noticed is that some code I have looked at shows programmers replacing (where I expect NULL) with 0, does this really matter?

More confusing to me is this; Some functions have a 'A' or a 'W' at the end of their name, but my code never states either. However am I right in thinking that the pre-processor works this out for me as a result of this stuff at the top of the file:

Code:
#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif
Does the preprocessor stuff really matter?

New to windows programming and just need a bit of clarification.