Well ... wstring and string do the same thing , basically. The first one is used with Unicode or wide strings and the latter with regular strings.
Just like in the case of wstring and string , there is wostringstream and ostringstream.
UNICODE is just a character set, like ASCII only much more vast. It contains like almost every character of every language.
The fact is: every Windows function has two versions one which uses Unicode and one that doesn't. For example CreateWindowW() which uses Unicode and CreateWindowA() which doesn't. You don't have to explicitly state which version of the function you want because the compiler is smart enough to know which character set you are using. So you can just call CreateWindow().
I hope I've cleared some things up for you. If you have other questions, just post them here and I will try to answer them.
EDIT: I'm a bit suprised because I knew that Visual C++ 2008 Express uses Unicode by default whereas your version doesn't.
-------------------------------------------------------------------------------------------
My Website - Portfolio, Tutorials My blog