Why can\'t I include windows.h in afx(MFC) projects?
Because in MFC you are not supposed to use it directly. AFAIR you should include afx.h instead, which in turn indirectly includes windows.h the proper way.
Typically, MFC application code includes afx.h
or afxwin.h
(the latter includes former). First two lines of windows.h
are
#ifndef _WINDOWS_
#define _WINDOWS_
which means that _WINDOWS_
becomes defined if this header is included.
Afx.h
includes afxver_.h
and this header includes afxv_w32.h
which contains following code:
#ifdef _WINDOWS_
#error WINDOWS.H already included. MFC apps must not #include <windows.h>
#endif
...
#include <windows.h>
So, if you include windows.h
before MFC headers, you'll get this error generated in compile time and, as you can see, if you include afxwin.h
you don't need to include windows.h
yourself - it will already be included by afxv_w32.h
.