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

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * CURSORS.C
  3.  * Buttons & Cursors Version 1.1, March 1993
  4.  *
  5.  * Public functions to retrieve new cursors from the BTTNCUR DLL based
  6.  * on ordinal to prevent applications from necessarily calling LoadCursor
  7.  * directly on the DLL.
  8.  *
  9.  * Copyright (c)1992-1996 Microsoft Corporation, All Rights Reserved,
  10.  * as applied to redistribution of this source code in source form
  11.  * License is granted to use of compiled code in shipped binaries.
  12.  */
  13. #define STRICT
  14. #include <windows.h>
  15. #include "bttncur.h"
  16. #include "bttncuri.h"
  17. /*
  18.  * The +1 is because MAX is the highest allowable number and MIN is not
  19.  * necessarily zero.
  20.  */
  21. HCURSOR rgHCursors[IDC_NEWUICURSORMAX-IDC_NEWUICURSORMIN+1];
  22. /*
  23.  * CursorsCache
  24.  * Internal
  25.  *
  26.  * Purpose:
  27.  *  Loads all the cursors available through NewUICursorLoad into
  28.  *  a global array.  This way we can clean up all the cursors without
  29.  *  placing the burden on the application.
  30.  *
  31.  * Parameters:
  32.  *  hInst           HANDLE of the DLL instance.
  33.  *
  34.  * Return Value:
  35.  *  None.  If any of the LoadCursor calls fail, then the corresponding
  36.  *  array entry is NULL and NewUICursorLoad will fail.  Better to fail
  37.  *  an app getting a cursor than failing to load the app just for that
  38.  *  reason; and app can attempt to load the cursor on startup if it's
  39.  *  that important, and fail itself.
  40.  */
  41. void CursorsCache(HINSTANCE hInst)
  42.         {
  43.         UINT            i;
  44.         for (i=IDC_NEWUICURSORMIN; i<=IDC_NEWUICURSORMAX; i++)
  45.                 rgHCursors[i-IDC_NEWUICURSORMIN]=LoadCursor(hInst, MAKEINTRESOURCE(i));
  46.         return;
  47.         }
  48. /*
  49.  * CursorsFree
  50.  * Internal
  51.  *
  52.  * Purpose:
  53.  *  Frees all the cursors previously loaded through CursorsCache.
  54.  *
  55.  * Parameters:
  56.  *  None
  57.  *
  58.  * Return Value:
  59.  *  None
  60.  */
  61. void CursorsFree(void)
  62.         {
  63.         /*
  64.          * Note that since cursors are discardable resources and should
  65.          * not be used with DestroyCursor, there's nothing to do here.
  66.          * We still provide this API for compatibility and to maintain
  67.          * symmetry.
  68.          */
  69.         return;
  70.         }
  71. /*
  72.  * UICursorLoad
  73.  * Public API
  74.  *
  75.  * Purpose:
  76.  *  Loads and returns a handle to one of the new standard UI cursors
  77.  *  contained in UITOOLS.DLL.  The application must not call DestroyCursor
  78.  *  on this cursor as it is managed by the DLL.
  79.  *
  80.  * Parameters:
  81.  *  iCursor         UINT index to the cursor to load which must be one
  82.  *                  of the following values:
  83.  *
  84.  *                      IDC_RIGHTARROW    Right pointing standard arrow
  85.  *                      IDC_CONTEXTHELP   Arrow with a ? (context help)
  86.  *                      IDC_MAGNIFY       Magnifying glass for zooming
  87.  *                      IDC_NODROP        Circle with a slash
  88.  *                      IDC_TABLETOP      Small arrow pointing down
  89.  *
  90.  *                      IDC_SMALLARROWS   Thin four-headed arrow
  91.  *                      IDC_LARGEARROWS   Wide four-headed arrow
  92.  *                      IDC_HARROWS       Horizontal two-headed arrow
  93.  *                      IDC_VARROWS       Vertical two-headed arrow
  94.  *                      IDC_NESWARROWS    Two-headed arrow pointing NE<->SW
  95.  *                      IDC_NWSEHARROWS   Two-headed arrow pointing NW<->SE
  96.  *
  97.  *                      IDC_HSIZEBAR      Horizontal two-headed arrow with
  98.  *                                        a single vertical bar down the
  99.  *                                        middle
  100.  *
  101.  *                      IDC_VSIZEBAR      Vertical two-headed arrow with a
  102.  *                                        single horizontal bar down the
  103.  *                                        middle
  104.  *
  105.  *                      IDC_HSPLITBAR     Horizontal two-headed arrow with
  106.  *                                        split double vertical bars down the
  107.  *                                        middle
  108.  *
  109.  *                      IDC_VSPLITBAR     Vertical two-headed arrow with split
  110.  *                                        double horizontal bars down the
  111.  *                                        middle
  112.  *
  113.  * Return Value:
  114.  *  HCURSOR         Handle to the loaded cursor if successful, NULL
  115.  *                  if iCursor is out of range or the function could not
  116.  *                  load the cursor.
  117.  */
  118. HCURSOR WINAPI UICursorLoad(UINT iCursor)
  119.         {
  120.         HCURSOR     hCur=NULL;
  121.         if ((iCursor >= IDC_NEWUICURSORMIN) && (iCursor <= IDC_NEWUICURSORMAX))
  122.                 hCur=rgHCursors[iCursor-IDC_NEWUICURSORMIN];
  123.         return hCur;
  124.         }