home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / inole2 / inole / gizmoint.h < prev    next >
C/C++ Source or Header  |  1995-05-03  |  5KB  |  172 lines

  1. /*
  2.  * GIZMOINT.H
  3.  * Gizmobar Internals
  4.  *
  5.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  6.  *
  7.  * Kraig Brockschmidt, Microsoft
  8.  * Internet  :  kraigb@microsoft.com
  9.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  10.  */
  11.  
  12.  
  13. #ifndef _GIZMOINT_H_
  14. #define _GIZMOINT_H_
  15.  
  16. #ifdef __cplusplus
  17. extern "C"
  18.     {
  19. #endif
  20.  
  21.  
  22. typedef struct tagGIZMO
  23.     {
  24.     struct tagGIZMO     *pPrev;
  25.     struct tagGIZMO     *pNext;
  26.     UINT                 iType;
  27.     HWND                 hWnd;       //Texts, edits, lists, combos
  28.     UINT                 uID;
  29.     UINT                 x, y;
  30.     UINT                 dx, dy;
  31.     UINT                 cxImage;    //From UIToolConfigureForDisplay
  32.     UINT                 cyImage;
  33.     HBITMAP              hBmp;       //Buttons only.
  34.     UINT                 iBmp;
  35.     BOOL                 fNotify;    //Send WM_COMMANDs?
  36.     BOOL                 fHidden;    //Independent of state
  37.     BOOL                 fDisabled;
  38.     UINT                 uState;
  39.     UINT                 uStateOrg;
  40.     DWORD                dwData;     //Application-supplied data.
  41.     } GIZMO, * PGIZMO;
  42.  
  43. typedef PGIZMO *PPGIZMO;
  44. #define CBGIZMO sizeof(GIZMO)
  45.  
  46. //Property name we attach to controls in a gizmo to identify type
  47. #define SZTYPEPROP      TEXT("iType")
  48.  
  49. //Number of controls we subclass
  50. #define CSUBGIZMOS       4
  51.  
  52. //ID of edit controls in comboboxes
  53. #define ID_COMBOEDIT     1001
  54.  
  55.  
  56. /*
  57.  * Conversion of iType (a positioned bit) into its position.
  58.  * The BITPOSITION macro does not need to be fast because we only
  59.  * use it once when creating a gizmo.  POSITIONBIT does, however,
  60.  * since we use it in subclass procedures.
  61.  */
  62. #define BITPOSITION(i, j)  {int k=i; for (j=0; k>>=1; j++);}
  63. #define POSITIONBIT(i)     (1 << i)
  64.  
  65. //Control classifications.  GIZMOBAR.H must be included first.
  66. #define GIZMOTYPE_WINDOWS   (GIZMOTYPE_TEXT | GIZMOTYPE_EDIT \
  67.                             | GIZMOTYPE_LISTBOX              \
  68.                             | GIZMOTYPE_COMBOBOX             \
  69.                             | GIZMOTYPE_BUTTONNORMAL)
  70.  
  71. #define GIZMOTYPE_BUTTONS   (GIZMOTYPE_BUTTONATTRIBUTEIN     \
  72.                             | GIZMOTYPE_BUTTONATTRIBUTEEX    \
  73.                             | GIZMOTYPE_BUTTONCOMMAND        \
  74.                             | GIZMOTYPE_BUTTONNORMAL)
  75.  
  76. #define GIZMOTYPE_DRAWN     (GIZMOTYPE_BUTTONATTRIBUTEIN     \
  77.                             | GIZMOTYPE_BUTTONATTRIBUTEEX    \
  78.                             | GIZMOTYPE_BUTTONCOMMAND)
  79.  
  80.  
  81. //These must stay in sync with GIZMOBAR.H
  82. #define GIZMOTYPE_MIN               GIZMOTYPE_EDIT
  83. #define GIZMOTYPE_MAX               GIZMOTYPE_BUTTONCOMMAND
  84.  
  85.  
  86. //Enumeration callback
  87. typedef BOOL (CALLBACK *PFNGIZMOENUM)(PGIZMO, UINT, DWORD);
  88.  
  89.  
  90. //GIZMO.C
  91. PGIZMO   GizmoPAllocate(int *, PPGIZMO, HWND, UINT, UINT, UINT
  92.              , UINT, UINT, LPTSTR, HBITMAP, UINT, UINT);
  93. void     GizmosExpand(PGIZMO);
  94. PGIZMO   GizmoPFree(PPGIZMO, PGIZMO);
  95. void     GizmosCompact(PGIZMO);
  96. PGIZMO   GizmoPFind(PPGIZMO, UINT);
  97. PGIZMO   GizmoPEnum(PPGIZMO, PFNGIZMOENUM, DWORD);
  98. UINT     GizmoPStateSet(HWND, PGIZMO, UINT);
  99. BOOL     GizmoPCheck(HWND, PGIZMO, BOOL);
  100.  
  101.  
  102. LRESULT APIENTRY GenericSubProc(HWND, UINT, WPARAM, LPARAM);
  103.  
  104.  
  105.  
  106. /*
  107.  * The main gizmobar structure itself.  There's only one of these,
  108.  * but it references the first GIZMO in the list.
  109.  */
  110.  
  111. typedef struct tagGIZMOBAR
  112.     {
  113.     PGIZMO      pGizmos;            //List of gizmos we own.
  114.     HWND        hWnd;               //Window handle of ourselves.
  115.     HINSTANCE   hInst;
  116.     HWND        hWndAssociate;      //Associate who gets messages.
  117.     DWORD       dwStyle;            //Copy of GWL_STYLE
  118.     UINT        uState;             //State flags
  119.     UINT        uID;                //Control ID.
  120.  
  121.     HBRUSH      hBrFace;            //Static control background color
  122.     COLORREF    crFace;             //Color of hBrFace
  123.     HFONT       hFont;              //Font in use
  124.     BOOL        fEnabled;           //Are we enabled?
  125.  
  126.     PGIZMO      pGizmoTrack;        //Current pressed button.
  127.     BOOL        fTracking;
  128.     BOOL        fMouseOut;
  129.     } GIZMOBAR, * PGIZMOBAR;
  130.  
  131. #define CBGIZMOBAR sizeof(GIZMOBAR)
  132.  
  133.  
  134. //Extra bytes for the window if the size of a local handle.
  135. #define CBEXTRAGIZMOBAR     sizeof(PGIZMOBAR)
  136.  
  137. #define GBWL_STRUCTURE      0
  138.  
  139.  
  140. //Structure for passing paint info to a gizmo enumeration callback.
  141. typedef struct
  142.     {
  143.     PAINTSTRUCT         ps;
  144.     TOOLDISPLAYDATA     tdd;
  145.     } PAINTGIZMO, *PPAINTGIZMO;
  146.  
  147.  
  148.  
  149.  
  150. //GIZMOBAR.C
  151. PGIZMOBAR         GizmoBarPAllocate(int *, HWND, HINSTANCE, HWND
  152.                       , DWORD, UINT, UINT);
  153. PGIZMOBAR         GizmoBarPFree(PGIZMOBAR);
  154. LRESULT WINAPI    GizmoBarWndProc(HWND, UINT, WPARAM, LPARAM);
  155. BOOL    WINAPI    FEnumChangeFont(PGIZMO, UINT, DWORD);
  156. BOOL    WINAPI    FEnumEnable(PGIZMO, UINT, DWORD);
  157. BOOL    WINAPI    FEnumHitTest(PGIZMO, UINT, DWORD);
  158. void              GizmoBarPaint(HWND, PGIZMOBAR);
  159. BOOL WINAPI       FEnumPaintGizmos(PGIZMO, UINT, DWORD);
  160.  
  161.  
  162. //GIZMOAPI.C  See GIZMOBAR.H for others
  163. LRESULT    GBMessageHandler(HWND, UINT, WPARAM, LPARAM, PGIZMOBAR);
  164. PGIZMO     PGizmoFromHwndID(HWND, UINT);
  165.  
  166. #ifdef __cplusplus
  167.     }
  168. #endif
  169.  
  170.  
  171. #endif //_GIZMOINT_H_
  172.