Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to tame the Windows headers (useful defines)?

Tags:

In one of the answers to this question jalf spoke about useful define NOMINMAX, that could prevent from unwanted defining min/max macros. Are there other useful defines that can help to control windows.h (or other Windows headers, for instance Microsoft C Runtime headers or STL implementation) behavior?

like image 646
Kirill V. Lyadvinsky Avatar asked Sep 08 '09 16:09

Kirill V. Lyadvinsky


2 Answers

The most commonly used is probably WIN32_LEAN_AND_MEAN - it disables rarely used parts of the API. You can find more on MSDN's Using the Windows Headers.

I remembered wrong about MSDN listing those defines, so here's list from windows.h:

/*  If defined, the following flags inhibit definition  *     of the indicated items.  *  *  NOGDICAPMASKS     - CC_*, LC_*, PC_*, CP_*, TC_*, RC_  *  NOVIRTUALKEYCODES - VK_*  *  NOWINMESSAGES     - WM_*, EM_*, LB_*, CB_*  *  NOWINSTYLES       - WS_*, CS_*, ES_*, LBS_*, SBS_*, CBS_*  *  NOSYSMETRICS      - SM_*  *  NOMENUS           - MF_*  *  NOICONS           - IDI_*  *  NOKEYSTATES       - MK_*  *  NOSYSCOMMANDS     - SC_*  *  NORASTEROPS       - Binary and Tertiary raster ops  *  NOSHOWWINDOW      - SW_*  *  OEMRESOURCE       - OEM Resource values  *  NOATOM            - Atom Manager routines  *  NOCLIPBOARD       - Clipboard routines  *  NOCOLOR           - Screen colors  *  NOCTLMGR          - Control and Dialog routines  *  NODRAWTEXT        - DrawText() and DT_*  *  NOGDI             - All GDI defines and routines  *  NOKERNEL          - All KERNEL defines and routines  *  NOUSER            - All USER defines and routines  *  NONLS             - All NLS defines and routines  *  NOMB              - MB_* and MessageBox()  *  NOMEMMGR          - GMEM_*, LMEM_*, GHND, LHND, associated routines  *  NOMETAFILE        - typedef METAFILEPICT  *  NOMINMAX          - Macros min(a,b) and max(a,b)  *  NOMSG             - typedef MSG and associated routines  *  NOOPENFILE        - OpenFile(), OemToAnsi, AnsiToOem, and OF_*  *  NOSCROLL          - SB_* and scrolling routines  *  NOSERVICE         - All Service Controller routines, SERVICE_ equates, etc.  *  NOSOUND           - Sound driver routines  *  NOTEXTMETRIC      - typedef TEXTMETRIC and associated routines  *  NOWH              - SetWindowsHook and WH_*  *  NOWINOFFSETS      - GWL_*, GCL_*, associated routines  *  NOCOMM            - COMM driver routines  *  NOKANJI           - Kanji support stuff.  *  NOHELP            - Help engine interface.  *  NOPROFILER        - Profiler interface.  *  NODEFERWINDOWPOS  - DeferWindowPos routines  *  NOMCX             - Modem Configuration Extensions  */ 
like image 160
Cat Plus Plus Avatar answered Oct 02 '22 19:10

Cat Plus Plus


MFC projects can use VC_EXTRALEAN since WIN32_LEAN_AND_MEAN is already defined by MFC. I also recommend enabling STRICT.

like image 25
user7116 Avatar answered Oct 02 '22 20:10

user7116