Annotation of mstools/samples/sdktools/perfmon/graph.c, revision 1.1

1.1     ! root        1: /*****************************************************************************
        !             2:  *
        !             3:  *  Graph.c - This module handles the graphing window.
        !             4:  *
        !             5:  *  Microsoft Confidential
        !             6:  *  Copyright (c) 1992-1993 Microsoft Corporation
        !             7:  *
        !             8:  *
        !             9:  ****************************************************************************/
        !            10: 
        !            11: /*
        !            12:    File Contents:
        !            13: 
        !            14:       This file contains the code for creating and manipulating the graph
        !            15:       window. This window is a child of hWndMain and represents one of the
        !            16:       three "views" of the program. The other views are log and alert.
        !            17: 
        !            18:       The graph window is actually just a container window, whose surface
        !            19:       is completely filled by its children: hWndGraphDisplay, ,
        !            20:       hWndGraphLegend, and hWndGraphStatus. Therefore much of this file is
        !            21:       merely calls to the appropriate functions for these children.
        !            22: 
        !            23:       The graph window is responsible for the graph structure itself, 
        !            24:       however. Conceptually this should be instance data for the graph
        !            25:       window. Right now, however, there is only one window and only one
        !            26:       graph structure. Nevertheless, we go through the GraphData(hWnd)
        !            27:       function to get a pointer to the graph structure for the graph window.
        !            28:       
        !            29: */
        !            30: 
        !            31: 
        !            32: //==========================================================================//
        !            33: //                                  Includes                                //
        !            34: //==========================================================================//
        !            35: 
        !            36: 
        !            37: #include "perfmon.h"
        !            38: #include "graph.h"
        !            39: #include "grafdisp.h"
        !            40: #include "legend.h"
        !            41: #include "valuebar.h"
        !            42: #include "utils.h"   // for WindowShow
        !            43: 
        !            44: 
        !            45: //==========================================================================//
        !            46: //                                  Constants                               //
        !            47: //==========================================================================//
        !            48: 
        !            49: 
        !            50: //=============================//
        !            51: // Graph Class                 //
        !            52: //=============================//
        !            53: 
        !            54: 
        !            55: TCHAR   szGraphWindowClass[] = TEXT("PerfmonGraphClass") ;
        !            56: #define dwGraphClassStyle           (CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS)
        !            57: #define iGraphClassExtra            (0)
        !            58: #define iGraphWindowExtra           (0)
        !            59: #define dwGraphWindowStyle          (WS_CHILD)
        !            60: 
        !            61: 
        !            62: 
        !            63: //==========================================================================//
        !            64: //                              Local Functions                             //
        !            65: //==========================================================================//
        !            66: 
        !            67: 
        !            68: void static OnCreate (HWND hWnd)
        !            69:    {  // OnCreate
        !            70:    hWndGraphDisplay = CreateGraphDisplayWindow (hWnd) ;
        !            71:    hWndGraphLegend = CreateGraphLegendWindow (hWnd) ;
        !            72:    hWndGraphStatus = CreateGraphStatusWindow (hWnd) ;
        !            73:    }  // OnCreate
        !            74: 
        !            75: 
        !            76: void static OnPaint (HWND hWnd)
        !            77:    {
        !            78:    HDC            hDC ;
        !            79:    PAINTSTRUCT    ps ;
        !            80: 
        !            81:    hDC = BeginPaint (hWnd, &ps) ;
        !            82:    EndPaint (hWnd, &ps) ;
        !            83:    }
        !            84: 
        !            85: 
        !            86: void static OnSize (HWND hWnd, int xWidth, int yHeight)
        !            87:    {  // OnSize
        !            88:    SizeGraphComponents (hWnd) ;
        !            89:    }  // OnSize
        !            90: 
        !            91: 
        !            92: //==========================================================================//
        !            93: //                              Message Handlers                            //
        !            94: //==========================================================================//
        !            95: 
        !            96: 
        !            97: 
        !            98: LRESULT APIENTRY GraphWndProc (HWND hWnd,
        !            99:                                WORD wMsg,
        !           100:                                DWORD wParam,
        !           101:                                LONG lParam)
        !           102:    {  // GraphWndProc
        !           103:    BOOL           bCallDefProc ;
        !           104:    LRESULT        lReturnValue ;
        !           105: 
        !           106: 
        !           107:    bCallDefProc = FALSE ;
        !           108:    lReturnValue = 0L ;
        !           109: 
        !           110:    switch (wMsg)
        !           111:       {  // switch
        !           112:       case WM_CREATE:
        !           113:          OnCreate (hWnd) ;
        !           114:          break ;
        !           115: 
        !           116:       case WM_LBUTTONDBLCLK:
        !           117:          SendMessage (hWndMain, WM_LBUTTONDBLCLK, wParam, lParam) ;
        !           118:          break ;
        !           119: 
        !           120:       case WM_PAINT:
        !           121:          OnPaint (hWnd) ;
        !           122:          break ;
        !           123: 
        !           124:       case WM_SIZE:
        !           125:          OnSize (hWnd, LOWORD (lParam), HIWORD (lParam)) ;
        !           126:          break ;
        !           127: 
        !           128:       default:
        !           129:          bCallDefProc = TRUE ;
        !           130:       }  // switch
        !           131: 
        !           132: 
        !           133:    if (bCallDefProc)
        !           134:       lReturnValue = DefWindowProc (hWnd, wMsg, wParam, lParam) ;
        !           135: 
        !           136:    return (lReturnValue);
        !           137:    }  // GraphWndProc
        !           138: 
        !           139: 
        !           140: 
        !           141: BOOL GraphInitializeApplication (void)
        !           142: /*
        !           143:    Note:          There is no background brush set for the MainWindow
        !           144:                   class so that the main window is never erased. The
        !           145:                   client area of MainWindow is always covered by one
        !           146:                   of the view windows. If we erase it, it would just
        !           147:                   flicker needlessly.
        !           148: */      
        !           149:    {  // GraphInitializeApplication
        !           150:    BOOL           bSuccess ;
        !           151:    WNDCLASS       wc ;
        !           152: 
        !           153:    //=============================//
        !           154:    // Register GraphWindow class  //
        !           155:    //=============================//
        !           156: 
        !           157: 
        !           158:    wc.style         = dwGraphClassStyle ;
        !           159:    wc.lpfnWndProc   = (WNDPROC) GraphWndProc ;
        !           160:    wc.hInstance     = hInstance ;
        !           161:    wc.cbClsExtra    = iGraphWindowExtra ;
        !           162:    wc.cbWndExtra    = iGraphClassExtra ;
        !           163:    wc.hIcon         = NULL ;
        !           164:    wc.hCursor       = LoadCursor(NULL, IDC_ARROW) ;
        !           165:    wc.hbrBackground = NULL ;                          // see note above
        !           166:    wc.lpszMenuName  = NULL ;
        !           167:    wc.lpszClassName = szGraphWindowClass ;
        !           168: 
        !           169:    bSuccess = RegisterClass (&wc) ;
        !           170: 
        !           171: 
        !           172:    //=============================//
        !           173:    // Register Child classes      //
        !           174:    //=============================//
        !           175: 
        !           176:    if (bSuccess)
        !           177:       bSuccess = GraphDisplayInitializeApplication () ;
        !           178: 
        !           179:    if (bSuccess)
        !           180:       bSuccess = GraphLegendInitializeApplication () ;
        !           181:    
        !           182:    if (bSuccess)
        !           183:       bSuccess = GraphStatusInitializeApplication () ;
        !           184: 
        !           185:    return (bSuccess) ;
        !           186:    }  // GraphInitializeApplication
        !           187: 
        !           188: 
        !           189: HWND CreateGraphWindow (HWND hWndParent)
        !           190: /*
        !           191:    Effect:        Create the graph window. This window is a child of 
        !           192:                   hWndMain and is a container for the graph data,
        !           193:                   graph label, graph legend, and graph status windows.
        !           194: 
        !           195:    Note:          We dont worry about the size here, as this window
        !           196:                   will be resized whenever the main window is resized.
        !           197: 
        !           198: */
        !           199:    {
        !           200:    return (CreateWindow (szGraphWindowClass,       // window class
        !           201:                          NULL,                     // caption
        !           202:                          dwGraphWindowStyle,       // style for window
        !           203:                          0, 0,                     // initial position
        !           204:                          0, 0,                     // initial size
        !           205:                          hWndParent,               // parent
        !           206:                          NULL,                     // menu
        !           207:                          hInstance,               // program instance
        !           208:                          NULL)) ;                  // user-supplied data                                              
        !           209:    }
        !           210: 
        !           211: 
        !           212: void SizeGraphComponents (HWND hWnd)
        !           213: /*
        !           214:    Effect:        Move and show the various components of the graph to
        !           215:                   fill the size (xWidth x yHeight). Take into account
        !           216:                   whether the user wants to show the legend or status
        !           217:                   bars. Also take into account if we have room for these
        !           218:                   items.
        !           219: 
        !           220:    Internals:     If the user doesn't want the status or legend windows,
        !           221:                   they aren't shown. Also, if the user wanted the status
        !           222:                   window but not the legend window, the status window is
        !           223:                   not shown.
        !           224: 
        !           225:                   We may disregard the user's desire for the legend or
        !           226:                   status bar if there is not room. In particular, a legend
        !           227:                   window has a minimum width (LegendMinWidth ()) and a
        !           228:                   minimum height (LegendMinHeight ()). These values are
        !           229:                   fixed for a given session of perfmon. It also has a 
        !           230:                   preferred height, which takes into consideration the 
        !           231:                   size of the graph window and the number of items in
        !           232:                   the legend. This value is returned by LegendHeight().
        !           233:       
        !           234:                   We don't show the legend if its minimum height would
        !           235:                   take up more than half the graph height.
        !           236: 
        !           237:                   If we feel we don't have room for the legend, we don't
        !           238:                   show the status window either.
        !           239: 
        !           240:    See Also:      LegendMinWidth, LegendMinHeight, LegendHeight, 
        !           241:                   ValuebarHeight.
        !           242: 
        !           243:    Called By:     OnSize, any other function that may remove or add one
        !           244:                   of the graph components.
        !           245: */
        !           246:    {  // SizeGraphComponents
        !           247:    RECT           rectClient ;
        !           248:    BOOL           bShowLegend ;
        !           249:    BOOL           bShowStatus ;
        !           250:    int            yStatusHeight ;
        !           251:    int            yLegendHeight ;
        !           252:    int            xWidth ;
        !           253:    int            yHeight ;
        !           254: 
        !           255:    GetClientRect (hWnd, &rectClient) ;
        !           256:    xWidth = rectClient.right - rectClient.left ;
        !           257:    yHeight = rectClient.bottom - rectClient.top ;
        !           258: 
        !           259:    // if the graph window has no size, neither will its children.
        !           260:    if (!xWidth || !yHeight)
        !           261:       return ;
        !           262: 
        !           263:    //=============================//
        !           264:    // Show the Legend Window?     //
        !           265:    //=============================//
        !           266: 
        !           267:    if (!pGraphs->gOptions.bLegendChecked)
        !           268:       bShowLegend = FALSE ;
        !           269:    else if (xWidth < LegendMinWidth (hWndGraphLegend))
        !           270:       bShowLegend = FALSE ;
        !           271:    else if (yHeight < 5 * LegendMinHeight (hWndGraphLegend))
        !           272:       bShowLegend = FALSE ;
        !           273:    else
        !           274:       bShowLegend = TRUE ;
        !           275: 
        !           276:    //=============================//
        !           277:    // Show the Status Window?     //
        !           278:    //=============================//
        !           279: 
        !           280:    if (!pGraphs->gOptions.bStatusBarChecked)
        !           281:       bShowStatus = FALSE ;
        !           282:    else if (!bShowLegend)
        !           283:       bShowStatus = FALSE ;
        !           284:    else
        !           285:       bShowStatus = TRUE ;
        !           286: 
        !           287: 
        !           288:    yStatusHeight = bShowStatus ? 
        !           289:                      ValuebarHeight (hWndGraphStatus) : 0 ;
        !           290:    yLegendHeight = bShowLegend ? 
        !           291:                      LegendHeight (hWndGraphLegend, yHeight) : 0 ;
        !           292: 
        !           293: 
        !           294:    //=============================//
        !           295:    // Update the status window    //
        !           296:    //=============================//
        !           297: 
        !           298:    if (bShowStatus)
        !           299:       MoveWindow (hWndGraphStatus, 
        !           300:                   0, yHeight - yStatusHeight - yLegendHeight,
        !           301:                   xWidth, yStatusHeight,
        !           302:                   TRUE) ;
        !           303:    WindowShow (hWndGraphStatus, bShowStatus) ;
        !           304: 
        !           305: 
        !           306:    //=============================//
        !           307:    // Update the legend window    //
        !           308:    //=============================//
        !           309: 
        !           310:    if (bShowLegend)
        !           311:       MoveWindow (hWndGraphLegend,
        !           312:                   0, yHeight - yLegendHeight,
        !           313:                   xWidth, yLegendHeight,
        !           314:                   TRUE) ;
        !           315:    WindowShow (hWndGraphLegend, bShowLegend) ;
        !           316: 
        !           317: 
        !           318:    //=============================//
        !           319:    // Update the display window   //
        !           320:    //=============================//
        !           321: 
        !           322:    MoveWindow (hWndGraphDisplay,
        !           323:                0, 0,
        !           324:                xWidth, yHeight - yStatusHeight - yLegendHeight,
        !           325:                TRUE) ;
        !           326:    SizeGraphDisplayComponents (hWndGraphDisplay) ;
        !           327:    WindowInvalidate (hWndGraphDisplay) ;
        !           328:    WindowShow (hWndGraphDisplay, TRUE) ;
        !           329:    }  // SizeGraphComponents
        !           330: 
        !           331: 

unix.superglobalmegacorp.com

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