Annotation of mstools/ole20/samples/gizmobar/init.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * INIT.C
                      3:  * GizmoBar Version 1.00, March 1993
                      4:  *
                      5:  * LibMain entry point and initialization code for the GizmoBar
                      6:  * DLL that is likely to be used once or very infrequently.
                      7:  *
                      8:  * Copyright (c)1992 Microsoft Corporation, All Rights Reserved
                      9:  *
                     10:  * Kraig Brockschmidt, Software Design Engineer
                     11:  * Microsoft Systems Developer Relations
                     12:  *
                     13:  * Internet  :  [email protected]
                     14:  * Compuserve:  >INTERNET:[email protected]
                     15:  */
                     16: 
                     17: #ifdef WIN32
                     18: #define _INC_OLE
                     19: #define __RPC_H__
                     20: #endif
                     21: 
                     22: 
                     23: #define STRICT
                     24: #include <windows.h>
                     25: #include "gizmoint.h"
                     26: 
                     27: 
                     28: 
                     29: /*
                     30:  * LibMain
                     31:  *
                     32:  * Purpose:
                     33:  *  DLL-specific entry point called from LibEntry.  Initializes
                     34:  *  the DLL's heap and registers the GizmoBar GizmoBar.
                     35:  *
                     36:  * Parameters:
                     37:  *  hInst           HINSTANCE instance of the DLL.
                     38:  *  wDataSeg        WORD segment selector of the DLL's data segment.
                     39:  *  wHeapSize       WORD byte count of the heap.
                     40:  *  lpCmdLine       LPSTR to command line used to start the module.
                     41:  *
                     42:  * Return Value:
                     43:  *  HANDLE          Instance handle of the DLL.
                     44:  *
                     45:  */
                     46: #ifdef WIN32
                     47: 
                     48: extern  BOOL WINAPI _CRT_INIT(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved);
                     49: extern  _cexit(void);
                     50: void FAR PASCAL WEP(int);
                     51:                                       
                     52: extern  BOOL __stdcall LibMain
                     53: (                       
                     54:     HINSTANCE hInstance,                    
                     55:     ULONG        Reason,                    
                     56:     PCONTEXT  Context                 
                     57: )
                     58: {
                     59:     OutputDebugString("gizmobar LibMain: gizmobar.dll loaded\r\n");
                     60: 
                     61:     UNREFERENCED_PARAMETER(Context);
                     62: 
                     63:     if (Reason == DLL_PROCESS_DETACH) {
                     64: 
                     65:         _cexit(); // BUGBUG32  replace with call to CRT_INIT when it's fixed
                     66: 
                     67:         WEP(0);
                     68:         return TRUE;
                     69:     }
                     70:     else if (Reason != DLL_PROCESS_ATTACH)
                     71:         return TRUE;
                     72: 
                     73:     if (!_CRT_INIT(hInstance,Reason,NULL))
                     74:          return FALSE;
                     75: 
                     76:         return FRegisterControl(hInstance);
                     77: 
                     78: }
                     79: 
                     80: #else
                     81: 
                     82: HANDLE FAR PASCAL LibMain(HINSTANCE hInst, WORD wDataSeg
                     83:     , WORD cbHeapSize, LPSTR lpCmdLine)
                     84:     {
                     85:     //Go register the control
                     86:     if (FRegisterControl(hInst))
                     87:         {
                     88:         if (0!=cbHeapSize)
                     89:             UnlockData(0);
                     90: 
                     91:         return hInst;
                     92:         }
                     93: 
                     94:     return (HANDLE)NULL;
                     95:     }
                     96: 
                     97: 
                     98: #endif
                     99: 
                    100: 
                    101: /*
                    102:  * WEP
                    103:  *
                    104:  * Purpose:
                    105:  *  Required DLL Exit function.  Does nothing.
                    106:  *
                    107:  * Parameters:
                    108:  *  bSystemExit     BOOL indicating if the system is being shut
                    109:  *                  down or the DLL has just been unloaded.
                    110:  *
                    111:  * Return Value:
                    112:  *  void
                    113:  *
                    114:  */
                    115: 
                    116: void FAR PASCAL WEP(int bSystemExit)
                    117:     {
                    118:     return;
                    119:     }
                    120: 
                    121: 
                    122: 
                    123: 
                    124: 
                    125: 
                    126: /*
                    127:  * FRegisterControl
                    128:  *
                    129:  * Purpose:
                    130:  *  Registers the GizmoBar control class, including CS_GLOBALCLASS
                    131:  *  to make the control available to all applications in the system.
                    132:  *
                    133:  * Parameters:
                    134:  *  hInst           HINSTANCE of the DLL that will own this class.
                    135:  *
                    136:  * Return Value:
                    137:  *  BOOL            TRUE if the class is registered, FALSE otherwise.
                    138:  */
                    139: 
                    140: BOOL FRegisterControl(HINSTANCE hInst)
                    141:     {
                    142:     static BOOL     fRegistered=FALSE;
                    143:     WNDCLASS        wc;
                    144: 
                    145:     if (!fRegistered)
                    146:         {
                    147:         wc.lpfnWndProc   =GizmoBarWndProc;
                    148:         wc.cbClsExtra    =0;
                    149:         wc.cbWndExtra    =CBWINDOWEXTRA;
                    150:         wc.hInstance     =hInst;
                    151:         wc.hIcon         =NULL;
                    152:         wc.hCursor       =LoadCursor(NULL, IDC_ARROW);
                    153:         wc.hbrBackground =(HBRUSH)(COLOR_BTNFACE+1);
                    154:         wc.lpszMenuName  =NULL;
                    155:         wc.lpszClassName =CLASS_GIZMOBAR;
                    156:         wc.style         =CS_DBLCLKS | CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW;
                    157: 
                    158:         fRegistered=RegisterClass(&wc);
                    159:         }
                    160: 
                    161:     return fRegistered;
                    162:     }
                    163: 
                    164: 
                    165: 
                    166: 
                    167: 
                    168: 
                    169: /*
                    170:  * GizmoBarPAllocate
                    171:  *
                    172:  * Purpose:
                    173:  *  Allocates and initializes the control's primary data structure for
                    174:  *  each window that gets created.
                    175:  *
                    176:  * Parameters:
                    177:  *  pfSuccess       LPINT indicating success of the function.
                    178:  *  hWnd            HWND that is tied to this structure.
                    179:  *  hInst           HINSTANCE of the DLL.
                    180:  *  hWndAssociate   HWND to which we send messages.
                    181:  *  dwStyle         DWORD initial style.
                    182:  *  uState          UINT initial state.
                    183:  *
                    184:  *
                    185:  * Return Value:
                    186:  *  PGIZMOBAR       If NULL returned then GizmoBarPAllocate could not allocate
                    187:  *                  memory.  If a non-NULL pointer is returned with
                    188:  *                  *pfSuccess, then call GizmoBarPFree immediately.  If you
                    189:  *                  get a non-NULL pointer and *pfSuccess==TRUE then the
                    190:  *                  function succeeded.
                    191:  */
                    192: 
                    193: PGIZMOBAR GizmoBarPAllocate(LPINT pfSuccess, HWND hWnd, HINSTANCE hInst
                    194:     , HWND hWndAssociate, DWORD dwStyle, UINT uState)
                    195:     {
                    196:     PGIZMOBAR     pGB;
                    197: 
                    198:     if (NULL==pfSuccess)
                    199:         return NULL;
                    200: 
                    201:     *pfSuccess=FALSE;
                    202: 
                    203:     //Allocate the structure
                    204:     pGB=(PGIZMOBAR)(char *)LocalAlloc(LPTR, CBGIZMOBAR);
                    205: 
                    206:     if (NULL==pGB)
                    207:         return NULL;
                    208: 
                    209:     //Initialize LibMain parameter holders.
                    210:     pGB->hWnd         =hWnd;
                    211:     pGB->hInst        =hInst;
                    212:     pGB->hWndAssociate=hWndAssociate;
                    213:     pGB->dwStyle      =dwStyle;
                    214:     pGB->uState       =uState;
                    215:     pGB->fEnabled     =TRUE;
                    216: 
                    217:     pGB->crFace=GetSysColor(COLOR_BTNFACE);
                    218:     pGB->hBrFace=CreateSolidBrush(pGB->crFace);
                    219: 
                    220:     if (NULL==pGB->hBrFace)
                    221:         return pGB;
                    222: 
                    223:     pGB->hFont=GetStockObject(SYSTEM_FONT);
                    224: 
                    225:     *pfSuccess=TRUE;
                    226:     return pGB;
                    227:     }
                    228: 
                    229: 
                    230: 
                    231: 
                    232: /*
                    233:  * GizmoBarPFree
                    234:  *
                    235:  * Purpose:
                    236:  *  Reverses all initialization done by GizmoBarPAllocate, cleaning up
                    237:  *  any allocations including the application structure itself.
                    238:  *
                    239:  * Parameters:
                    240:  *  pGB           PGIZMOBAR to the control's structure
                    241:  *
                    242:  * Return Value:
                    243:  *  PGIZMOBAR       NULL if successful, pGB if not, meaning we couldn't
                    244:  *                  free some allocation.
                    245:  */
                    246: 
                    247: PGIZMOBAR GizmoBarPFree(PGIZMOBAR pGB)
                    248:     {
                    249:     if (NULL==pGB)
                    250:         return NULL;
                    251: 
                    252:     /*
                    253:      * Free all the gizmos we own.  When we call GizmoPFree we always
                    254:      * free the first one in the list which updates pGB->pGizmos for
                    255:      * us, so we just have to keep going until pGizmos is NULL, meaning
                    256:      * we're at the end of the list.
                    257:      */
                    258:     while (NULL!=pGB->pGizmos)
                    259:         GizmoPFree(&pGB->pGizmos, pGB->pGizmos);
                    260: 
                    261:     if (NULL!=pGB->hBrFace)
                    262:         DeleteObject(pGB->hBrFace);
                    263: 
                    264:     /*
                    265:      * Notice that since we never create a font, we aren't responsible
                    266:      * for our hFont member.
                    267:      */
                    268: 
                    269:     return (PGIZMOBAR)LocalFree((HLOCAL)(UINT)(LONG)pGB);
                    270:     }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.