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 / mixapp / appport.h next >
C/C++ Source or Header  |  1997-10-05  |  10KB  |  297 lines

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