#define va_list __gnuc_va_list
 #endif // HP-UX
 
-// Cygwin / Mingw32 with gcc >= 2.95 use new windows headers which
-// are more ms-like (header author is Anders Norlander, hence the name)
-#if (defined(__MINGW32__) || defined(__CYGWIN__)) && ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95)))
-    #ifndef wxUSE_NORLANDER_HEADERS
-        #define wxUSE_NORLANDER_HEADERS 1
-    #endif
-#else
-    #ifndef wxUSE_NORLANDER_HEADERS
-        #define wxUSE_NORLANDER_HEADERS 0
-    #endif
-#endif
-
-// "old" GNUWIN32 is the one without Norlander's headers: it lacks the
-// standard Win32 headers and we define the used stuff ourselves for it
-// in wx/msw/gnuwin32/extra.h
-#if defined(__GNUC__) && !wxUSE_NORLANDER_HEADERS
-    #define __GNUWIN32_OLD__
+#if defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || defined( __CYGWIN__ )
+#include "wx/msw/gccpriv.h"
 #endif
 
 //////////////////////////////////////////////////////////////////////////////////
 
 
 #ifdef StartDoc
    #undef StartDoc
-   #ifdef __GNUG__
+   #if defined( __GNUG__ ) && !wxCHECK_W32API_VERSION( 0, 5 )
       #define DOCINFOW DOCINFO
       #define DOCINFOA DOCINFO
    #endif
    #ifdef _UNICODE
    inline int StartDoc(HDC h, CONST DOCINFOW* info)
    {
-      return StartDocW(h, info);
+      return StartDocW(h, (DOCINFOW*) info);
    }
    #else
    inline int StartDoc(HDC h, CONST DOCINFOA* info)
    {
-      return StartDocA(h, info);
+      return StartDocA(h, (DOCINFOA*) info);
    }
    #endif
 #endif
 
 typedef short INT16;
 #endif
 
+#if defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || defined( __CYGWIN__ )
+#include <wx/msw/gccpriv.h>
+#endif
+
 /* INT32 must hold at least signed 32-bit values. */
 
 /* you may define INT32_DEFINED if it is already defined somewhere */
 /* X11/xmd.h correctly defines INT32 */
 #define INT32_DEFINED
 #elif (_MSC_VER >= 1200) || (__BORLANDC__ >= 0x550) || \
+      wxCHECK_W32API_VERSION( 0, 5 ) || \
       ((defined(__MINGW32__) || defined(__CYGWIN__)) \
        && ((__GNUC__>2) || ((__GNUC__==2) && (__GNUC_MINOR__>=95))))
+
 /* INT32 is defined in windows.h  for these compilers */
 #define INT32_DEFINED
 #include <windows.h>
 
 
 # Miscellaneous compiler options
 # GRG: the __MINGW32__ option is not needed anymore
+# add "-DHAVE_W32API_H" if you have w32api >= 0.5
 OPTIONS = -DSTRICT # -D__MINGW32__
 
 # Debugging information
 
 DEFINE_EVENT_TYPE(wxEVT_DIALUP_CONNECTED)
 DEFINE_EVENT_TYPE(wxEVT_DIALUP_DISCONNECTED)
 
-// Doesn't yet compile under VC++ 4, BC++, mingw, Watcom C++: no wininet.h
-#if !defined(__BORLANDC__) && !defined(__GNUWIN32_OLD__) && !defined(__GNUWIN32__) && !defined(__WATCOMC__) && ! (defined(__VISUALC__) && (__VISUALC__ < 1020))
+// Doesn't yet compile under VC++ 4, BC++, Watcom C++: no wininet.h
+#if !defined(__BORLANDC__) && !defined(__GNUWIN32_OLD__) && !( defined(__GNUWIN32__) && !wxCHECK_W32API_VERSION( 0, 5 ) ) && !defined(__WATCOMC__) && ! (defined(__VISUALC__) && (__VISUALC__ < 1020))
 
 #include <ras.h>
 #include <raserror.h>