home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / sdktools / winnt / perfmon / timefrm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-13  |  9.3 KB  |  332 lines

  1. //==========================================================================//
  2. //                                  Includes                                //
  3. //==========================================================================//
  4.  
  5. #include <stdio.h>
  6.  
  7. #include "perfmon.h"          // included by all source
  8. #include "timefrm.h"          // external declarations for this file
  9.  
  10. #include "alert.h"            // for PlaybackAlert
  11. #include "grafdata.h"         // for PlaybackChart
  12. #include "perfmops.h"         // for PerfmonViewWindow
  13. #include "playback.h"         // for PlaybackIndexN
  14. #include "report.h"           // for PlaybackReport
  15. #include "timeline.h"         // for TL_INTERVAL
  16. #include "utils.h"
  17. #include "pmhelpid.h"         // for Help IDs
  18.  
  19. //==========================================================================//
  20. //                                Local Data                                //
  21. //==========================================================================//
  22.  
  23.  
  24.  
  25. static RECT    TFrameRectWindow ;
  26.  
  27. //==========================================================================//
  28. //                              Local Functions                             //
  29. //==========================================================================//
  30.  
  31.  
  32. void ClearSystemTime (SYSTEMTIME *pSystemTime)
  33.    {  // ClearSystemTime
  34.    pSystemTime->wYear = 0 ;
  35.    pSystemTime->wMonth = 0 ;
  36.    pSystemTime->wDayOfWeek = 0 ;
  37.    pSystemTime->wDay = 0 ;
  38.    pSystemTime->wHour = 0 ;
  39.    pSystemTime->wMinute = 0 ;
  40.    pSystemTime->wSecond = 0 ;
  41.    pSystemTime->wMilliseconds = 0 ;
  42.    }  // ClearSystemTime
  43.  
  44.  
  45. //==========================================================================//
  46. //                              Message Handlers                            //
  47. //==========================================================================//
  48.  
  49.  
  50. void static OnInitDialog (HDLG hDlg)
  51.    {  // OnInitDialog
  52.    PBOOKMARK      pBookmark ;
  53.    int            iIndex ;
  54.    TCHAR          szText [20+20+BookmarkCommentLen] ;
  55.    TCHAR          szDate [20] ;
  56.    TCHAR          szTime [20] ;
  57.    int            iBookmarksNum ;   
  58.    HWND           hWndTLine ;
  59.    HWND           hWndBookmarks ;
  60.    int            currentTextExtent = 0 ;
  61.    int            maxTextExtent = 0 ;
  62.    HDC            hDC = 0 ;
  63.    HFONT          hFont ;
  64.  
  65.    hWndTLine = DialogControl (hDlg, IDD_TIMEFRAMETIMELINE) ;
  66.    hWndBookmarks = DialogControl (hDlg, IDD_TIMEFRAMEBOOKMARKS) ;
  67.    SetFont (hWndBookmarks, hFontScales) ;
  68.    LBSetHorzExtent (hWndBookmarks, 0) ;
  69.  
  70.    TLineSetRange (hWndTLine, 0, PlaybackLog.iTotalTics - 1) ;
  71.    TLineSetStart (hWndTLine, PlaybackLog.StartIndexPos.iPosition) ;
  72.    TLineSetStop (hWndTLine, PlaybackLog.StopIndexPos.iPosition) ;
  73.  
  74.    iBookmarksNum = 0 ;
  75.    pBookmark = PlaybackLog.pBookmarkFirst ;
  76.  
  77.    if (pBookmark)
  78.       {
  79.       hDC = GetDC (hWndBookmarks) ;
  80.       if (hDC)
  81.          {
  82.          hFont = (HFONT)SendMessage(hWndBookmarks, WM_GETFONT, 0, 0L);
  83.          if (hFont)
  84.             SelectObject(hDC, hFont);
  85.          }
  86.  
  87.       while (pBookmark)
  88.          {
  89.          SystemTimeDateString (&(pBookmark->SystemTime), szDate) ;
  90.          SystemTimeTimeString (&(pBookmark->SystemTime), szTime, TRUE) ;
  91.          TSPRINTF (szText, TEXT(" %s  %s  %s"),
  92.             szDate, szTime,
  93.             pBookmark->szComment) ;
  94.          iIndex = LBAdd (hWndBookmarks, szText) ;
  95.          LBSetData (hWndBookmarks, iIndex, pBookmark->iTic) ;
  96.  
  97.          // get the biggest text width
  98.          if (hDC)
  99.             {
  100.             currentTextExtent = TextWidth (hDC, szText) + xScrollWidth / 2 ;
  101.             if (currentTextExtent > maxTextExtent)
  102.                {
  103.                maxTextExtent = currentTextExtent ;
  104.                }
  105.             }
  106.  
  107.          pBookmark = pBookmark->pBookmarkNext ;
  108.          }
  109.  
  110.       LBSetSelection (hWndBookmarks, 0) ;
  111.  
  112.       iBookmarksNum = LBNumItems (hWndBookmarks) ;
  113.       }
  114.  
  115.    if (iBookmarksNum == 0)
  116.       {
  117.       DialogEnable (hDlg, IDD_TIMEFRAMEBOOKMARKS, FALSE) ;
  118.       DialogEnable (hDlg, IDD_TIMEFRAMEBOOKMARKGRP, FALSE) ;
  119.       DialogEnable (hDlg, IDD_TIMEFRAMESETSTART, FALSE) ;
  120.       DialogEnable (hDlg, IDD_TIMEFRAMESETSTOP, FALSE) ;
  121.       }
  122.    else
  123.       {
  124.       LBSetHorzExtent (hWndBookmarks, maxTextExtent) ;
  125.       }
  126.  
  127.    if (hDC)
  128.       {
  129.       ReleaseDC (hWndBookmarks, hDC) ;
  130.       }
  131.  
  132.    if (TFrameRectWindow.right == TFrameRectWindow.left)
  133.       {
  134.       // we have not initialize this data yet.
  135.       // will get init. after the first time frame window invoke
  136.       WindowCenter (hDlg) ;
  137.       }
  138.    else
  139.       {
  140.       // show it in its previous position
  141.       MoveWindow (hDlg,
  142.                  TFrameRectWindow.left,
  143.                  TFrameRectWindow.top,
  144.                  TFrameRectWindow.right - TFrameRectWindow.left,
  145.                  TFrameRectWindow.bottom - TFrameRectWindow.top,
  146.                  TRUE) ;
  147.       }
  148.  
  149.    dwCurrentDlgID = HC_PM_idDlgEditTimeFrame ;
  150.  
  151.    }  // OnInitDialog
  152.  
  153.  
  154. void static OnTLineInterval (HDLG hDlg, 
  155.                              int iInterval, 
  156.                              SYSTEMTIME *pSystemTime)
  157.    {  // OnTLineInterval
  158.    PLOGINDEX      pIndex ;
  159.  
  160.  
  161.    pIndex = PlaybackIndexN (iInterval) ;
  162.  
  163.    if (pIndex)
  164.       *pSystemTime = pIndex->SystemTime ;
  165.    else
  166.       ClearSystemTime (pSystemTime) ;
  167.    }  // OnTLineInterval
  168.  
  169.  
  170. void static OnOK (HDLG hDlg)
  171.    {  // OnOK
  172.    LOGPOSITION    lp ;
  173.    int            iIndex ;
  174.    HWND           hWndTLine = DialogControl (hDlg, IDD_TIMEFRAMETIMELINE) ;
  175.  
  176.    iIndex = TLineStart (hWndTLine) ;
  177.    if (LogPositionN (iIndex, &lp)) ;
  178.       PlaybackLog.StartIndexPos = lp ;
  179.  
  180.    iIndex = TLineStop (hWndTLine) ;
  181.    if (LogPositionN (iIndex, &lp))
  182.       PlaybackLog.StopIndexPos = lp ;
  183.  
  184.    
  185.    PlaybackLog.iSelectedTics = 
  186.       PlaybackLog.StopIndexPos.iPosition -
  187.       PlaybackLog.StartIndexPos.iPosition + 1 ;
  188.  
  189.    PlaybackChart (hWndGraph) ;
  190.    PlaybackAlert (hWndAlert, 0) ;
  191.    PlaybackReport (hWndReport) ;
  192.  
  193.    WindowInvalidate (PerfmonViewWindow ()) ;
  194.  
  195.    GetWindowRect (hDlg, &TFrameRectWindow) ;
  196.  
  197.    dwCurrentDlgID = 0 ;
  198.    }  // OnOK
  199.  
  200. void static OnCancel (HWND hWnd)
  201.    {
  202.    HDC            hGraphDC ;
  203.    PGRAPHSTRUCT   pGraph ;
  204.  
  205.    pGraph = GraphData (hWndGraph) ;
  206.    hGraphDC = GetDC (hWndGraph) ;
  207.    if (!hGraphDC || !pGraph)
  208.       {
  209.       return ;
  210.       }
  211.  
  212.    TLineRedraw (hGraphDC, pGraph) ;
  213.  
  214.    GetWindowRect (hWnd, &TFrameRectWindow) ;
  215.  
  216.    dwCurrentDlgID = 0 ;
  217.    }
  218.  
  219.  
  220. void OnSetStartStop (HWND hDlg, BOOL bSetStart)
  221.    {
  222.    int            iTic ;
  223.    int            iStopTic ;
  224.    int            iStartTic ;
  225.    HWND           hWndTLine = DialogControl (hDlg, IDD_TIMEFRAMETIMELINE) ;
  226.    HWND           hWndBookmarks = DialogControl (hDlg, IDD_TIMEFRAMEBOOKMARKS) ;
  227.  
  228.    iStartTic = TLineStart (hWndTLine) ;
  229.    iStopTic = TLineStop (hWndTLine) ;
  230.  
  231.    iTic = LBData (hWndBookmarks, LBSelection (hWndBookmarks)) ;
  232.    if ((bSetStart && iStopTic <= iTic) ||
  233.       (!bSetStart && iStartTic >= iTic))
  234.       {
  235.       DlgErrorBox (hDlg, ERR_STOPBEFORESTART) ;
  236.       }
  237.    else
  238.       {
  239.       if (bSetStart)
  240.          {
  241.          TLineSetStart (hWndTLine, iTic) ;
  242.          }
  243.       else
  244.          {
  245.          TLineSetStop (hWndTLine, iTic) ;
  246.          }
  247.       WindowInvalidate (hWndTLine) ;
  248.       }
  249.    }  // OnSetStartStop
  250.  
  251.  
  252. //==========================================================================//
  253. //                             Exported Functions                           //
  254. //==========================================================================//
  255.  
  256.  
  257. int FAR WINAPI TimeframeDlgProc (HWND hDlg, 
  258.                                  unsigned iMessage, 
  259.                                  WPARAM wParam, 
  260.                                  LONG lParam)
  261.    {
  262.    BOOL           bHandled ;
  263.  
  264.    bHandled = TRUE ;
  265.    switch (iMessage)
  266.       {
  267.       case TL_INTERVAL:
  268.          OnTLineInterval (hDlg, wParam, (SYSTEMTIME *) lParam) ;
  269.          break ;
  270.  
  271.       case WM_INITDIALOG:
  272.          OnInitDialog (hDlg) ;
  273.          return  (TRUE) ;
  274.  
  275.       case WM_CLOSE:
  276.          OnCancel (hDlg) ;
  277.          EndDialog (hDlg, 0) ;
  278.          break ;
  279.  
  280.       case WM_COMMAND:
  281.          switch(wParam)
  282.             {
  283.             case IDD_OK:
  284.                SetHourglassCursor() ;
  285.                OnOK (hDlg) ;
  286.                SetArrowCursor() ;
  287.                EndDialog (hDlg, 1) ;
  288.                break ;
  289.  
  290.             case IDD_TIMEFRAMESETSTART:
  291.             case IDD_TIMEFRAMESETSTOP:
  292.                OnSetStartStop (hDlg, wParam == IDD_TIMEFRAMESETSTART) ;
  293.                break ;
  294.  
  295.             case IDD_CANCEL:
  296.                OnCancel (hDlg) ;
  297.                GetWindowRect (hDlg, &TFrameRectWindow) ;
  298.                EndDialog (hDlg, 0) ;
  299.                break ;
  300.  
  301.             case IDD_TIMEFRAMEHELP:
  302.                CallWinHelp (dwCurrentDlgID) ;
  303.                break ;
  304.  
  305.             default:
  306.                bHandled = FALSE ;
  307.                break;
  308.             }
  309.          break;
  310.  
  311.  
  312.       default:
  313.             bHandled = FALSE ;
  314.          break ;            
  315.       }  // switch
  316.  
  317.    return (bHandled) ;
  318.    }  // TimeframeDlgProc
  319.  
  320.  
  321.  
  322. BOOL SetTimeframe (HWND hWndParent)
  323.    {  // SetTimeframe
  324.    if (DialogBox (hInstance, idDlgTimeframe,
  325.                   hWndParent, (DLGPROC) TimeframeDlgProc))
  326.       {
  327.       return (TRUE) ;
  328.       }
  329.    return (FALSE) ;
  330.    }
  331.  
  332.