Annotation of mstools/samples/sdktools/perfmon/timeline.c, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3: 
                      4: //==========================================================================//
                      5: //                                  Includes                                //
                      6: //==========================================================================//
                      7: 
                      8: 
                      9: #include "perfmon.h"
                     10: #include "intrline.h"
                     11: #include "pmemory.h"        // for MemoryXXX (mallloc-type) routines
                     12: #include "timeline.h"
                     13: #include "perfmops.h"       // for SystemTimeDateString, et al.
                     14: #include "utils.h"
                     15: #include "grafdata.h"       // for GraphData
                     16: 
                     17: //==========================================================================//
                     18: //                                  Typedefs                                //
                     19: //==========================================================================//
                     20: 
                     21: typedef struct CHARTDATAPOINTSTRUCT
                     22:    {
                     23:    int         iLogIndex ;
                     24:    int         xDispDataPoint ;
                     25:    } CHARTDATAPOINT, *PCHARTDATAPOINT ;
                     26: 
                     27: typedef struct TLINESTRUCT
                     28:    {  // TLINE
                     29:    HWND              hWndILine ;
                     30:    HFONT             hFont ;
                     31: 
                     32:    SYSTEMTIME        SystemTimeBegin ;
                     33:    SYSTEMTIME        SystemTimeEnd ;
                     34: 
                     35:    int               yFontHeight ;
                     36:    int               xMaxTimeWidth ;
                     37:    int               xBegin ;
                     38:    int               xEnd ;
                     39:    
                     40:    RECT              rectStartDate ;
                     41:    RECT              rectStartTime ;
                     42:    RECT              rectStopDate ;
                     43:    RECT              rectStopTime ;
                     44: 
                     45:    PCHARTDATAPOINT   pChartDataPoint ;
                     46:    int               iCurrentStartPos ;
                     47:    int               iCurrentStopPos ;
                     48:    } TLINE ;
                     49: 
                     50: typedef TLINE *PTLINE ;
                     51: 
                     52: void PlaybackChartDataPoint (PCHARTDATAPOINT pChartDataPoint) ;
                     53: 
                     54: 
                     55: //==========================================================================//
                     56: //                                  Constants                               //
                     57: //==========================================================================//
                     58: 
                     59: 
                     60: #define dwTLineClassStyle     (CS_HREDRAW | CS_VREDRAW)
                     61: #define iTLineClassExtra      (0)
                     62: #define iTLineWindowExtra     (sizeof (PTLINE))
                     63: #define dwTLineWindowStyle    (WS_CHILD | WS_VISIBLE) 
                     64: 
                     65: HWND  hTLineWnd ;
                     66: BOOL  TLineWindowUp ;
                     67: 
                     68: 
                     69: 
                     70: PTLINE TLData (HWND hWndTL)
                     71:    {
                     72:    return ((PTLINE) GetWindowLong (hWndTL, 0)) ;
                     73:    }
                     74: 
                     75: 
                     76: PTLINE AllocateTLData (HWND hWndTL)
                     77:    {
                     78:    PTLINE         pTLine ;
                     79:    PGRAPHSTRUCT   pGraph ;
                     80: 
                     81:    pGraph = GraphData (hWndGraph) ;
                     82: 
                     83:    pTLine = MemoryAllocate (sizeof (TLINE)) ;
                     84: 
                     85:    
                     86:    // see if we have to draw the timeline
                     87:    if (pGraph &&
                     88:       iPerfmonView == IDM_VIEWCHART &&
                     89:       pGraph->pLineFirst &&
                     90:       pGraph->gOptions.iGraphOrHistogram == LINE_GRAPH)
                     91:       {
                     92:       pTLine->pChartDataPoint =
                     93:          MemoryAllocate (sizeof(CHARTDATAPOINT) *
                     94:          (pGraph->gTimeLine.iValidValues+1)) ;
                     95: 
                     96: 
                     97:       if (pTLine->pChartDataPoint != NULL)
                     98:          {
                     99:          PlaybackChartDataPoint (pTLine->pChartDataPoint) ;
                    100:          }
                    101:       }
                    102: 
                    103:    SetWindowLong (hWndTL, 0, (LONG) pTLine) ;
                    104: 
                    105:    return (pTLine) ;
                    106:    }
                    107: 
                    108: 
                    109: int MaxTimeWidth (HDC hDC, 
                    110:                   PTLINE pTLine)
                    111: /*
                    112:    Effect:        Return a reasonable maximum number of pixels to hold
                    113:                   expected time and date strings.  
                    114: 
                    115:    To Do:         When we use the alleged local-date and local-time display
                    116:                   functions, we will modify this routine to use them.
                    117: */
                    118:    {  // MaxTimeWidth
                    119:    return (max (TextWidth (hDC, TEXT(" 99 XXX 99 ")),
                    120:                 TextWidth (hDC, TEXT(" 99:99:99.9 PM ")))) ;
                    121:    }  // MaxTimeWidth
                    122: 
                    123: 
                    124: void TLGetSystemTimeN (HWND hWnd,   
                    125:                        int iInterval,
                    126:                        SYSTEMTIME *pSystemTime)
                    127:    {  // TLGetSystemTimeN
                    128:    SendMessage (WindowParent (hWnd), 
                    129:                 TL_INTERVAL, 
                    130:                 iInterval, (LPARAM) pSystemTime) ;
                    131:    }  // TLGetSystemTimeN
                    132: 
                    133: 
                    134: 
                    135: void static TLDrawBeginEnd (HDC hDC,
                    136:                             PTLINE pTLine)
                    137:    {
                    138:    TCHAR         szDate [20] ;
                    139:    TCHAR         szTime [20] ;
                    140: 
                    141:    SetTextAlign (hDC, TA_TOP) ;
                    142:    SelectFont (hDC, pTLine->hFont) ;
                    143: 
                    144:    // Draw the begin time
                    145: 
                    146:    SystemTimeDateString (&(pTLine->SystemTimeBegin), szDate) ;
                    147:    SystemTimeTimeString (&(pTLine->SystemTimeBegin), szTime) ;
                    148: 
                    149:    SetTextAlign (hDC, TA_RIGHT) ;
                    150:    TextOut (hDC, pTLine->xBegin, 0, 
                    151:             szDate, lstrlen (szDate)) ;
                    152:    TextOut (hDC, pTLine->xBegin, pTLine->yFontHeight,
                    153:             szTime, lstrlen (szTime)) ;
                    154: 
                    155:    // Draw The end time
                    156: 
                    157:    SystemTimeDateString (&(pTLine->SystemTimeEnd), szDate) ;
                    158:    SystemTimeTimeString (&(pTLine->SystemTimeEnd), szTime) ;
                    159: 
                    160:    SetTextAlign (hDC, TA_LEFT) ;
                    161:    TextOut (hDC, pTLine->xEnd, 0,
                    162:             szDate, lstrlen (szDate)) ;
                    163:    TextOut (hDC, 
                    164:             pTLine->xEnd, 
                    165:             pTLine->yFontHeight,
                    166:             szTime, lstrlen (szTime)) ;
                    167:    }
                    168: 
                    169: void TLineRedraw (HDC hGraphDC, PGRAPHSTRUCT pGraph)
                    170:    {
                    171:    PTLINE         pTLine ;
                    172: 
                    173:    if (!hTLineWnd)
                    174:       {
                    175:       return ;
                    176:       }
                    177: 
                    178:    pTLine = TLData (hTLineWnd) ;
                    179:    if (pTLine == NULL)
                    180:       {
                    181:       return ;
                    182:       }
                    183: 
                    184:    if (pTLine->iCurrentStartPos)
                    185:       {
                    186:       // redraw start line
                    187:       PatBlt (hGraphDC, pTLine->iCurrentStartPos, pGraph->rectData.top,
                    188:          1, pGraph->rectData.bottom - pGraph->rectData.top + 1,
                    189:          DSTINVERT) ;
                    190:       }
                    191: 
                    192:    if (pTLine->iCurrentStopPos)
                    193:       {
                    194:       // redraw stop line
                    195:       PatBlt (hGraphDC, pTLine->iCurrentStopPos, pGraph->rectData.top,
                    196:          1, pGraph->rectData.bottom - pGraph->rectData.top+ 1,
                    197:          DSTINVERT) ;
                    198:       }
                    199:    }  // TLineRedraw
                    200: 
                    201: void DrawOneTimeIndicator (PTLINE pTLine,
                    202:                            PGRAPHSTRUCT pGraph,
                    203:                            HDC hGraphDC,
                    204:                            int iPos,
                    205:                            int *pCurrentPos)
                    206:    {
                    207:    int               xPos ;
                    208:    PCHARTDATAPOINT   pDataPoint ;
                    209: 
                    210:    // check if it is within current selected range
                    211:    if (iPos >= PlaybackLog.StartIndexPos.iPosition &&
                    212:       iPos <= PlaybackLog.StopIndexPos.iPosition)
                    213:       {
                    214: 
                    215:       xPos = 0 ;
                    216:       pDataPoint = pTLine->pChartDataPoint ;
                    217: 
                    218:       // check for the x position of this Log Index
                    219:       while (pDataPoint->iLogIndex != 0)
                    220:          {
                    221:          if (iPos >= pDataPoint->iLogIndex)
                    222:             {
                    223:             if ((pDataPoint+1)->iLogIndex == 0)
                    224:                {
                    225:                // we have reached the end
                    226:                xPos = pDataPoint->xDispDataPoint ;
                    227:                break ;
                    228:                }
                    229:             else if (iPos <= (pDataPoint+1)->iLogIndex)
                    230:                {
                    231:                // we have found the Log index
                    232:                xPos = (pDataPoint+1)->xDispDataPoint ;
                    233:                break ;
                    234:                }
                    235:             }
                    236:          else
                    237:             {
                    238:             // no need to continue if iPos is smaller than the 
                    239:             // first Log index on the chart
                    240:             break ;
                    241:             }
                    242: 
                    243:          pDataPoint++ ;
                    244:          }
                    245: 
                    246:       if (xPos != *pCurrentPos)
                    247:          {
                    248:          if (*pCurrentPos)
                    249:             {
                    250:             // erase the old line
                    251:             PatBlt (hGraphDC, *pCurrentPos, pGraph->rectData.top,
                    252:                1, pGraph->rectData.bottom - pGraph->rectData.top + 1,
                    253:                DSTINVERT) ;
                    254:             }
                    255: 
                    256:          // draw the new line
                    257:          *pCurrentPos = xPos ;
                    258: 
                    259:          if (xPos > 0)
                    260:             {
                    261:             PatBlt (hGraphDC, xPos, pGraph->rectData.top,
                    262:                1, pGraph->rectData.bottom - pGraph->rectData.top + 1,
                    263:                DSTINVERT) ;
                    264:             }
                    265:          }
                    266:       }
                    267:    else
                    268:       {
                    269:       if (*pCurrentPos)
                    270:          {
                    271:          // erase the old line
                    272:          PatBlt (hGraphDC, *pCurrentPos, pGraph->rectData.top,
                    273:             1, pGraph->rectData.bottom - pGraph->rectData.top + 1,
                    274:             DSTINVERT) ;
                    275:          }
                    276: 
                    277:       *pCurrentPos = 0 ;
                    278:       }
                    279:    }  // DrawOneTimeIndicator
                    280: 
                    281: void DrawTimeIndicators (PTLINE pTLine, int iStart, int iStop)
                    282:    {
                    283: 
                    284:    HDC            hGraphDC ;
                    285:    PGRAPHSTRUCT   pGraph ;
                    286: 
                    287:    pGraph = GraphData (hWndGraph) ;
                    288:    hGraphDC = GetDC (hWndGraph) ;
                    289:    if (!hGraphDC || !pGraph)
                    290:       {
                    291:       return ;
                    292:       }
                    293: 
                    294:    DrawOneTimeIndicator (pTLine, pGraph, hGraphDC, iStart, &pTLine->iCurrentStartPos) ;
                    295:    DrawOneTimeIndicator (pTLine, pGraph, hGraphDC, iStop, &pTLine->iCurrentStopPos) ;
                    296: 
                    297:    ReleaseDC (hWndGraph, hGraphDC) ;
                    298:    }
                    299: 
                    300: void static TLDrawStartStop (HWND hWnd,
                    301:                              HDC hDC,
                    302:                              PTLINE pTLine)
                    303: /*
                    304:    Effect:        Draw the start and stop date/times on the bottom of the
                    305:                   timeline. Draw the start date/time right justified at the
                    306:                   outer edge of the start point and the stop date/time left
                    307:                   justified with the outer edge of the stop point.
                    308: 
                    309:                   Erase previous start and stop date/times in the process.
                    310: */
                    311:    {  // TLDrawStartStop
                    312:    RECT           rectDate ;
                    313:    RECT           rectTime ;
                    314:    RECT           rectOpaque ;
                    315: 
                    316:    TCHAR          szDate [30] ;
                    317:    TCHAR          szTime [30] ;
                    318: 
                    319:    int            xStart ;
                    320:    int            xStop ;
                    321: 
                    322:    int            iStart ;
                    323:    int            iStop ;
                    324: 
                    325:    SYSTEMTIME     SystemTimeStart ;
                    326:    SYSTEMTIME     SystemTimeStop ;
                    327: 
                    328:    int            xDateTimeWidth ;
                    329: 
                    330: 
                    331:    SelectFont (hDC, pTLine->hFont) ;
                    332:    SetTextAlign (hDC, TA_TOP) ;
                    333: 
                    334:    //=============================//
                    335:    // Get Start Information       //
                    336:    //=============================//
                    337: 
                    338:    xStart = pTLine->xBegin + ILineXStart (pTLine->hWndILine) ;
                    339: 
                    340:    iStart = ILineStart (pTLine->hWndILine) ;
                    341:    TLGetSystemTimeN (hWnd, iStart, &SystemTimeStart) ;
                    342:    SystemTimeDateString (&SystemTimeStart, szDate) ;
                    343:    SystemTimeTimeString (&SystemTimeStart, szTime) ;
                    344: 
                    345:    xDateTimeWidth = max (TextWidth (hDC, szDate),
                    346:                          TextWidth (hDC, szTime)) ;
                    347: 
                    348:    //=============================//
                    349:    // Write Start Date            //
                    350:    //=============================//
                    351: 
                    352:    rectDate.left = xStart - xDateTimeWidth ;
                    353:    rectDate.top = pTLine->rectStartDate.top ;
                    354:    rectDate.right = xStart ;
                    355:    rectDate.bottom = pTLine->rectStartDate.bottom ;
                    356:  
                    357:    SetTextAlign (hDC, TA_RIGHT) ;
                    358:    UnionRect (&rectOpaque, &pTLine->rectStartDate, &rectDate) ;
                    359: 
                    360:    ExtTextOut (hDC, 
                    361:                rectDate.right, rectDate.top,
                    362:                ETO_OPAQUE,
                    363:                &rectOpaque,
                    364:                szDate, lstrlen (szDate),
                    365:                NULL) ;
                    366:    pTLine->rectStartDate = rectDate ;
                    367: 
                    368:    //=============================//
                    369:    // Write Start Time            //
                    370:    //=============================//
                    371:    
                    372:    rectTime.left = rectDate.left ;
                    373:    rectTime.top = pTLine->rectStartTime.top ;
                    374:    rectTime.right = rectDate.right ;
                    375:    rectTime.bottom = pTLine->rectStartTime.bottom ;
                    376: 
                    377:    UnionRect (&rectOpaque, &pTLine->rectStartTime, &rectTime) ;
                    378: 
                    379:    ExtTextOut (hDC, 
                    380:                rectTime.right, rectTime.top,
                    381:                ETO_OPAQUE,
                    382:                &rectOpaque,
                    383:                szTime, lstrlen (szTime),
                    384:                NULL) ;
                    385:    pTLine->rectStartTime = rectTime ;
                    386: 
                    387: 
                    388:    //=============================//
                    389:    // Get Stop Information        //
                    390:    //=============================//
                    391: 
                    392:    xStop = pTLine->xBegin + ILineXStop (pTLine->hWndILine) ;
                    393: 
                    394:    iStop = ILineStop (pTLine->hWndILine) ;
                    395:    TLGetSystemTimeN (hWnd, iStop, &SystemTimeStop) ;
                    396:    SystemTimeDateString (&SystemTimeStop, szDate) ;
                    397:    SystemTimeTimeString (&SystemTimeStop, szTime) ;
                    398: 
                    399:    xDateTimeWidth = max (TextWidth (hDC, szDate),
                    400:                          TextWidth (hDC, szTime)) ;
                    401: 
                    402:    //=============================//
                    403:    // Write Stop Date             //
                    404:    //=============================//
                    405: 
                    406:    rectDate.left = xStop ;
                    407:    rectDate.top = pTLine->rectStopDate.top ;
                    408:    rectDate.right = xStop + xDateTimeWidth ;
                    409:    rectDate.bottom = pTLine->rectStopDate.bottom ;
                    410:  
                    411:    SetTextAlign (hDC, TA_LEFT) ;
                    412:    UnionRect (&rectOpaque, &pTLine->rectStopDate, &rectDate) ;
                    413: 
                    414:    ExtTextOut (hDC, 
                    415:                rectDate.left, rectDate.top,
                    416:                ETO_OPAQUE,
                    417:                &rectOpaque,
                    418:                szDate, lstrlen (szDate),
                    419:                NULL) ;
                    420:    pTLine->rectStopDate = rectDate ;
                    421: 
                    422:    //=============================//
                    423:    // Write Stop Time             //
                    424:    //=============================//
                    425:    
                    426:    rectTime.left = rectDate.left ;
                    427:    rectTime.top = pTLine->rectStopTime.top ;
                    428:    rectTime.right = rectDate.right ;
                    429:    rectTime.bottom = pTLine->rectStopTime.bottom ;
                    430: 
                    431:    UnionRect (&rectOpaque, &pTLine->rectStopTime, &rectTime) ;
                    432: 
                    433:    ExtTextOut (hDC, 
                    434:                rectTime.left, rectTime.top,
                    435:                ETO_OPAQUE,
                    436:                &rectOpaque,
                    437:                szTime, lstrlen (szTime),
                    438:                NULL) ;
                    439:    pTLine->rectStopTime = rectTime ;
                    440: 
                    441:    if (pTLine->pChartDataPoint)
                    442:       {
                    443:       DrawTimeIndicators (pTLine, iStart, iStop) ;
                    444:       }
                    445:    }  // TLDrawStartStop
                    446: 
                    447: 
                    448: 
                    449: //==========================================================================//
                    450: //                              Message Handlers                            //
                    451: //==========================================================================//
                    452: 
                    453: 
                    454: 
                    455: void static OnCreate (HWND hWnd)
                    456:    {  // OnCreate
                    457:    PTLINE         pTLine ;
                    458:    HDC            hDC ;
                    459: 
                    460:    pTLine = AllocateTLData (hWnd) ;
                    461:    
                    462:    pTLine->hFont = hFontScales ;
                    463: 
                    464:    hDC = GetDC (hWnd) ;
                    465:    SelectFont (hDC, hFontScales) ;
                    466: 
                    467:    pTLine->yFontHeight = FontHeight (hDC, TRUE) ;
                    468:    pTLine->xMaxTimeWidth = MaxTimeWidth (hDC, pTLine) ;
                    469: 
                    470:    ReleaseDC (hWnd, hDC) ;
                    471: 
                    472:    hTLineWnd = hWnd ;
                    473:    TLineWindowUp = TRUE ;
                    474: 
                    475:    pTLine->hWndILine = 
                    476:       CreateWindow (szILineClass,                  // class
                    477:                     NULL,                          // caption
                    478:                     (WS_VISIBLE | WS_CHILD),       // window style
                    479:                     0, 0,                          // position
                    480:                     0, 0,                          // size
                    481:                     hWnd,                          // parent window
                    482:                     NULL,                          // menu          
                    483:                     hInstance,                     // program instance
                    484:                     NULL) ;                        // user-supplied data
                    485:    }  // OnCreate
                    486: 
                    487: 
                    488: void static OnDestroy (HWND hWnd)
                    489:    {
                    490:    PTLINE         pTLine ;
                    491: 
                    492:    pTLine = TLData (hWnd) ;
                    493: 
                    494:    if (pTLine->pChartDataPoint)
                    495:       {
                    496:       MemoryFree (pTLine->pChartDataPoint) ;
                    497:       }
                    498: 
                    499:    MemoryFree (pTLine) ;
                    500: 
                    501:    hTLineWnd = 0 ;
                    502:    TLineWindowUp = FALSE ;
                    503: 
                    504:    }
                    505: 
                    506: 
                    507: void static OnSize (HWND hWnd,
                    508:                     int xWidth,
                    509:                     int yHeight)
                    510: /*
                    511:    Effect:        Perform all actions needed when the size of the timeline
                    512:                   hWnd has changed. In particular, determine the appropriate
                    513:                   size for the ILine window and set the rectangles for the
                    514:                   top and bottom displays.
                    515: */
                    516:    {  // OnSize
                    517:    PTLINE         pTLine ;
                    518:    int            yLine ;
                    519:    int            yDate, yTime ;
                    520:    int            xEnd ;
                    521: 
                    522:    pTLine = TLData (hWnd) ;
                    523: 
                    524:    xEnd = xWidth - pTLine->xMaxTimeWidth ;
                    525:    yLine = pTLine->yFontHeight ;
                    526:    yDate = yHeight - 2 * yLine ;
                    527:    yTime = yHeight - yLine ;
                    528: 
                    529: 
                    530:    SetRect (&pTLine->rectStartDate,
                    531:             0, yDate, 0, yDate + yLine) ;
                    532: 
                    533:    SetRect (&pTLine->rectStartTime,
                    534:             0, yTime, 0, yTime + yLine) ;
                    535: 
                    536:    SetRect (&pTLine->rectStopDate,
                    537:             xEnd, yDate, xEnd, yDate + yLine) ;
                    538: 
                    539:    SetRect (&pTLine->rectStopTime,
                    540:             xEnd, yTime, xEnd, yTime + yLine) ;
                    541: 
                    542:    MoveWindow (pTLine->hWndILine,
                    543:                pTLine->xMaxTimeWidth, 2 * pTLine->yFontHeight,
                    544:                xWidth - 2 * pTLine->xMaxTimeWidth,
                    545:                yHeight - 4 * pTLine->yFontHeight,
                    546:                FALSE) ;
                    547: 
                    548:    pTLine->xBegin = pTLine->xMaxTimeWidth ;
                    549:    pTLine->xEnd = xWidth - pTLine->xMaxTimeWidth ;
                    550:    }  // OnSize
                    551: 
                    552: 
                    553: void static OnPaint (HWND hWnd)
                    554:    {
                    555:    HDC            hDC ;
                    556:    PAINTSTRUCT    ps ;
                    557:    PTLINE         pTLine ;
                    558: 
                    559:    hDC = BeginPaint (hWnd, &ps) ;
                    560: 
                    561:    pTLine = TLData (hWnd) ;
                    562:    TLDrawBeginEnd (hDC, pTLine) ;
                    563:    TLDrawStartStop (hWnd, hDC, pTLine) ;
                    564: 
                    565:    EndPaint (hWnd, &ps) ;
                    566:    }
                    567: 
                    568: 
                    569: void static OnILineChanged (HWND hWnd)
                    570:    {
                    571:    HDC            hDC ;
                    572:    PTLINE         pTLine ;
                    573: 
                    574:    pTLine = TLData (hWnd) ;
                    575: 
                    576:    hDC = GetDC (hWnd) ;
                    577:    TLDrawStartStop (hWnd, hDC, pTLine) ;
                    578:    ReleaseDC (hWnd, hDC) ;
                    579:    }
                    580: 
                    581: 
                    582: //==========================================================================//
                    583: //                             Exported Functions                           //
                    584: //==========================================================================//
                    585: 
                    586: 
                    587: LONG FAR PASCAL TLineWndProc (HWND hWnd,
                    588:                               unsigned msg,
                    589:                               WPARAM wParam,
                    590:                               LONG lParam)
                    591: /*
                    592:    Note:          This function must be declared in the application's
                    593:                   linker-definition file, perfmon.def file.
                    594: */
                    595:    {  // TLineWndProc
                    596:    BOOL           bCallDefWindowProc ;
                    597:    LONG           lReturnValue ;
                    598: 
                    599:    bCallDefWindowProc = FALSE ;
                    600:    lReturnValue = 0L ;
                    601: 
                    602:    switch (msg)
                    603:       {  // switch
                    604:       case WM_COMMAND:
                    605:          OnILineChanged (hWnd) ;
                    606:          break ;
                    607: 
                    608:       case WM_CREATE:
                    609:          OnCreate (hWnd) ;
                    610:          break ;
                    611: 
                    612:       case WM_DESTROY:
                    613:          OnDestroy (hWnd) ;
                    614:          break ;
                    615: 
                    616:       case WM_PAINT:
                    617:          OnPaint (hWnd) ;
                    618:          break ;
                    619: 
                    620:       case WM_SIZE:
                    621:          OnSize (hWnd, LOWORD (lParam), HIWORD (lParam)) ;
                    622:          break ;
                    623: 
                    624:       default:
                    625:          bCallDefWindowProc = TRUE ;
                    626:       }  // switch
                    627: 
                    628:    if (bCallDefWindowProc)
                    629:       lReturnValue = DefWindowProc (hWnd, msg, wParam, lParam) ;
                    630: 
                    631:    return (lReturnValue) ;
                    632:    }  // TLineWndProc
                    633: 
                    634: 
                    635: 
                    636: BOOL TLineInitializeApplication (void)
                    637: /*
                    638:    Effect:        Perform all initializations required before an application
                    639:                   can create an IntervalLine. In particular, register the 
                    640:                   IntervalLine window class.
                    641: 
                    642:    Called By:     The application, in its InitializeApplication routine.
                    643: 
                    644:    Returns:       Whether the class could be registered.
                    645: */
                    646:    {  // TLineInitializeApplication
                    647:    WNDCLASS       wc ;
                    648: 
                    649:    wc.style =           dwTLineClassStyle ;
                    650:    wc.lpfnWndProc =     TLineWndProc ;
                    651:    wc.cbClsExtra =      iTLineClassExtra ;
                    652:    wc.cbWndExtra =      iTLineWindowExtra ;
                    653:    wc.hInstance =       hInstance ;
                    654:    wc.hIcon =           NULL ;
                    655:    wc.hCursor =         LoadCursor (NULL, IDC_ARROW) ;
                    656:    wc.hbrBackground =   (HBRUSH) (COLOR_WINDOW + 1) ;
                    657:    wc.lpszMenuName =    NULL ;
                    658:    wc.lpszClassName =   szTLineClass ;
                    659: 
                    660:    return (RegisterClass (&wc)) ;
                    661:    }  // TLineInitializeApplication
                    662: 
                    663: 
                    664: void TLineSetRange (HWND hWnd, 
                    665:                     int iBegin, 
                    666:                     int iEnd)
                    667:    {
                    668:    PTLINE         pTLine ;
                    669: 
                    670:    pTLine = TLData (hWnd) ;
                    671: 
                    672:    ILineSetRange (pTLine->hWndILine, iBegin, iEnd) ;
                    673:    TLGetSystemTimeN (hWnd, iBegin, &pTLine->SystemTimeBegin) ;
                    674:    TLGetSystemTimeN (hWnd, iEnd, &pTLine->SystemTimeEnd) ;
                    675:    }
                    676: 
                    677: 
                    678: void TLineSetStart (HWND hWnd,
                    679:                     int iStart)
                    680:    {
                    681:    PTLINE         pTLine ;
                    682: 
                    683:    pTLine = TLData (hWnd) ;
                    684:    ILineSetStart (pTLine->hWndILine, iStart) ;
                    685:    }
                    686: 
                    687: 
                    688: void TLineSetStop (HWND hWnd,
                    689:                    int iStop)
                    690:    {
                    691:    PTLINE         pTLine ;
                    692: 
                    693:    pTLine = TLData (hWnd) ;
                    694:    ILineSetStop (pTLine->hWndILine, iStop) ;
                    695:    }
                    696: 
                    697: 
                    698: int TLineStart (HWND hWnd)
                    699:    {
                    700:    PTLINE         pTLine ;
                    701: 
                    702:    pTLine = TLData (hWnd) ;
                    703: 
                    704:    return (ILineStart (pTLine->hWndILine)) ;
                    705:    }
                    706: 
                    707: 
                    708: int TLineStop (HWND hWnd)
                    709:    {
                    710:    PTLINE         pTLine ;
                    711: 
                    712:    pTLine = TLData (hWnd) ;
                    713: 
                    714:    return (ILineStop (pTLine->hWndILine)) ;
                    715:    }
                    716: 
                    717: 

unix.superglobalmegacorp.com

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