INIT.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * INIT.C
  3.  * GizmoBar Version 1.01
  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)1993-1996 Microsoft Corporation, All Rights Reserved
  9.  *
  10.  * Kraig Brockschmidt, Software Design Engineer
  11.  * Microsoft Systems Developer Relations
  12.  *
  13.  * Internet  :  kraigb@microsoft.com
  14.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  15.  */
  16. #include <windows.h>
  17. #include "gizmoint.h"
  18. /*
  19.  * LibMain(32)
  20.  *
  21.  * Purpose:
  22.  *  Entry point conditionally compiled for Windows NT and Windows
  23.  *  3.1.  Provides the proper structure for each environment.
  24.  */
  25. #ifdef WIN32
  26. BOOL WINAPI DllMain(HINSTANCE hInstance, ULONG ulReason
  27.     , PCONTEXT pContext)
  28.     {
  29.     UNREFERENCED_PARAMETER(pContext);
  30.     if (DLL_PROCESS_ATTACH==ulReason)
  31.         return FRegisterControl(hInstance);
  32.     return TRUE;
  33.     }
  34. #else
  35. int WINAPI LibMain(HANDLE hInstance, WORD wDataSeg
  36.     , WORD cbHeapSize, LPTSTR lpCmdLine)
  37.     {
  38.      //Perform global initialization.
  39.     if (FRegisterControl(hInstance))
  40.         {
  41.         if (0!=cbHeapSize)
  42.             UnlockData(0);
  43.         }
  44.     return (int)hInstance;
  45.     }
  46. #endif
  47. /*
  48.  * FRegisterControl
  49.  *
  50.  * Purpose:
  51.  *  Registers the GizmoBar control class, including CS_GLOBALCLASS
  52.  *  to make the control available to all applications in the system.
  53.  *
  54.  * Parameters:
  55.  *  hInst           HINSTANCE of the DLL that will own this class.
  56.  *
  57.  * Return Value:
  58.  *  BOOL            TRUE if the class is registered, FALSE otherwise.
  59.  */
  60. BOOL FRegisterControl(HINSTANCE hInst)
  61.     {
  62.     static BOOL     fRegistered=FALSE;
  63.     WNDCLASS        wc;
  64.     if (!fRegistered)
  65.         {
  66.         wc.lpfnWndProc   =GizmoBarWndProc;
  67.         wc.cbClsExtra    =0;
  68.         wc.cbWndExtra    =CBWINDOWEXTRA;
  69.         wc.hInstance     =hInst;
  70.         wc.hIcon         =NULL;
  71.         wc.hCursor       =LoadCursor(NULL, IDC_ARROW);
  72.         wc.hbrBackground =(HBRUSH)(COLOR_BTNFACE+1);
  73.         wc.lpszMenuName  =NULL;
  74.         wc.lpszClassName =CLASS_GIZMOBAR;
  75.         wc.style         =CS_DBLCLKS | CS_GLOBALCLASS
  76.                           | CS_VREDRAW | CS_HREDRAW;
  77.         fRegistered=RegisterClass(&wc);
  78.         }
  79.     return fRegistered;
  80.     }
  81. /*
  82.  * GizmoBarPAllocate
  83.  *
  84.  * Purpose:
  85.  *  Allocates and initializes the control's primary data structure
  86.  *  for each window that gets created.
  87.  *
  88.  * Parameters:
  89.  *  pfSuccess       int * indicating success of the function.
  90.  *  hWnd            HWND that is tied to this structure.
  91.  *  hInst           HINSTANCE of the DLL.
  92.  *  hWndAssociate   HWND to which we send messages.
  93.  *  dwStyle         DWORD initial style.
  94.  *  uState          UINT initial state.
  95.  *  uID             UINT identifier for this window.
  96.  *
  97.  * Return Value:
  98.  *  PGIZMOBAR       If NULL returned then GizmoBarPAllocate could not
  99.  *                  allocate memory.  If a non-NULL pointer is
  100.  *                  returned with *pfSuccess, then call GizmoBarPFree
  101.  *                  immediately.  If you get a non-NULL pointer and
  102.  *                  *pfSuccess==TRUE then the function succeeded.
  103.  */
  104. PGIZMOBAR GizmoBarPAllocate(int *pfSuccess, HWND hWnd
  105.     , HINSTANCE hInst, HWND hWndAssociate, DWORD dwStyle
  106.     , UINT uState , UINT uID)
  107.     {
  108.     PGIZMOBAR     pGB;
  109.     if (NULL==pfSuccess)
  110.         return NULL;
  111.     *pfSuccess=FALSE;
  112.     //Allocate the structure
  113.     pGB=(PGIZMOBAR)(void *)LocalAlloc(LPTR, CBGIZMOBAR);
  114.     if (NULL==pGB)
  115.         return NULL;
  116.     //Initialize LibMain parameter holders.
  117.     pGB->hWnd         =hWnd;
  118.     pGB->hInst        =hInst;
  119.     pGB->hWndAssociate=hWndAssociate;
  120.     pGB->dwStyle      =dwStyle;
  121.     pGB->uState       =uState;
  122.     pGB->uID          =uID;
  123.     pGB->fEnabled     =TRUE;
  124.     pGB->crFace=GetSysColor(COLOR_BTNFACE);
  125.     pGB->hBrFace=CreateSolidBrush(pGB->crFace);
  126.     if (NULL==pGB->hBrFace)
  127.         return pGB;
  128.     pGB->hFont=GetStockObject(SYSTEM_FONT);
  129.     *pfSuccess=TRUE;
  130.     return pGB;
  131.     }
  132. /*
  133.  * GizmoBarPFree
  134.  *
  135.  * Purpose:
  136.  *  Reverses all initialization done by GizmoBarPAllocate, cleaning
  137.  *  up any allocations including the application structure itself.
  138.  *
  139.  * Parameters:
  140.  *  pGB             PGIZMOBAR to the control's structure
  141.  *
  142.  * Return Value:
  143.  *  PGIZMOBAR       NULL if successful, pGB if not, meaning we
  144.  *                  couldn't free some allocation.
  145.  */
  146. PGIZMOBAR GizmoBarPFree(PGIZMOBAR pGB)
  147.     {
  148.     if (NULL==pGB)
  149.         return NULL;
  150.     /*
  151.      * Free all the gizmos we own.  When we call GizmoPFree we always
  152.      * free the first one in the list which updates pGB->pGizmos for
  153.      * us, so we just have to keep going until pGizmos is NULL,
  154.      * meaning we're at the end of the list.
  155.      */
  156.     while (NULL!=pGB->pGizmos)
  157.         GizmoPFree(&pGB->pGizmos, pGB->pGizmos);
  158.     if (NULL!=pGB->hBrFace)
  159.         DeleteObject(pGB->hBrFace);
  160.     /*
  161.      * Notice that since we never create a font, we aren't
  162.      * responsible for our hFont member.
  163.      */
  164.     return (PGIZMOBAR)(void *)LocalFree((HLOCAL)(UINT)(LONG)pGB);
  165.     }