See here. VS2008 automates some things for you which has lead to the confusion.
CONSOLE Win32 character-mode application. The operating system
provides a console for console applications. If main or wmain is
defined for native code, int main(array ^) is defined for
managed code, or you build the application completely by using
/clr:safe, CONSOLE is the default.
WINDOWS Application does not require a console, probably because it creates its own windows for interaction with the user. If WinMain
or wWinMain is defined for native code, or WinMain(HISTANCE *,
HINSTANCE *, char *, int) or wWinMain(HINSTANCE *, HINSTANCE *,
wchar_t *, int) is defined for managed code, WINDOWS is the default.