home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / graphics / audio / acmapp / appport.h < prev    next >
C/C++ Source or Header  |  1997-10-05  |  11KB  |  327 lines

  1. //==========================================================================;
  2. //
  3. //  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  4. //  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  5. //  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  6. //  PURPOSE.
  7. //
  8. //  Copyright (C) 1992 - 1997 Microsoft Corporation.  All Rights Reserved.
  9. //
  10. //--------------------------------------------------------------------------;
  11. //
  12. //  appport.h
  13. //
  14. //  Description:
  15. //      Win 16/32 Portability Stuff
  16. //
  17. //      This file contains common macros to help with writing code that
  18. //      cross compiles between Win 32 and Win 16. This file should be
  19. //      included _after_ windows.h and windowsx.h.
  20. //
  21. //==========================================================================;
  22.  
  23. #ifndef _INC_APPPORT
  24. #define _INC_APPPORT                // #defined if file has been included
  25.  
  26. #ifndef RC_INVOKED
  27. #pragma pack(1)                     // assume byte packing throughout
  28. #endif
  29.  
  30. #ifndef EXTERN_C
  31. #ifdef __cplusplus
  32.     #define EXTERN_C extern "C"
  33. #else
  34.     #define EXTERN_C extern 
  35. #endif
  36. #endif
  37.  
  38. #ifdef __cplusplus
  39. extern "C"                          // assume C declarations for C++
  40. {
  41. #endif
  42.  
  43.  
  44. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  45. //
  46. //  Win 32
  47. //
  48. //
  49. //
  50. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  51.  
  52. #ifdef WIN32
  53.     #ifndef FNLOCAL
  54.     #ifdef DEBUG
  55.         #define FNLOCAL     _stdcall
  56.         #define FNCLOCAL    _stdcall
  57.     #else
  58.         #define FNLOCAL     static _stdcall
  59.         #define FNCLOCAL    static _stdcall
  60.     #endif
  61.         #define FNGLOBAL    _stdcall
  62.         #define FNCGLOBAL   _stdcall
  63.         #define FNWCALLBACK CALLBACK
  64.         #define FNEXPORT    CALLBACK
  65.     #endif
  66.  
  67.  
  68.     #include <tchar.h>
  69.  
  70.  
  71.     //
  72.     //
  73.     //
  74.     #define Edit_GetSelEx(hwndCtl, pnS, pnE)    \
  75.         ((DWORD)SendMessage((hwndCtl), EM_GETSEL, (WPARAM)pnS, (LPARAM)pnE))
  76.  
  77.     #define HUGE
  78.  
  79.     //
  80.     //  for compiling Unicode
  81.     //
  82.     #ifdef UNICODE
  83.         #define SIZEOF(x)   (sizeof(x)/sizeof(WCHAR))
  84.     #else
  85.         #define SIZEOF(x)   sizeof(x)
  86.     #endif
  87.  
  88.     #define BCODE
  89.     #define BDATA
  90.     #define BSTACK
  91.  
  92.     //
  93.     //  win32 apps [usually] don't have to worry about 'huge' data
  94.     //
  95.     #if !defined hmemcpy
  96.     #define hmemcpy    memcpy
  97.     #endif
  98. #endif // #ifdef WIN32
  99.  
  100.  
  101. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  102. //
  103. //  Win 16
  104. //
  105. //
  106. //
  107. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  108.  
  109. #ifndef WIN32
  110.     #ifndef FNLOCAL
  111.     #ifdef DEBUG
  112.         #define FNLOCAL     NEAR PASCAL
  113.         #define FNCLOCAL    NEAR _cdecl
  114.     #else
  115.         #define FNLOCAL     static NEAR PASCAL
  116.         #define FNCLOCAL    static NEAR _cdecl
  117.     #endif
  118.         #define FNGLOBAL    FAR PASCAL
  119.         #define FNCGLOBAL   FAR _cdecl
  120.     #ifdef _WINDLL
  121.         #define FNWCALLBACK FAR PASCAL _loadds
  122.         #define FNEXPORT    FAR PASCAL _export
  123.     #else
  124.         #define FNWCALLBACK FAR PASCAL _export
  125.         #define FNEXPORT    FAR PASCAL _export
  126.     #endif
  127.     #endif
  128.  
  129.  
  130.     #ifndef _tcstod
  131.         #define _tcstod     strtod
  132.         #define _tcstol     strtol
  133.         #define _tcstoul    strtoul
  134.     #endif
  135.  
  136.  
  137.     //
  138.     //
  139.     //
  140.     //
  141.     #ifndef NOXACTALLC
  142.         #undef GlobalAllocPtr
  143.         #undef GlobalReAllocPtr
  144.  
  145.         static __inline LPVOID GlobalExactLock(HGLOBAL hg, DWORD cb)
  146.         {
  147.             return (LPVOID)((hg) ? (LPVOID)((LPBYTE)GlobalLock(hg) + (GlobalSize(hg) - (cb))) : (LPVOID)NULL);
  148.         }
  149.  
  150.         #define GlobalAllocPtr(flags, cb)   \
  151.                     (GlobalExactLock(GlobalAlloc((flags), (cb)), (cb)))
  152.         #define GlobalReAllocPtr(lp, cbNew, flags)  \
  153.                     (GlobalUnlockPtr(lp), GlobalExactLock(GlobalReAlloc(GlobalPtrHandle(lp) , (cbNew), (flags)), (cbNew)))
  154.     #endif
  155.  
  156.  
  157.     //
  158.     //
  159.     //
  160.     //
  161.     #ifndef FIELD_OFFSET
  162.     #define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
  163.     #endif
  164.  
  165.     //
  166.     //  based code makes since only in win 16 (to try and keep stuff out of
  167.     //  our fixed data segment...
  168.     //
  169.     #define BCODE           _based(_segname("_CODE"))
  170.     #define BDATA           _based(_segname("_DATA"))
  171.     #define BSTACK          _based(_segname("_STACK"))
  172.  
  173.     #define HUGE            _huge
  174.  
  175.     #define UNALIGNED
  176.  
  177.  
  178.     //
  179.     //  stuff for Unicode in Win 32--make it a noop in Win 16
  180.     //
  181.     #ifndef _TCHAR_DEFINED
  182.         #define _TCHAR_DEFINED
  183.         typedef char            TCHAR, *PTCHAR;
  184.         typedef unsigned char   TBYTE, *PTUCHAR;
  185.  
  186.         typedef PSTR            PTSTR, PTCH;
  187.         typedef LPSTR           LPTSTR, LPTCH;
  188.         typedef LPCSTR          LPCTSTR;
  189.     #endif
  190.  
  191.     #ifndef _MMRESULT_
  192.     #define _MMRESULT_
  193.     typedef UINT        MMRESULT;
  194.     #endif
  195.  
  196.     #define TEXT(a)         a
  197.     #define SIZEOF(x)       sizeof(x)
  198.  
  199.     //
  200.     //
  201.     //
  202.     #define CharNext        AnsiNext
  203.     #define CharPrev        AnsiPrev
  204.  
  205.     //
  206.     //
  207.     //
  208.     #define Edit_GetSelEx(hwndCtl, pnS, pnE)                        \
  209.     {                                                               \
  210.         DWORD   dw;                                                 \
  211.         dw = (DWORD)SendMessage((hwndCtl), EM_GETSEL, 0, 0L);       \
  212.         *pnE = (int)HIWORD(dw);                                     \
  213.         *pnS = (int)LOWORD(dw);                                     \
  214.     }
  215.  
  216.     //
  217.     //  common message cracker macros available in windowx.h on NT--these
  218.     //  should be added to the Win 16 windowsx.h and probably will be
  219.     //  in the future.
  220.     //
  221.     //  there is a windowsx.h16 that ships with the NT PDK that defines
  222.     //  these macros. so if that version is being used, don't redefine
  223.     //  message crackers.
  224.     //
  225.  
  226. #ifndef WM_CTLCOLORMSGBOX
  227.     #define WM_CTLCOLORMSGBOX           0x0132
  228.     #define WM_CTLCOLOREDIT             0x0133
  229.     #define WM_CTLCOLORLISTBOX          0x0134
  230.     #define WM_CTLCOLORBTN              0x0135
  231.     #define WM_CTLCOLORDLG              0x0136
  232.     #define WM_CTLCOLORSCROLLBAR        0x0137
  233.     #define WM_CTLCOLORSTATIC           0x0138
  234. #endif
  235.  
  236. #ifndef GET_WM_ACTIVATE_STATE
  237.     #define GET_WM_ACTIVATE_STATE(wp, lp)           (wp)
  238.     #define GET_WM_ACTIVATE_FMINIMIZED(wp, lp)      (BOOL)HIWORD(lp)
  239.     #define GET_WM_ACTIVATE_HWND(wp, lp)            (HWND)LOWORD(lp)
  240.     #define GET_WM_ACTIVATE_MPS(s, fmin, hwnd)      (WPARAM)(s), MAKELONG(hwnd, fmin)
  241.  
  242.     #define GET_WM_CHARTOITEM_CHAR(wp, lp)          (CHAR)(wp)
  243.     #define GET_WM_CHARTOITEM_POS(wp, lp)           HIWORD(lp)
  244.     #define GET_WM_CHARTOITEM_HWND(wp, lp)          (HWND)LOWORD(lp)
  245.     #define GET_WM_CHARTOITEM_MPS(ch, pos, hwnd)    (WPARAM)(ch), MAKELONG(hwnd, pos)
  246.  
  247.     #define GET_WM_COMMAND_ID(wp, lp)               (wp)
  248.     #define GET_WM_COMMAND_HWND(wp, lp)             (HWND)LOWORD(lp)
  249.     #define GET_WM_COMMAND_CMD(wp, lp)              HIWORD(lp)
  250.     #define GET_WM_COMMAND_MPS(id, hwnd, cmd)       (WPARAM)(id), MAKELONG(hwnd, cmd)
  251.  
  252.     #define GET_WM_CTLCOLOR_HDC(wp, lp, msg)        (HDC)(wp)
  253.     #define GET_WM_CTLCOLOR_HWND(wp, lp, msg)       (HWND)LOWORD(lp)
  254.     #define GET_WM_CTLCOLOR_TYPE(wp, lp, msg)       HIWORD(lp)
  255.     #define GET_WM_CTLCOLOR_MPS(hdc, hwnd, type)    (WPARAM)(hdc), MAKELONG(hwnd, type)
  256.  
  257.     #define GET_WM_MENUSELECT_CMD(wp, lp)           (wp)
  258.     #define GET_WM_MENUSELECT_FLAGS(wp, lp)         LOWORD(lp)
  259.     #define GET_WM_MENUSELECT_HMENU(wp, lp)         (HMENU)HIWORD(lp)
  260.     #define GET_WM_MENUSELECT_MPS(cmd, f, hmenu)    (WPARAM)(cmd), MAKELONG(f, hmenu)
  261.  
  262.     // Note: the following are for interpreting MDIclient to MDI child messages.
  263.     #define GET_WM_MDIACTIVATE_FACTIVATE(hwnd, wp, lp)  (BOOL)(wp)
  264.     #define GET_WM_MDIACTIVATE_HWNDDEACT(wp, lp)        (HWND)HIWORD(lp)
  265.     #define GET_WM_MDIACTIVATE_HWNDACTIVATE(wp, lp)     (HWND)LOWORD(lp)
  266.  
  267.     // Note: the following is for sending to the MDI client window.
  268.     #define GET_WM_MDIACTIVATE_MPS(f, hwndD, hwndA) (WPARAM)(hwndA), 0
  269.  
  270.     #define GET_WM_MDISETMENU_MPS(hmenuF, hmenuW)   0, MAKELONG(hmenuF, hmenuW)
  271.  
  272.     #define GET_WM_MENUCHAR_CHAR(wp, lp)            (CHAR)(wp)
  273.     #define GET_WM_MENUCHAR_HMENU(wp, lp)           (HMENU)LOWORD(lp)
  274.     #define GET_WM_MENUCHAR_FMENU(wp, lp)           (BOOL)HIWORD(lp)
  275.     #define GET_WM_MENUCHAR_MPS(ch, hmenu, f)       (WPARAM)(ch), MAKELONG(hmenu, f)
  276.  
  277.     #define GET_WM_PARENTNOTIFY_MSG(wp, lp)         (wp)
  278.     #define GET_WM_PARENTNOTIFY_ID(wp, lp)          HIWORD(lp)
  279.     #define GET_WM_PARENTNOTIFY_HWNDCHILD(wp, lp)   (HWND)LOWORD(lp)
  280.     #define GET_WM_PARENTNOTIFY_X(wp, lp)           (INT)LOWORD(lp)
  281.     #define GET_WM_PARENTNOTIFY_Y(wp, lp)           (INT)HIWORD(lp)
  282.     #define GET_WM_PARENTNOTIFY_MPS(msg, id, hwnd)  (WPARAM)(msg), MAKELONG(hwnd, id)
  283.     #define GET_WM_PARENTNOTIFY2_MPS(msg, x, y)     (WPARAM)(msg), MAKELONG(x, y)
  284.  
  285.     #define GET_WM_VKEYTOITEM_CODE(wp, lp)          (wp)
  286.     #define GET_WM_VKEYTOITEM_ITEM(wp, lp)          (INT)HIWORD(lp)
  287.     #define GET_WM_VKEYTOITEM_HWND(wp, lp)          (HWND)LOWORD(lp)
  288.     #define GET_WM_VKEYTOITEM_MPS(code, item, hwnd) (WPARAM)(code), MAKELONG(hwnd, item)
  289.  
  290.     #define GET_EM_SETSEL_START(wp, lp)             LOWORD(lp)
  291.     #define GET_EM_SETSEL_END(wp, lp)               HIWORD(lp)
  292.     #define GET_EM_SETSEL_MPS(iStart, iEnd)         0, MAKELONG(iStart, iEnd)
  293.  
  294.     #define GET_EM_LINESCROLL_MPS(vert, horz)       0, MAKELONG(vert, horz)
  295.  
  296.     #define GET_WM_CHANGECBCHAIN_HWNDNEXT(wp, lp)   (HWND)LOWORD(lp)
  297.  
  298.     #define GET_WM_HSCROLL_CODE(wp, lp)             (wp)
  299.     #define GET_WM_HSCROLL_POS(wp, lp)              LOWORD(lp)
  300.     #define GET_WM_HSCROLL_HWND(wp, lp)             (HWND)HIWORD(lp)
  301.     #define GET_WM_HSCROLL_MPS(code, pos, hwnd)     (WPARAM)(code), MAKELONG(pos, hwnd)
  302.  
  303.     #define GET_WM_VSCROLL_CODE(wp, lp)             (wp)
  304.     #define GET_WM_VSCROLL_POS(wp, lp)              LOWORD(lp)
  305.     #define GET_WM_VSCROLL_HWND(wp, lp)             (HWND)HIWORD(lp)
  306.     #define GET_WM_VSCROLL_MPS(code, pos, hwnd)     (WPARAM)(code), MAKELONG(pos, hwnd)
  307. #endif
  308.  
  309. #endif // #ifndef WIN32
  310.  
  311.  
  312. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; 
  313. //
  314. //
  315. //
  316. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; 
  317.  
  318. #ifndef RC_INVOKED
  319. #pragma pack()                      // revert to default packing
  320. #endif
  321.  
  322. #ifdef __cplusplus
  323. }                                   // end of extern "C" { 
  324. #endif
  325.  
  326. #endif // _INC_APPPORT
  327.