/* * INIT.C * GizmoBar Version 1.00, Win32 version August 1993 * * LibMain entry point and initialization code for the GizmoBar * DLL that is likely to be used once or very infrequently. * * Copyright (c)1993 Microsoft Corporation, All Rights Reserved * * Kraig Brockschmidt, Software Design Engineer * Microsoft Systems Developer Relations * * Internet : kraigb@microsoft.com * Compuserve: >INTERNET:kraigb@microsoft.com */ #include #include "gizmoint.h" /* * LibMain * * Purpose: * Entry point conditionally compiled for Windows NT and Windows * 3.1. Provides the proper structure for each environment * and calls InternalLibMain for real initialization. */ #ifdef WIN32 BOOL _cdecl LibMain( HINSTANCE hDll, DWORD dwReason, LPVOID lpvReserved) { if (DLL_PROCESS_ATTACH == dwReason) { return FRegisterControl(hDll); } else { return TRUE; } } #else HANDLE FAR PASCAL LibMain(HANDLE hInstance, WORD wDataSeg , WORD cbHeapSize, LPSTR lpCmdLine) { //Perform global initialization. if (FRegisterControl(hInstance)) { if (0!=cbHeapSize) UnlockData(0); } return hInstance; } #endif /* * WEP * * Purpose: * Required DLL Exit function. Does nothing. * * Parameters: * bSystemExit BOOL indicating if the system is being shut * down or the DLL has just been unloaded. * * Return Value: * void * */ void FAR PASCAL WEP(int bSystemExit) { return; } /* * FRegisterControl * * Purpose: * Registers the GizmoBar control class, including CS_GLOBALCLASS * to make the control available to all applications in the system. * * Parameters: * hInst HINSTANCE of the DLL that will own this class. * * Return Value: * BOOL TRUE if the class is registered, FALSE otherwise. */ BOOL FRegisterControl(HINSTANCE hInst) { static BOOL fRegistered=FALSE; WNDCLASS wc; if (!fRegistered) { wc.lpfnWndProc =GizmoBarWndProc; wc.cbClsExtra =0; wc.cbWndExtra =CBWINDOWEXTRA; wc.hInstance =hInst; wc.hIcon =NULL; wc.hCursor =LoadCursor(NULL, IDC_ARROW); wc.hbrBackground =(HBRUSH)(COLOR_BTNFACE+1); wc.lpszMenuName =NULL; wc.lpszClassName =CLASS_GIZMOBAR; wc.style =CS_DBLCLKS | CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW; fRegistered=RegisterClass(&wc); } return fRegistered; } /* * GizmoBarPAllocate * * Purpose: * Allocates and initializes the control's primary data structure for * each window that gets created. * * Parameters: * pfSuccess LPINT indicating success of the function. * hWnd HWND that is tied to this structure. * hInst HINSTANCE of the DLL. * hWndAssociate HWND to which we send messages. * dwStyle DWORD initial style. * uState UINT initial state. * uID UINT identifier for this window. * * Return Value: * LPGIZMOBAR If NULL returned then GizmoBarPAllocate could not allocate * memory. If a non-NULL pointer is returned with * *pfSuccess, then call GizmoBarPFree immediately. If you * get a non-NULL pointer and *pfSuccess==TRUE then the * function succeeded. */ LPGIZMOBAR GizmoBarPAllocate(LPINT pfSuccess, HWND hWnd, HINSTANCE hInst , HWND hWndAssociate, DWORD dwStyle, UINT uState, UINT uID) { LPGIZMOBAR pGB; if (NULL==pfSuccess) return NULL; *pfSuccess=FALSE; //Allocate the structure pGB=(LPGIZMOBAR)(void *)LocalAlloc(LPTR, CBGIZMOBAR); if (NULL==pGB) return NULL; //Initialize LibMain parameter holders. pGB->hWnd =hWnd; pGB->hInst =hInst; pGB->hWndAssociate=hWndAssociate; pGB->dwStyle =dwStyle; pGB->uState =uState; pGB->uID =uID; pGB->fEnabled =TRUE; pGB->crFace=GetSysColor(COLOR_BTNFACE); pGB->hBrFace=CreateSolidBrush(pGB->crFace); if (NULL==pGB->hBrFace) return pGB; pGB->hFont=GetStockObject(SYSTEM_FONT); *pfSuccess=TRUE; return pGB; } /* * GizmoBarPFree * * Purpose: * Reverses all initialization done by GizmoBarPAllocate, cleaning up * any allocations including the application structure itself. * * Parameters: * pGB LPGIZMOBAR to the control's structure * * Return Value: * LPGIZMOBAR NULL if successful, pGB if not, meaning we couldn't * free some allocation. */ LPGIZMOBAR GizmoBarPFree(LPGIZMOBAR pGB) { if (NULL==pGB) return NULL; /* * Free all the gizmos we own. When we call GizmoPFree we always * free the first one in the list which updates pGB->pGizmos for * us, so we just have to keep going until pGizmos is NULL, meaning * we're at the end of the list. */ while (NULL!=pGB->pGizmos) GizmoPFree(&pGB->pGizmos, pGB->pGizmos); if (NULL!=pGB->hBrFace) DeleteObject(pGB->hBrFace); /* * Notice that since we never create a font, we aren't responsible * for our hFont member. */ return (LPGIZMOBAR)(void *)LocalFree((HLOCAL)(void *)(LONG)pGB); }