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

Windows编程

开发平台:

Visual C++

  1. /*
  2. ==============================================================================
  3.   Application:
  4.             Microsoft Windows NT (TM) Performance Monitor
  5.   File:
  6.             utils.c -- miscellaneous utility routines.  
  7.             This file contains miscellaneous utiltity routines, mostly 
  8.             low-level windows helpers. These routines are not specific
  9.             to the perfmon utillity.
  10.   Copyright 1992-1997, Microsoft Corporation. All Rights Reserved.
  11.   Microsoft Confidential.
  12. ==============================================================================
  13. */
  14. //==========================================================================//
  15. //                                  Includes                                //
  16. //==========================================================================//
  17. #include <stdarg.h>  // For ANSI variable args. Dont use UNIX <varargs.h>
  18. #include <stdlib.h>  // For itoa
  19. #include <stdio.h>   // for vsprintf.
  20. #include <string.h>  // for strtok
  21. #include <wchar.h>   // for swscanf
  22. #include "perfmon.h"
  23. #include "pmemory.h"        // for MemoryXXX (mallloc-type) routines
  24. #include "utils.h"
  25. #include "pmhelpid.h"       // IDs for WinHelp
  26. #include "perfmops.h"       // for ConvertDecimalPoint() & ReconvertDecimalPoint()
  27. #include "sizes.h"
  28. //==========================================================================//
  29. //                                  Constants                               //
  30. //==========================================================================//
  31. #define DOS_FILES                0x0000   // Ordinary files
  32. #define DOS_READONLY             0x0001   // Read-only files
  33. #define DOS_HIDDEN               0x0002   // Hidden files
  34. #define DOS_SYSTEM               0x0004   // System files
  35. #define DOS_SUBDIRECTORIES       0x0010   // Subdirectories
  36. #define DOS_ARCHIVES             0x0020   // Archives
  37. #define DOS_LIB_DIR              0x2000   // LB_DIR flag
  38. #define DOS_DRIVES               0x4000   // Drives
  39. #define DOS_EXCLUSIVE            0x8000   // Exclusive bit
  40. #define DOS_DRIVES_DIRECTORIES   0xC010   // Find drives and directories only
  41. #define WILD_ONE                 '?'
  42. #define WILD_ANY                 '*'
  43. //==========================================================================//
  44. //                              Local Functions                             //
  45. //==========================================================================//
  46. void ClientRectToScreen (HWND hWnd,
  47.                          LPRECT lpRect)
  48. /*
  49.    Effect:        Remaps lpRect from client coordinates to screen
  50.                   coordinates. Analogous to ClientToScreen for rectangles.
  51.    Note:          To convert a rectangle from the client coordinates of
  52.                   Wnd1 to the client coordinates of Wnd2, call:
  53.                         ClientRectToScreen (hWnd1, &rect) ;
  54.                         ScreenRectToClient (hWnd2, &rect) ;
  55.    See Also:      ClientToScreen (windows), ScreenRectToClient.
  56.    Internals:     Since a rectangle is really only two points, let
  57.                   windows do the work with ClientToScreen.
  58. */
  59.    {  /* ClientRectToScreen */
  60.    POINT    pt1, pt2 ;
  61.    pt1.x = lpRect->left ;
  62.    pt1.y = lpRect->top ;
  63.    pt2.x = lpRect->right ;
  64.    pt2.y = lpRect->bottom ;
  65.    ClientToScreen (hWnd, &pt1) ;
  66.    ClientToScreen (hWnd, &pt2) ;
  67.    lpRect->left = pt1.x ;
  68.    lpRect->top = pt1.y ;
  69.    lpRect->right = pt2.x ;
  70.    lpRect->bottom = pt2.y ;
  71.    }  // ClientRectToScreen
  72. void ScreenRectToClient (HWND hWnd, LPRECT lpRect)
  73. /*
  74.    Effect:        Remaps lpRect from screen coordinates to client
  75.                   coordinates. Analogous to ScreenToClient for rectangles.
  76.    Note:          To convert a rectangle from the client coordinates of
  77.                   Wnd1 to the client coordinates of Wnd2, call:
  78.                         ClientRectToScreen (hWnd1, &rect) ;
  79.                         ScreenRectToClient (hWnd2, &rect) ;
  80.    See Also:      ScreenToClient (windows), ClientRectToScreen.
  81.    Internals:     Since a rectangle is really only two points, let
  82.                   windows do the work with ScreenToClient.
  83. */
  84.    {  // ScreenRectToClient
  85.    POINT    pt1, pt2 ;
  86.    pt1.x = lpRect->left ;
  87.    pt1.y = lpRect->top ;
  88.    pt2.x = lpRect->right ;
  89.    pt2.y = lpRect->bottom ;
  90.    ScreenToClient (hWnd, &pt1) ;
  91.    ScreenToClient (hWnd, &pt2) ;
  92.    lpRect->left = pt1.x ;
  93.    lpRect->top = pt1.y ;
  94.    lpRect->right = pt2.x ;
  95.    lpRect->bottom = pt2.y ;
  96.    }  // ScreenRectToClient
  97. //==========================================================================//
  98. //                             Exported Functions                           //
  99. //==========================================================================//
  100. void Line (HDC hDC,
  101.            HPEN hPen,
  102.            int x1, int y1,
  103.            int x2, int y2)
  104.    {  // Line
  105.    HPEN           hPenPrevious ;
  106.    if (hPen)
  107.       hPenPrevious = SelectPen (hDC, hPen) ;
  108.    MoveToEx (hDC, x1, y1, NULL) ;
  109.    LineTo (hDC, x2, y2) ;
  110.    if (hPen)
  111.       SelectObject (hDC, hPenPrevious) ;
  112.    }  // Line
  113. #if 0
  114. void HLine (HDC hDC,
  115.             HPEN hPen,
  116.             int x1, 
  117.             int x2, 
  118.             int y)
  119.    {  // HLine
  120.    Line (hDC, hPen, x1, y, x2, y) ;
  121.    }
  122. void VLine (HDC hDC,
  123.             HPEN hPen,
  124.             int x,
  125.             int y1,
  126.             int y2)
  127.    {  // VLine
  128.    Line (hDC, hPen, x, y1, x, y2) ;
  129.    }  // VLine
  130. #endif
  131. #ifdef  KEEP_UTIL
  132. void Fill (HDC hDC,
  133.            DWORD rgbColor,
  134.            LPRECT lpRect)
  135.    {  // Fill
  136.    HBRUSH         hBrush ;
  137.    hBrush = CreateSolidBrush (rgbColor) ;
  138.    FillRect (hDC, lpRect, hBrush) ;
  139.    DeleteBrush (hBrush) ;
  140.    }  // Fill
  141. void ThreeDConvex (HDC hDC,
  142.                int x1, int y1, 
  143.                int x2, int y2)
  144.    {  // ThreeDConvex
  145.    HBRUSH         hBrushPrevious ;
  146.    POINT          aPoints [8] ;
  147.    DWORD          aCounts [2] ;
  148.    HPEN           hPenPrevious ;
  149.    //谀哪哪哪哪哪哪哪哪哪哪哪哪哪目
  150.    //