home *** CD-ROM | disk | FTP | other *** search
/ CICA 1995 September (Japanese) / CICA Shareware for Windows CD-ROM (Walnut Creek) (September 1995) (Japanese) (Disc 2).iso / disc2 / nt / ntperf.exe / PERFTOOLS / SRC / PERFMON / COMMAND.C_ / COMMAND.C
Encoding:
C/C++ Source or Header  |  1993-05-15  |  28.2 KB  |  1,015 lines

  1. /*
  2. ==============================================================================
  3.  
  4.   Application:
  5.  
  6.             Microsoft Windows NT (TM) Performance Monitor
  7.  
  8.   File:
  9.             Command.c -- PerfmonCommand routine and helpers.
  10.  
  11.             This file contains the PerfmonCommand routine, which handles
  12.             all of the user's menu selections.
  13.  
  14.   Copyright 1992-1993, Microsoft Corporation. All Rights Reserved.
  15.             Microsoft Confidential.
  16. ==============================================================================
  17. */
  18.  
  19.  
  20. //==========================================================================//
  21. //                                  Includes                                //
  22. //==========================================================================//
  23.  
  24.  
  25. #include "stdio.h"
  26. #include "perfmon.h"
  27. #include "command.h"    // External declarations for this file
  28. #include <shellapi.h>   // for ShellAbout
  29.  
  30. #include "addlog.h"     // for AddLog
  31. #include "alert.h"      // for CurrentAlertLine
  32. #include "bookmark.h"   // for AddBookmark
  33. #include "cderr.h"
  34. #include "datasrc.h"    // for DisplayDataSourceOptions
  35. #include "dialogs.h"
  36. #include "dispoptn.h"   // for DisplayDisplayOptions
  37. #include "fileopen.h"   // for FileOpen
  38. #include "grafdata.h"   // for ChartDeleteLine ClearGraphDisplay
  39. #include "grafdisp.h"   // for ToggleGraphRefresh
  40. #include "init.h"       // for PerfmonClose
  41. #include "legend.h"
  42. #include "log.h"        // for LogTimer
  43. #include "logoptns.h"
  44. #include "playback.h"
  45. #include "print.h"      // for PrintChart, for now
  46. #include "report.h"     // for CurrentReportLine
  47. #include "rptoptns.h"   // for DisplayReportOptions
  48. #include "status.h"     // for StatusUpdateIcons
  49. #include "timefrm.h"    // for SetTimeframe
  50. #include "toolbar.h"    // for ToolbarDepressButton
  51. #include "utils.h"
  52. #include "perfmops.h"   // for SaveWorkspace
  53.  
  54. int static deltax ;
  55. int static deltay ;
  56.  
  57. #define ABOUT_TIMER_ID 10
  58.  
  59. int FAR WINAPI AboutDlgProc (HWND hDlg, 
  60.                              unsigned iMessage, 
  61.                              WPARAM wParam, 
  62.                              LPARAM lParam)
  63.    {
  64.    BOOL           bHandled ;
  65.  
  66.    bHandled = TRUE ;
  67.    switch (iMessage)
  68.       {
  69.       case WM_INITDIALOG:
  70.          deltax = 0 ;
  71.          deltay = 0 ;
  72.          dwCurrentDlgID = 0 ;
  73.          SetTimer(hDlg, ABOUT_TIMER_ID, 1000, NULL) ;
  74.          WindowCenter (hDlg) ;
  75.          return (TRUE) ;
  76.  
  77.       case WM_TIMER:
  78.          deltax += 2 ;
  79.          if (deltax > 60)
  80.             deltax = 0 ;
  81.  
  82.          deltay += 5 ;
  83.          if (deltay > 60)
  84.             deltay = 0 ;
  85.  
  86.          WindowInvalidate (DialogControl (hDlg, 524)) ;
  87.          break ;
  88.  
  89.       case WM_DRAWITEM:
  90.          {
  91.          int xPos, yPos ;
  92.          LPDRAWITEMSTRUCT lpItem ;
  93.  
  94.          lpItem = (LPDRAWITEMSTRUCT) lParam ;
  95.          xPos = lpItem->rcItem.left + deltax ;
  96.          yPos = lpItem->rcItem.top + deltay ;
  97.          DrawIcon (lpItem->hDC, xPos, yPos, hIcon) ;
  98.          }
  99.          break ;
  100.  
  101.       case WM_CLOSE:
  102.          dwCurrentDlgID = 0 ;
  103.          KillTimer (hDlg, ABOUT_TIMER_ID) ;
  104.          EndDialog (hDlg, 1) ;
  105.          break ;
  106.  
  107.       case WM_COMMAND:
  108.          switch(wParam)
  109.             {
  110.             case IDD_OK:
  111.                dwCurrentDlgID = 0 ;
  112.                EndDialog (hDlg, 1) ;
  113.                break ;
  114.  
  115.             default:
  116.                bHandled = FALSE ;
  117.                break;
  118.             }
  119.          break;
  120.  
  121.  
  122.       default:
  123.             bHandled = FALSE ;
  124.          break ;            
  125.       }  // switch
  126.  
  127.    return (bHandled) ;
  128.    }  // AboutDlgProc
  129.  
  130.  
  131. //==========================================================================//
  132. //                              Local Functions                             //
  133. //==========================================================================//
  134.  
  135.  
  136. void ChangeView (HWND hWnd,
  137.                  int iNewView)
  138.    {  // ChangeView
  139.    HMENU hMenu = GetMenu (hWnd) ;
  140.    BOOL  bViewChart, bViewAlert, bViewLog, bViewReport ;
  141.  
  142. #ifdef ADVANCED_PERFMON
  143.    iPerfmonView = iNewView ;
  144.    bViewChart = bViewAlert = bViewLog = bViewReport = FALSE;
  145.  
  146.    switch (iNewView)
  147.       {
  148.       case IDM_VIEWCHART:
  149.          bViewChart = TRUE ;
  150.          break ;
  151.  
  152.       case IDM_VIEWALERT:
  153.          bViewAlert = TRUE ;
  154.          break ;
  155.  
  156.       case IDM_VIEWLOG:
  157.          bViewLog = TRUE ;
  158.          break ;
  159.  
  160.       case IDM_VIEWREPORT:
  161.          bViewReport = TRUE ;
  162.          break ;
  163.       }
  164.  
  165.    WindowShow (hWndGraph, bViewChart) ;
  166.    WindowShow (hWndAlert, bViewAlert) ;
  167.    WindowShow (hWndLog, bViewLog) ;
  168.    WindowShow (hWndReport, bViewReport) ;
  169.  
  170.    if (hMenu)
  171.       {
  172.       MenuCheck (hMenu, IDM_VIEWCHART, bViewChart) ;
  173.       MenuCheck (hMenu, IDM_VIEWALERT, bViewAlert) ;
  174.       MenuCheck (hMenu, IDM_VIEWLOG, bViewLog) ;
  175.       MenuCheck (hMenu, IDM_VIEWREPORT, bViewReport) ;
  176.       }
  177.  
  178.    ToolbarDepressButton (hWndToolbar, ChartTool, bViewChart) ;
  179.    ToolbarDepressButton (hWndToolbar, AlertTool, bViewAlert) ;
  180.    ToolbarDepressButton (hWndToolbar, LogTool, bViewLog) ;
  181.    ToolbarDepressButton (hWndToolbar, ReportTool, bViewReport) ;
  182. #else
  183.    // only Chart view in Perfmon Lite
  184.    iPerfmonView = IDM_VIEWCHART ;
  185.    WindowShow (hWndGraph, TRUE) ;
  186. #endif
  187.  
  188.    DrawMenuBar(hWnd) ;
  189.    StatusLineReady (hWndStatus) ;
  190.    }  // ChangeView
  191.  
  192.  
  193. //==========================================================================//
  194. //                              Message Handlers                            //
  195. //==========================================================================//
  196.  
  197.  
  198. void ViewChart (HWND hWnd)
  199.    {
  200.    if (Options.bMenubar)
  201.       SetMenu (hWnd, hMenuChart) ;
  202.    ChangeView (hWnd, IDM_VIEWCHART) ;
  203.    }
  204.  
  205.  
  206. void ViewAlert (HWND hWnd)
  207.    {
  208.    iUnviewedAlerts = 0 ;
  209.    StatusUpdateIcons (hWndStatus) ;
  210.    if (Options.bMenubar)
  211.       SetMenu (hWnd, hMenuAlert) ;
  212.    ChangeView (hWnd, IDM_VIEWALERT) ;
  213.    }
  214.  
  215.  
  216. void ViewLog (HWND hWnd)
  217.    {
  218.    if (Options.bMenubar)
  219.       SetMenu (hWnd, hMenuLog) ;
  220.    ChangeView (hWnd, IDM_VIEWLOG) ;
  221.    }
  222.  
  223.  
  224. void ViewReport (HWND hWnd)
  225.    {
  226.    if (Options.bMenubar)
  227.       SetMenu (hWnd, hMenuReport) ;
  228.    ChangeView (hWnd, IDM_VIEWREPORT) ;
  229.    }
  230.  
  231.  
  232. #ifdef KEEP_MANUALREFRESH
  233. void ToggleRefresh (HWND hWnd)
  234.    {
  235.    BOOL           bRefresh ;
  236.  
  237.    switch (iPerfmonView)
  238.       {
  239.       case IDM_VIEWCHART:
  240.          bRefresh = ToggleGraphRefresh (hWndGraph) ;
  241.          break ;
  242.  
  243.       case IDM_VIEWALERT:
  244.          bRefresh = ToggleAlertRefresh (hWndAlert) ;
  245.          break ;
  246.  
  247.       case IDM_VIEWLOG:
  248.          bRefresh = ToggleLogRefresh (hWndLog) ;
  249.          break ;
  250.  
  251.       case IDM_VIEWREPORT:
  252.          bRefresh = ToggleReportRefresh (hWndReport) ;
  253.          break ;
  254.       }  // switch
  255.  
  256.    MenuCheck (GetMenu (hWnd), IDM_OPTIONSMANUALREFRESH, bRefresh) ;
  257.    }  // ToggleRefresh
  258. #endif
  259.  
  260.  
  261. //==========================================================================//
  262. //                             Exported Functions                           //
  263. //==========================================================================//
  264.  
  265.  
  266. BOOL PerfmonCommand (HWND hWnd,
  267.                      WPARAM wParam,
  268.                      LPARAM lParam)
  269. /*
  270.    Effect:        Respond to the user's menu selection, found in wParam.
  271.                   In particular, branch to the appropriate OnXXX function
  272.                   to perform the action associated with each command.
  273.  
  274.    Called By:     MainWndProc (perfmon.c), in response to a WM_COMMAND
  275.                   message.
  276. */
  277.    {  // PerfmonCommand
  278.    PLINESTRUCT    pLine ;
  279.    BOOL           bPrepareMenu = TRUE ;
  280.  
  281.    switch (LOWORD (wParam))
  282.       {
  283.  
  284.       //=============================//
  285.       // Toolbar Commands            //
  286.       //=============================//
  287.  
  288.       case IDM_TOOLBARADD:
  289.          bPrepareMenu = FALSE ;
  290.          
  291.          switch (iPerfmonView)
  292.             {
  293.             case IDM_VIEWCHART:
  294.                SendMessage (hWnd, WM_COMMAND, IDM_EDITADDCHART, lParam) ;
  295.                break ;
  296.  
  297.             case IDM_VIEWALERT:
  298.                SendMessage (hWnd, WM_COMMAND, IDM_EDITADDALERT, lParam) ;
  299.                break ;
  300.  
  301.             case IDM_VIEWLOG:
  302.                SendMessage (hWnd, WM_COMMAND, IDM_EDITADDLOG, lParam) ;
  303.                break ;
  304.  
  305.             case IDM_VIEWREPORT:
  306.                SendMessage (hWnd, WM_COMMAND, IDM_EDITADDREPORT, lParam) ;
  307.                break ;
  308.             }  // switch
  309.          break ;
  310.  
  311.  
  312.       case IDM_TOOLBARMODIFY:
  313.          bPrepareMenu = FALSE ;
  314.          
  315.          switch (iPerfmonView)
  316.             {  // switch
  317.             case IDM_VIEWCHART:
  318.                SendMessage (hWnd, WM_COMMAND, IDM_EDITMODIFYCHART, lParam) ;
  319.                break ;
  320.  
  321.             case IDM_VIEWALERT:
  322.                SendMessage (hWnd, WM_COMMAND, IDM_EDITMODIFYALERT, lParam) ;
  323.                break ;
  324.  
  325.             case IDM_VIEWREPORT:
  326.                SendMessage (hWnd, WM_COMMAND, IDM_EDITMODIFYREPORT, lParam) ;
  327.                break ;
  328.             }  // switch
  329.          break ;
  330.  
  331.  
  332.       case IDM_TOOLBARDELETE:
  333.          bPrepareMenu = FALSE ;
  334.          
  335.          switch (iPerfmonView)
  336.             {
  337.             case IDM_VIEWCHART:
  338.                SendMessage (hWnd, WM_COMMAND, IDM_EDITDELETECHART, lParam) ;
  339.                break ;
  340.  
  341.             case IDM_VIEWALERT:
  342.                SendMessage (hWnd, WM_COMMAND, IDM_EDITDELETEALERT, lParam) ;
  343.                break ;
  344.  
  345.             case IDM_VIEWLOG:
  346.                SendMessage (hWnd, WM_COMMAND, IDM_EDITDELETELOG, lParam) ;
  347.                break ;
  348.  
  349.             case IDM_VIEWREPORT:
  350.                SendMessage (hWnd, WM_COMMAND, IDM_EDITDELETEREPORT, lParam) ;
  351.                break ;
  352.             }  // switch
  353.          break ;
  354.  
  355.  
  356.       case IDM_TOOLBARREFRESH:
  357.          bPrepareMenu = FALSE ;
  358.          
  359.          switch (iPerfmonView)
  360.             {
  361.             case IDM_VIEWCHART:
  362.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSREFRESHNOWCHART, lParam) ;
  363.                break ;
  364.  
  365.             case IDM_VIEWALERT:
  366.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSREFRESHNOWALERT, lParam) ;
  367.                break ;
  368.  
  369.             case IDM_VIEWLOG:
  370.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSREFRESHNOWLOG, lParam) ;
  371.                break ;
  372.  
  373.             case IDM_VIEWREPORT:
  374.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSREFRESHNOWREPORT, lParam) ;
  375.                break ;
  376.             }  // switch
  377.          break ;
  378.  
  379.  
  380.       case IDM_TOOLBAROPTIONS:
  381.          bPrepareMenu = FALSE ;
  382.  
  383.          switch (iPerfmonView)
  384.             {  // switch
  385.             case IDM_VIEWCHART:
  386.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSCHART, lParam) ;
  387.                break ;
  388.  
  389.             case IDM_VIEWALERT:
  390.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSALERT, lParam) ;
  391.                break ;
  392.  
  393.             case IDM_VIEWLOG:
  394.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSLOG, lParam) ;
  395.                break ;
  396.  
  397.             case IDM_VIEWREPORT:
  398.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSREPORT, lParam) ;
  399.                break ;
  400.             }  // switch
  401.          break ;
  402.  
  403.  
  404.       //=============================//
  405.       // "File" Commands             //
  406.       //=============================//
  407.  
  408.  
  409.       case IDM_FILENEWCHART:
  410.          if (QuerySaveChart (hWnd, pGraphs))
  411.             ResetGraphView (hWndGraph) ;
  412.          break ;
  413.  
  414.  
  415.       case IDM_FILENEWALERT:
  416.          if (QuerySaveAlert (hWnd, hWndAlert))
  417.             ResetAlertView (hWndAlert) ;
  418.          break ;
  419.  
  420.       case IDM_FILENEWLOG:
  421.          ResetLogView (hWndLog) ;
  422.          break ;
  423.  
  424.       case IDM_FILENEWREPORT:
  425.          ResetReportView (hWndReport) ;
  426.          break ;
  427.  
  428.       case IDM_FILEOPENCHART:
  429.          FileOpen (hWndGraph, IDS_CHARTFILE, NULL) ;
  430.          break ;
  431.  
  432.       case IDM_FILEOPENALERT:
  433.          FileOpen (hWndAlert, IDS_ALERTFILE, NULL) ;
  434.          break ;
  435.  
  436.       case IDM_FILEOPENLOG:
  437.          FileOpen (hWndLog, IDS_LOGFILE, NULL) ;
  438.          break ;
  439.  
  440.       case IDM_FILEOPENREPORT:
  441.          FileOpen (hWndReport, IDS_REPORTFILE, NULL) ;
  442.          break ;
  443.  
  444.       case IDM_FILESAVECHART:
  445.       case IDM_FILESAVEASCHART:
  446.          bPrepareMenu = FALSE ;
  447.          SaveChart (hWndGraph, 0,
  448.             (LOWORD (wParam) == IDM_FILESAVEASCHART) ? TRUE : FALSE) ;
  449.          break;
  450.  
  451.       case IDM_FILESAVEALERT:
  452.       case IDM_FILESAVEASALERT:
  453.          bPrepareMenu = FALSE ;
  454.          SaveAlert (hWndAlert, 0,
  455.             (LOWORD (wParam) == IDM_FILESAVEASALERT) ? TRUE : FALSE) ;
  456.          break ;
  457.  
  458.       case IDM_FILESAVELOG:
  459.       case IDM_FILESAVEASLOG:
  460.          bPrepareMenu = FALSE ;
  461.          SaveLog (hWndLog, 0, 
  462.             (LOWORD (wParam) == IDM_FILESAVEASLOG) ? TRUE : FALSE) ;
  463.          break ;
  464.  
  465.       case IDM_FILESAVEREPORT:
  466.       case IDM_FILESAVEASREPORT:
  467.          bPrepareMenu = FALSE ;
  468.          SaveReport (hWndReport, 0,  
  469.             (LOWORD (wParam) == IDM_FILESAVEASREPORT) ? TRUE : FALSE) ;
  470.          break ;
  471.  
  472.  
  473.       case IDM_FILESAVEWORKSPACE:
  474.          bPrepareMenu = FALSE ;
  475.          SaveWorkspace () ; 
  476.          break ;
  477.  
  478.       case IDM_FILEEXPORTCHART:
  479.          bPrepareMenu = FALSE ;
  480.          ExportChart () ;
  481.          break ;
  482.  
  483.       case IDM_FILEEXPORTALERT:
  484.          bPrepareMenu = FALSE ;
  485.          ExportAlert () ;
  486.          break ;
  487.  
  488.       case IDM_FILEEXPORTLOG:
  489.          bPrepareMenu = FALSE ;
  490.          ExportLog () ;
  491.          break ;
  492.  
  493.       case IDM_FILEEXPORTREPORT:
  494.          bPrepareMenu = FALSE ;
  495.          ExportReport () ;
  496.          break ;
  497.  
  498.  
  499. #ifdef KEEP_PRINT
  500.       case IDM_FILEPRINTCHART:
  501.           PrintChart (hWnd, pGraphs) ;
  502.           break ;
  503.  
  504.  
  505.       case IDM_FILEPRINTREPORT:
  506.          PrintReport (hWnd, hWndReport) ;
  507.          break ;
  508. #endif
  509.  
  510.       case IDM_FILEEXIT:
  511.          PerfmonClose (hWnd) ;
  512.          bPrepareMenu = FALSE ;
  513.          break ;
  514.  
  515.  
  516.       //=============================//
  517.       // "Edit" Commands             //
  518.       //=============================//
  519.  
  520.  
  521.       case IDM_EDITADDCHART:
  522.          AddChart (hWnd) ;
  523.          break;
  524.  
  525.       case IDM_EDITADDALERT:
  526.          AddAlert (hWnd) ;
  527.          break;
  528.  
  529.       case IDM_EDITADDLOG:
  530.          AddLog (hWnd) ;
  531.          break ;
  532.  
  533.       case IDM_EDITADDREPORT:
  534.          AddReport (hWnd) ;
  535.          break ;
  536.  
  537.       case IDM_EDITCLEARCHART :
  538.          ClearGraphDisplay (pGraphs) ;
  539.          break ;
  540.  
  541.       case IDM_EDITCLEARALERT:
  542.          ClearAlertDisplay (hWndAlert) ;
  543.          break ;
  544.  
  545.       case IDM_EDITCLEARREPORT:
  546.          ClearReportDisplay (hWndReport) ;
  547.          break ;
  548.  
  549.       case IDM_EDITDELETECHART:
  550.          pLine = CurrentGraphLine (hWndGraph) ;
  551.          if (pLine)
  552.             ChartDeleteLine(pGraphs, pLine) ;
  553.          break ;
  554.  
  555.       case IDM_EDITDELETEALERT:
  556.          pLine = CurrentAlertLine (hWndAlert) ;
  557.          if (pLine)
  558.             AlertDeleteLine (hWndAlert, pLine) ;
  559.          break ;
  560.       
  561.       case IDM_EDITDELETELOG:
  562.          LogDeleteEntry (hWndLog) ;
  563.          break ;
  564.  
  565.       case IDM_EDITDELETEREPORT:
  566.          pLine = CurrentReportLine (hWndReport) ;
  567.          if (pLine)
  568.             ReportDeleteLine (hWndReport, pLine) ;
  569.          break ;
  570.  
  571.       case IDM_EDITMODIFYCHART:
  572.          EditChart (hWnd) ;
  573.          break ;
  574.  
  575.       case IDM_EDITMODIFYALERT:
  576.          EditAlert (hWnd) ;
  577.          break ;
  578.  
  579.       case IDM_EDITTIMEWINDOW:
  580.          if (PlayingBackLog())
  581.             {
  582.             SetTimeframe (hWnd) ;
  583.             }
  584.          break ;
  585.  
  586.  
  587.       //=============================//
  588.       // "View" Commands             //
  589.       //=============================//
  590.  
  591.  
  592.       case IDM_VIEWCHART:
  593.          if (iPerfmonView != IDM_VIEWCHART)
  594.             {
  595.             ViewChart (hWnd) ;
  596.             }
  597.          else
  598.             {
  599.             bPrepareMenu = FALSE ;
  600.             ToolbarDepressButton (hWndToolbar, ChartTool, TRUE) ;
  601.             }
  602.          break ;
  603.  
  604.       case IDM_VIEWALERT:
  605.          if (iPerfmonView != IDM_VIEWALERT)
  606.             {
  607.             ViewAlert (hWnd) ;
  608.             }
  609.          else
  610.             {
  611.             bPrepareMenu = FALSE ;
  612.             ToolbarDepressButton (hWndToolbar, AlertTool, TRUE) ;
  613.             }
  614.          break ;
  615.  
  616.       case IDM_VIEWLOG:
  617.          if (iPerfmonView != IDM_VIEWLOG)
  618.             {
  619.             ViewLog (hWnd) ;
  620.             }
  621.          else
  622.             {
  623.             bPrepareMenu = FALSE ;
  624.             ToolbarDepressButton (hWndToolbar, LogTool, TRUE) ;
  625.             }
  626.          break ;
  627.  
  628.       case IDM_VIEWREPORT:
  629.          if (iPerfmonView != IDM_VIEWREPORT)
  630.             {
  631.             ViewReport (hWnd) ;
  632.             }
  633.          else
  634.             {
  635.             bPrepareMenu = FALSE ;
  636.             ToolbarDepressButton (hWndToolbar, ReportTool, TRUE) ;
  637.             }
  638.          break ;
  639.  
  640.  
  641.       //=============================//
  642.       // "Options" Commands          //
  643.       //=============================//
  644.  
  645.  
  646.       case IDM_OPTIONSCHART:
  647.            DialogBox(hInstance, idDlgChartOptions, hWnd,
  648.                         (DLGPROC)GraphOptionDlg);
  649.            break;
  650.  
  651.       case IDM_OPTIONSALERT:
  652.          DisplayAlertOptions (hWnd, hWndAlert) ;
  653.           break;
  654.  
  655.       case IDM_OPTIONSLOG:
  656.          DisplayLogOptions (hWnd, hWndLog) ;
  657.          break ;
  658.  
  659.       case IDM_OPTIONSREPORT:
  660.          if (PlayingBackLog ())
  661.             MessageBeep (0) ;
  662.          else
  663.             DisplayReportOptions (hWnd, hWndReport) ;
  664.          break ;
  665.  
  666.        case IDM_OPTIONSBOOKMARK:
  667.          bPrepareMenu = FALSE ;
  668.          AddBookmark (hWnd) ;
  669.          break;
  670.  
  671. #ifdef KEEP_DISPLAY_OPTION
  672.       case IDM_OPTIONSDISPLAY:
  673.          DisplayDisplayOptions (hWnd) ;
  674.          break ;
  675. #endif
  676.  
  677.       case IDM_OPTIONSDISPLAYMENU:
  678.          // ShowPerfmonMenu will update Options.bMenubar..
  679.          ShowPerfmonMenu (!Options.bMenubar) ;
  680.          break ;
  681.  
  682.       case IDM_OPTIONSDISPLAYTOOL:
  683.          Options.bToolbar = !Options.bToolbar ;
  684.          SizePerfmonComponents () ;
  685.          break ;
  686.  
  687.       case IDM_OPTIONSDISPLAYSTATUS:
  688.          Options.bStatusbar = !Options.bStatusbar ;
  689.          SizePerfmonComponents () ;
  690.          break ;
  691.  
  692.       case IDM_OPTIONSDISPLAYONTOP:
  693.          Options.bAlwaysOnTop = !Options.bAlwaysOnTop ;
  694.          WindowSetTopmost (hWndMain, Options.bAlwaysOnTop) ;
  695.          break ;
  696.  
  697.       case IDM_OPTIONSDATASOURCE:
  698.          DisplayDataSourceOptions (hWnd) ;
  699.          break ;
  700.  
  701. #ifdef KEEP_MANUALREFRESH
  702.       case IDM_OPTIONSMANUALREFRESH:
  703.          bPrepareMenu = FALSE ;
  704.          if (PlayingBackLog())
  705.             MessageBeep(0) ;
  706.          else
  707.             ToggleRefresh (hWnd) ;
  708.          break ;
  709. #endif
  710.  
  711.       case IDM_OPTIONSREFRESHNOWCHART:
  712.          bPrepareMenu = FALSE ;
  713.          if (PlayingBackLog())
  714.             MessageBeep(0) ;
  715.          else
  716.             GraphTimer (hWndGraph, TRUE) ;
  717.          break ;
  718.  
  719.       case IDM_OPTIONSREFRESHNOWALERT:
  720.          bPrepareMenu = FALSE ;
  721.          if (PlayingBackLog())
  722.             MessageBeep(0) ;
  723.          else
  724.             AlertTimer (hWndAlert, TRUE) ;
  725.          break ;
  726.  
  727.       case IDM_OPTIONSREFRESHNOWLOG:
  728.          bPrepareMenu = FALSE ;
  729.          if (PlayingBackLog())
  730.             MessageBeep(0) ;
  731.          else
  732.             LogTimer (hWndLog, TRUE) ;
  733.          break ;
  734.  
  735.       case IDM_OPTIONSREFRESHNOWREPORT:
  736.          bPrepareMenu = FALSE ;
  737.          if (PlayingBackLog())
  738.             MessageBeep(0) ;
  739.          else
  740.             ReportTimer (hWndLog, TRUE) ;
  741.          break ;
  742.  
  743.       //=============================//
  744.       // "Help" Commands             //
  745.       //=============================//
  746.  
  747.  
  748.       case IDM_HELPABOUT:
  749.          {
  750.          TCHAR          szApplication [WindowCaptionLen] ;
  751.  
  752.          bPrepareMenu = FALSE ;
  753.  
  754.          if (GetKeyState(VK_SHIFT) < 0 && GetKeyState(VK_CONTROL) < 0)
  755.             {
  756.             DialogBox (hInstance, idDlgAbout, hWndMain, AboutDlgProc) ;
  757.             }
  758.          else
  759.             {
  760.             StringLoad (IDS_APPNAME, szApplication) ;
  761.             ShellAbout (hWnd, szApplication, NULL, hIcon) ;
  762.             }
  763.          }
  764.          break ;
  765.  
  766.       //======================================//
  767.       //  Generic messages from ACCELERATORS  // 
  768.       //======================================//
  769.       case IDM_FILEOPENFILE:
  770.          bPrepareMenu = FALSE ;
  771.          switch (iPerfmonView)
  772.             {  // switch
  773.             case IDM_VIEWCHART:
  774.                SendMessage (hWnd, WM_COMMAND, IDM_FILEOPENCHART, lParam) ;
  775.                break ;
  776.  
  777.             case IDM_VIEWALERT:
  778.                SendMessage (hWnd, WM_COMMAND, IDM_FILEOPENALERT, lParam) ;
  779.                break ;
  780.  
  781.             case IDM_VIEWLOG:
  782.                SendMessage (hWnd, WM_COMMAND, IDM_FILEOPENLOG, lParam) ;
  783.                break ;
  784.  
  785.             case IDM_VIEWREPORT:
  786.                SendMessage (hWnd, WM_COMMAND, IDM_FILEOPENREPORT, lParam) ;
  787.                break ;
  788.             }  // switch
  789.          break ;
  790.  
  791.       case IDM_FILESAVEFILE:
  792.          bPrepareMenu = FALSE ;
  793.          switch (iPerfmonView)
  794.             {  // switch
  795.             case IDM_VIEWCHART:
  796.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVECHART, lParam) ;
  797.                break ;
  798.  
  799.             case IDM_VIEWALERT:
  800.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEALERT, lParam) ;
  801.                break ;
  802.  
  803.             case IDM_VIEWLOG:
  804.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVELOG, lParam) ;
  805.                break ;
  806.  
  807.             case IDM_VIEWREPORT:
  808.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEREPORT, lParam) ;
  809.                break ;
  810.             }  // switch
  811.          break ;
  812.  
  813.       case IDM_FILESAVEASFILE:
  814.          bPrepareMenu = FALSE ;
  815.          switch (iPerfmonView)
  816.             {  // switch
  817.             case IDM_VIEWCHART:
  818.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEASCHART, lParam) ;
  819.                break ;
  820.  
  821.             case IDM_VIEWALERT:
  822.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEASALERT, lParam) ;
  823.                break ;
  824.  
  825.             case IDM_VIEWLOG:
  826.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEASLOG, lParam) ;
  827.                break ;
  828.  
  829.             case IDM_VIEWREPORT:
  830.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEASREPORT, lParam) ;
  831.                break ;
  832.             }  // switch
  833.          break ;
  834.  
  835.       case IDM_CHARTHIGHLIGHTON:
  836.          bPrepareMenu = FALSE ;
  837.          if (iPerfmonView == IDM_VIEWCHART)
  838.             {
  839.             ChartHighlight () ;
  840.             }
  841.          break ;
  842.  
  843.       case IDM_TOOLBARID:
  844.          // msg from the toolbar control
  845.          bPrepareMenu = FALSE ;
  846.          OnToolbarHit (wParam, lParam) ;
  847.          break ;
  848.  
  849.       case IDM_HELPCONTENTS:
  850.          {
  851.          TCHAR NullStr [2] ;
  852.  
  853.          NullStr[0] = TEXT('\0') ;
  854.          bPrepareMenu = FALSE ;
  855.          WinHelp (hWndMain, pszHelpFile, HELP_INDEX, (DWORD)(NullStr)) ;
  856.          }
  857.          break ;
  858.  
  859.       case IDM_HELPSEARCH:
  860.          {
  861.          TCHAR NullStr [2] ;
  862.  
  863.          NullStr[0] = TEXT('\0') ;
  864.          bPrepareMenu = FALSE ;
  865.          WinHelp (hWndMain, pszHelpFile, HELP_PARTIALKEY, (DWORD)(NullStr)) ;
  866.          }
  867.          break ;
  868.  
  869.       case IDM_HELPHELP:
  870.          {
  871.          TCHAR NullStr [2] ;
  872.  
  873.          NullStr[0] = TEXT('\0') ;
  874.          bPrepareMenu = FALSE ;
  875.          WinHelp (hWndMain, pszHelpFile, HELP_HELPONHELP, (DWORD)(NullStr)) ;
  876.          }
  877.          break ;
  878.  
  879.       default:
  880.          return (FALSE) ;
  881.       }  // switch
  882.  
  883.    if (bPrepareMenu)
  884.       {
  885.       PrepareMenu (GetMenu (hWnd)) ;
  886.       }
  887.  
  888.    return (TRUE) ;
  889.    }  // PerfmonCommand
  890.  
  891.  
  892.  
  893. void PrepareMenu (HMENU hMenu)
  894.    {  // PrepareMenu
  895.    BOOL           bPlayingLog ;
  896.    BOOL           bCurrentLine ;
  897.    BOOL           bManualRefresh ;
  898.    BOOL           bLogCollecting ;
  899.    BOOL           bRefresh ;
  900.  
  901.    // hMenu is NULL when the menu bar display option is off.
  902.    // In that case, we still have to enable/disable all tool buttons
  903.    // So, I have commented out the next 2 lines...
  904. //   if (!hMenu)
  905. //      return ;
  906.  
  907.    bLogCollecting = LogCollecting (hWndLog) ;
  908.    bPlayingLog = PlayingBackLog () ;
  909.  
  910.    switch (iPerfmonView)
  911.       {
  912.       case IDM_VIEWCHART:
  913.          bCurrentLine = (CurrentGraphLine (hWndGraph) != NULL) ;
  914.          bRefresh = GraphRefresh (hWndGraph) ;
  915.          bManualRefresh = !bPlayingLog && bCurrentLine ;
  916.          if (hMenu)
  917.             {
  918.             MenuCheck (hMenu, IDM_VIEWCHART, TRUE) ;
  919.             MenuEnableItem (hMenu, IDM_FILEEXPORTCHART, bCurrentLine) ;
  920.             MenuEnableItem (hMenu, IDM_EDITMODIFYCHART, bCurrentLine) ;
  921.             MenuEnableItem (hMenu, IDM_EDITDELETECHART, bCurrentLine) ;
  922.             MenuEnableItem (hMenu, IDM_OPTIONSREFRESHNOWCHART, bManualRefresh) ;
  923.             MenuEnableItem (hMenu, IDM_EDITCLEARCHART, !bPlayingLog && bCurrentLine) ;
  924.             }
  925.          break ;
  926.  
  927.       case IDM_VIEWALERT:
  928.          bCurrentLine = (CurrentAlertLine (hWndAlert) != NULL) ;
  929.          bRefresh = AlertRefresh (hWndAlert) ;
  930.          bManualRefresh = !bPlayingLog && bCurrentLine ;
  931.          if (hMenu)
  932.             {
  933.             MenuCheck (hMenu, IDM_VIEWALERT, TRUE) ;
  934.             MenuEnableItem (hMenu, IDM_FILEEXPORTALERT, bCurrentLine) ;
  935.             MenuEnableItem (hMenu, IDM_EDITMODIFYALERT, bCurrentLine) ;
  936.             MenuEnableItem (hMenu, IDM_EDITDELETEALERT, bCurrentLine) ;
  937.             MenuEnableItem (hMenu, IDM_EDITCLEARALERT, !bPlayingLog && bCurrentLine) ;
  938.             MenuEnableItem (hMenu, IDM_OPTIONSREFRESHNOWALERT, bManualRefresh) ;
  939.             }
  940.          break ;
  941.  
  942.       case IDM_VIEWLOG:
  943.          bCurrentLine = AnyLogLine() ;
  944.          bRefresh = LogRefresh (hWndLog) ;
  945.          bManualRefresh = !bPlayingLog && bLogCollecting ;
  946.          if (hMenu)
  947.             {
  948.             MenuCheck (hMenu, IDM_VIEWLOG, TRUE) ;
  949.             MenuEnableItem (hMenu, IDM_FILEEXPORTLOG, bCurrentLine) ;
  950.             MenuEnableItem (hMenu, IDM_EDITDELETELOG, bCurrentLine) ;
  951.             MenuEnableItem (hMenu, IDM_OPTIONSREFRESHNOWLOG , bManualRefresh) ;
  952.             }
  953.          break ;
  954.  
  955.       case IDM_VIEWREPORT:
  956.          bCurrentLine = (CurrentReportLine (hWndReport) != NULL) ;
  957.          bRefresh = ReportRefresh (hWndReport) ;
  958.          bManualRefresh = !bPlayingLog && bCurrentLine ;
  959.          if (hMenu)
  960.             {
  961.             MenuCheck (hMenu, IDM_VIEWREPORT, TRUE) ;
  962.             MenuEnableItem (hMenu, IDM_FILEEXPORTREPORT, bCurrentLine) ;
  963.             MenuEnableItem (hMenu, IDM_EDITMODIFYREPORT, FALSE) ;
  964.             MenuEnableItem (hMenu, IDM_EDITDELETEREPORT, bCurrentLine) ;
  965.             MenuEnableItem (hMenu, IDM_EDITCLEARREPORT, !bPlayingLog && bCurrentLine) ;
  966.             MenuEnableItem (hMenu, IDM_OPTIONSREFRESHNOWREPORT, bManualRefresh) ;
  967.             }
  968.          break ;
  969.       }  // switch
  970.  
  971.  
  972.    ToolbarEnableButton (hWndToolbar, EditTool, 
  973.                         bCurrentLine &&
  974.                         (iPerfmonView != IDM_VIEWREPORT &&
  975.                          iPerfmonView != IDM_VIEWLOG)) ;
  976.  
  977.    ToolbarEnableButton (hWndToolbar, DeleteTool, bCurrentLine) ;
  978.                   
  979.    ToolbarEnableButton (hWndToolbar, RefreshTool, bManualRefresh) ;
  980.  
  981.    // None of the alert or report options make sense when playing back a log.
  982. #if 0
  983.    ToolbarEnableButton (hWndToolbar,
  984.                         OptionsTool,
  985.                         !bPlayingLog ||
  986.                         (iPerfmonView != IDM_VIEWREPORT &&
  987.                          iPerfmonView != IDM_VIEWALERT)) ;
  988. #endif
  989.    ToolbarEnableButton (hWndToolbar,
  990.                         OptionsTool,
  991.                         !bPlayingLog ||
  992.                         iPerfmonView != IDM_VIEWREPORT) ;
  993.  
  994.    ToolbarEnableButton (hWndToolbar, BookmarkTool, bLogCollecting) ;
  995.    
  996.  
  997.    if (hMenu)
  998.       {
  999.       MenuEnableItem (hMenu, IDM_EDITTIMEWINDOW, bPlayingLog) ;
  1000.       MenuEnableItem (hMenu, IDM_OPTIONSREPORT, !bPlayingLog) ;
  1001.       MenuEnableItem (hMenu, IDM_OPTIONSBOOKMARK, bLogCollecting) ;
  1002.  
  1003.       // check/uncheck all the display options
  1004.       MenuCheck (hMenu, IDM_OPTIONSDISPLAYMENU, Options.bMenubar) ;
  1005.       MenuCheck (hMenu, IDM_OPTIONSDISPLAYTOOL, Options.bToolbar) ;
  1006.       MenuCheck (hMenu, IDM_OPTIONSDISPLAYSTATUS, Options.bStatusbar) ;
  1007.       MenuCheck (hMenu, IDM_OPTIONSDISPLAYONTOP, Options.bAlwaysOnTop) ;
  1008.       }
  1009.    }  // PrepareMenu
  1010.  
  1011.  
  1012.  
  1013.  
  1014. 
  1015.