Annotation of mstools/samples/sdktools/capview/listwin.cpp, revision 1.1

1.1     ! root        1: #include        <afxwin.h>
        !             2: #include        <afxdlgs.h>
        !             3: #include        <afxcoll.h>
        !             4: #include        <string.h>
        !             5: 
        !             6: #include        "types.h"
        !             7: #include        "resource.h"
        !             8: #include        "ranges.h"
        !             9: #include        "list.h"
        !            10: #include        "listwin.h"
        !            11: 
        !            12: 
        !            13: #define PAGESIZE 8
        !            14: 
        !            15: /*********************** GLOBAL DATA *****************************/
        !            16: 
        !            17: extern  LOGFONT DefaultFont;
        !            18: extern  HCURSOR HCursorSizer;
        !            19: extern  HCURSOR HCursorNormal;
        !            20: extern  HICON   HIconList;
        !            21: 
        !            22: 
        !            23: /*********************** CListWnd implementation **********************/
        !            24: 
        !            25: BEGIN_MESSAGE_MAP(CListWnd, CMDIChildWnd)
        !            26:        ON_WM_CREATE()
        !            27:        ON_WM_DESTROY()
        !            28:        ON_WM_MDIACTIVATE()
        !            29:        ON_WM_KEYDOWN()
        !            30:        ON_WM_LBUTTONDBLCLK()
        !            31:        ON_WM_LBUTTONDOWN()
        !            32:         ON_WM_LBUTTONUP()
        !            33:        ON_WM_MOUSEMOVE()
        !            34:        ON_WM_PAINT()
        !            35:        ON_WM_SIZE()
        !            36:        ON_WM_VSCROLL()
        !            37: 
        !            38:        ON_COMMAND( VK_UP, OnUp )
        !            39:        ON_COMMAND( VK_DOWN, OnDown )
        !            40:        ON_COMMAND( IDM_LIST_FONT, OnFont )
        !            41:        ON_COMMAND( IDM_LIST_RANGES, OnRanges )
        !            42:        ON_COMMAND( IDM_LIST_ALPHA, OnSortAlpha )
        !            43:        ON_COMMAND( IDM_LIST_CALLS, OnSortCalls )
        !            44:        ON_COMMAND( IDM_LIST_TIME, OnSortTime )
        !            45:        ON_COMMAND( IDM_LIST_PER_CALL, OnSortTimePer)
        !            46:        ON_COMMAND( IDM_LIST_CHILDREN, OnChildren)
        !            47: END_MESSAGE_MAP()
        !            48: 
        !            49: BOOL CListWnd::Create(LPCSTR szTitle, LONG style, const RECT& rect,
        !            50:        CMDIFrameWnd* parent)
        !            51: {
        !            52:     const char * pszStockClass = AfxRegisterWndClass(
        !            53:        CS_HREDRAW | CS_VREDRAW, NULL,
        !            54:        (HBRUSH) (COLOR_WINDOW+1), HIconList);
        !            55: 
        !            56:     rgl[0] = 0;
        !            57:     rgl[1] = 150;
        !            58:     rgl[2] = 200;
        !            59:     rgl[3] = 250;
        !            60:     rgl[4] = 300;
        !            61:     rgl[5] = 350;
        !            62:     rgl[6] = 400;
        !            63:     rgl[7] = 450;
        !            64:     rgl[8] = 500;
        !            65:     rgl[9] = 550;
        !            66:     rgl[10] = 600;
        !            67:     m_cxClient = 600;
        !            68:     fCapture = FALSE;
        !            69: 
        !            70:     return CMDIChildWnd::Create(pszStockClass, szTitle, style, rect, parent);
        !            71: }
        !            72: 
        !            73: 
        !            74: CListWnd::CListWnd()
        !            75: {
        !            76:     int i;
        !            77:     
        !            78:     m_pMenuCurrent = NULL;
        !            79:     m_bWindowActive = FALSE;
        !            80:     m_SortOrder = LIST_ALPHA;
        !            81:     logFont = DefaultFont;
        !            82:     fChildren = FALSE;
        !            83:     
        !            84:     for (i=0; i<MAX_NUM_RANGES; i++) {
        !            85:         rs.TextColor[i] = 0;
        !            86:         rs.BackColor[i] = RGB( 0, 0, 0);
        !            87:         rs.Above[i] = 101;
        !            88:     }
        !            89:     
        !            90:     rs.Above[0] = 0;  rs.BackColor[0] = RGB(   0,   0, 255);  
        !            91:     rs.TextColor[0] = 1;
        !            92:     rs.Above[1] = 1;  rs.BackColor[1] = RGB(   0, 255,   0);
        !            93:     rs.Above[2] = 2;  rs.BackColor[2] = RGB(   0, 255, 255);
        !            94:     rs.Above[3] = 5;  rs.BackColor[3] = RGB( 255, 255,   0);
        !            95:     rs.Above[4] = 20; rs.BackColor[4] = RGB( 255,   0,   0);
        !            96:     rs.Above[5] = 101;
        !            97:     rs.cRanges = 5;
        !            98: 
        !            99:     ratio = 0.33;
        !           100: 
        !           101:     return;
        !           102: }                               /* CListWnd::CListWnd() */
        !           103: 
        !           104: CListWnd::~CListWnd()
        !           105: {
        !           106:     if (m_bWindowActive) {
        !           107:        m_pMenuCurrent->Detach();
        !           108:     }
        !           109: }
        !           110: 
        !           111: void CListWnd::EndTiming()
        !           112: {
        !           113:     m_ListHead.SortByTotalTime();
        !           114:     m_ListHead.SortByPerTime();
        !           115:     m_ListHead.SortByCallCount();
        !           116:     m_ListHead.SortByTPerTime();
        !           117:     m_ListHead.SortByTimeAll();
        !           118:     pRight->ComputeWidths();
        !           119:     pLeft->ComputeWidths();
        !           120:     return;
        !           121: }
        !           122: 
        !           123: void CListWnd::InvalidateLine()
        !           124: {
        !           125:     CRect area(0, (m_nSelectLine - m_nVscrollPos ) * m_cyChar,
        !           126:                m_cxClient, (m_nSelectLine + 1 - m_nVscrollPos) * m_cyChar);
        !           127:     InvalidateRect( area );
        !           128: }
        !           129: 
        !           130: int CListWnd::OnCreate(LPCREATESTRUCT p)
        !           131: {
        !           132:     TEXTMETRIC  tm;
        !           133: 
        !           134:     CDC *       dc = GetDC();
        !           135:     dc->GetTextMetrics( &tm );
        !           136:     ReleaseDC( dc );
        !           137: 
        !           138:     m_cxChar = tm.tmAveCharWidth;
        !           139:     m_cxCaps = ( (tm.tmPitchAndFamily & 1) ? 3 : 2) * m_cxChar / 2;
        !           140:     m_cyChar = tm.tmHeight + tm.tmExternalLeading;
        !           141:     m_nMaxWidth = ( 20 ) * m_cxCaps;
        !           142:     m_nVscrollPos = 0;
        !           143: 
        !           144:     /*
        !           145:      */
        !           146: 
        !           147:     pLeft = new CListWndLeft;
        !           148:     pLeft->Create(WS_HSCROLL|WS_VISIBLE, rectDefault, this);
        !           149: 
        !           150:     pRight = new CListWndRight;
        !           151:     pRight->Create(WS_HSCROLL|WS_VISIBLE, rectDefault, this);
        !           152: 
        !           153:     return 0;
        !           154: }
        !           155: 
        !           156: 
        !           157: void CListWnd::OnDestroy()
        !           158: {
        !           159:   //  m_pMDIFrameWnd->SendMessage(WM_CHILDDESTROY, (UINT)m_hWnd, 0);
        !           160:     return;
        !           161: }
        !           162: 
        !           163: 
        !           164: void CListWnd::OnSize(UINT nType, int cx, int cy)
        !           165: {
        !           166:     int  cxOld = m_cxClient;
        !           167:     int  i;
        !           168: 
        !           169:     i = (int) (cx*ratio);
        !           170:     pLeft->MoveWindow(0, 0, i-1, cy);
        !           171:     pRight->MoveWindow(i+2, 0, cx-(i+2), cy);
        !           172: 
        !           173:     /* 
        !           174:      * Now set the scroll ranges
        !           175:      */
        !           176: 
        !           177:     m_cxClient = cx;
        !           178:     m_cyClient = max(cy, 1);
        !           179: 
        !           180:     m_nVscrollMax = max( 0, (int)( m_ListHead.GetCount() ) - m_cyClient / m_cyChar );
        !           181:     m_nVscrollPos = min( m_nVscrollPos, m_nVscrollMax );
        !           182:     
        !           183:     SetScrollRange( SB_VERT, 0, m_nVscrollMax, FALSE );
        !           184:     SetScrollPos( SB_VERT, m_nVscrollPos, TRUE );
        !           185: 
        !           186:     CMDIChildWnd::OnSize(nType, cx, cy);
        !           187: 
        !           188:     return;
        !           189: }
        !           190: 
        !           191: void CListWnd::OnMDIActivate(BOOL bActivate, CWnd * pActive,
        !           192:        CWnd* pDeactivate)
        !           193: {
        !           194:     CMDIFrameWnd * pFrame = m_pMDIFrameWnd;
        !           195:     CMenu *             pWinPopupMenu = NULL;
        !           196:     CMenu *             pMenu = NULL;
        !           197: 
        !           198:     m_bWindowActive = bActivate;
        !           199: 
        !           200:     if (bActivate) {
        !           201:        pMenu = new CMenu;
        !           202:        pMenu->LoadMenu("MdiMenuList");
        !           203:        pWinPopupMenu = pMenu->GetSubMenu(LISTWIN_MENU_POSITION);
        !           204: 
        !           205:        CMenu * pLastMenu = pFrame->MDISetMenu(pMenu,pWinPopupMenu);
        !           206:        pLastMenu->DestroyMenu();
        !           207: 
        !           208:        delete m_pMenuCurrent;
        !           209:        m_pMenuCurrent = pMenu;
        !           210:     } else {
        !           211:        pMenu = new CMenu;
        !           212:        pMenu->LoadMenu("MdiMenuInit");
        !           213:        pWinPopupMenu = pMenu->GetSubMenu(INIT_MENU_POS);
        !           214: 
        !           215:        CMenu * pLastMenu = pFrame->MDISetMenu(pMenu, pWinPopupMenu);
        !           216:        pLastMenu->DestroyMenu();
        !           217: 
        !           218:        delete m_pMenuCurrent;
        !           219:        m_pMenuCurrent = pMenu;
        !           220:     }
        !           221: 
        !           222:     pFrame->DrawMenuBar();
        !           223: }
        !           224: 
        !           225: void CListWnd::OnPaint()
        !           226: {
        !           227:     CPaintDC dc (this);
        !           228:     CRect       rt;
        !           229:     CBrush      b(RGB(0, 0, 0));
        !           230:     
        !           231:     dc.FillRect(&dc.m_ps.rcPaint, &b);
        !           232: 
        !           233:     return;
        !           234: }
        !           235: 
        !           236: void CListWnd::OnVScroll(UINT wParam, UINT pos, CScrollBar * p)
        !           237: {
        !           238:     pLeft->OnVScroll(wParam, pos, p);
        !           239:     m_nVscrollPos = pRight->OnVScroll(wParam, pos, p);
        !           240:     SetScrollPos( SB_VERT, m_nVscrollPos );
        !           241: 
        !           242:     return;
        !           243: }
        !           244: 
        !           245: void CListWnd::OnUp()
        !           246: {
        !           247:     InvalidateLine();
        !           248:     
        !           249:     if ( m_nSelectLine <= 0 ) {
        !           250:        m_nSelectLine = m_ListHead.GetCount() - 1;
        !           251:        m_nVscrollPos = max( 0, m_nSelectLine + 1 - ( m_cyClient / m_cyChar ) );
        !           252:        Invalidate( TRUE );
        !           253:     } else {
        !           254:        m_nSelectLine -= 1;
        !           255:        if (m_nSelectLine - m_nVscrollPos < 0) {
        !           256:            OnVScroll( SB_LINEUP, 0, NULL );
        !           257:        }
        !           258: 
        !           259:        if (m_nSelectLine - m_nVscrollPos > (m_cyClient / m_cyChar ) ) {
        !           260:            m_nVscrollPos = m_nSelectLine + 1 - (m_cyClient / m_cyChar);
        !           261:            SetScrollPos( SB_VERT, m_nVscrollPos, TRUE );
        !           262:            Invalidate( TRUE );
        !           263:        }
        !           264:        if (m_nSelectLine - m_nVscrollPos < 0) {
        !           265:            m_nVscrollPos = m_nSelectLine;
        !           266:            SetScrollPos( SB_VERT, m_nVscrollPos, TRUE );
        !           267:            Invalidate( TRUE );
        !           268:        }
        !           269:     }
        !           270: 
        !           271:     InvalidateLine();
        !           272: }
        !           273: 
        !           274: void CListWnd::OnDown()
        !           275: {
        !           276: 
        !           277:     InvalidateLine();
        !           278:     
        !           279:     if (( m_nSelectLine == (int)(m_ListHead.GetCount() - 1 )) ||
        !           280:        (m_nSelectLine == -1)) {
        !           281:        m_nSelectLine = 0;
        !           282:        m_nVscrollPos = 0;
        !           283:        Invalidate( TRUE );
        !           284:     } else {
        !           285:        m_nSelectLine += 1;
        !           286:        if ((m_nSelectLine - m_nVscrollPos + 1) > (m_cyClient/m_cyChar)) {
        !           287:            OnVScroll( SB_LINEDOWN, 0, NULL );
        !           288:        }
        !           289: 
        !           290:        if (m_nSelectLine - m_nVscrollPos > (m_cyClient / m_cyChar ) ) {
        !           291:            m_nVscrollPos = m_nSelectLine + 1 - (m_cyClient / m_cyChar);
        !           292:            SetScrollPos( SB_VERT, m_nVscrollPos, TRUE );
        !           293:            Invalidate( TRUE );
        !           294:        }
        !           295:        if (m_nSelectLine - m_nVscrollPos < 0) {
        !           296:            m_nVscrollPos = m_nSelectLine;
        !           297:            SetScrollPos( SB_VERT, m_nVscrollPos, TRUE );
        !           298:            Invalidate( TRUE );
        !           299:        }
        !           300:     }
        !           301: 
        !           302:     InvalidateLine();
        !           303: }
        !           304: 
        !           305: void CListWnd::OnKeyDown( UINT wParam, UINT, UINT )
        !           306: {
        !           307:     switch( wParam ) {
        !           308:     case VK_HOME:
        !           309:        OnVScroll( SB_TOP, 0, NULL );
        !           310:        break;
        !           311:     case VK_END:
        !           312:        OnVScroll( SB_BOTTOM, 0, NULL );
        !           313:        break;
        !           314: 
        !           315:     case VK_PRIOR:
        !           316:        OnVScroll( SB_PAGEUP, 0, NULL );
        !           317:        break;
        !           318: 
        !           319:     case VK_NEXT:
        !           320:        OnVScroll( SB_PAGEDOWN, 0, NULL );
        !           321:        break;
        !           322: 
        !           323:     case VK_LEFT:
        !           324:        OnHScroll( SB_PAGEUP, 0, NULL );
        !           325:        break;
        !           326: 
        !           327:     case VK_RIGHT:
        !           328:        OnHScroll( SB_PAGEDOWN, 0, NULL );
        !           329:        break;
        !           330:     }
        !           331: }
        !           332: 
        !           333: void CListWnd::OnLButtonDblClk( UINT wParam, CPoint location ) 
        !           334: {
        !           335: #if 0
        !           336:     if (m_nSelectLine == -1) {
        !           337:        OnLButtonDown( wParam, location );
        !           338:     }
        !           339:     OnEdit();
        !           340: #endif
        !           341: }
        !           342: 
        !           343: 
        !           344: 
        !           345: afx_msg void CListWnd::OnSortAlpha()
        !           346: {
        !           347:     m_pMenuCurrent->CheckMenuItem(IDM_LIST + (m_SortOrder & 7), MF_BYCOMMAND | MF_UNCHECKED);
        !           348:     m_SortOrder = LIST_ALPHA;
        !           349:     m_pMenuCurrent->CheckMenuItem(IDM_LIST + (m_SortOrder & 7), MF_BYCOMMAND | MF_CHECKED);
        !           350:     Invalidate(TRUE);
        !           351:     return;
        !           352: }                               /* CListWnd::OnSortAlpha() */
        !           353: 
        !           354: afx_msg void CListWnd::OnSortCalls()
        !           355: {
        !           356:     m_pMenuCurrent->CheckMenuItem(IDM_LIST + (m_SortOrder & 7), MF_BYCOMMAND | MF_UNCHECKED);
        !           357:     m_SortOrder = LIST_CALLS;
        !           358:     m_pMenuCurrent->CheckMenuItem(IDM_LIST + (m_SortOrder & 7), MF_BYCOMMAND | MF_CHECKED);
        !           359:     Invalidate(TRUE);
        !           360:     return;
        !           361: }                               /* CListWnd::OnSortCalls() */
        !           362: 
        !           363: afx_msg void CListWnd::OnSortTime()
        !           364: {
        !           365:     m_pMenuCurrent->CheckMenuItem(IDM_LIST + (m_SortOrder & 7), MF_BYCOMMAND | MF_UNCHECKED);
        !           366:     m_SortOrder = fChildren ? LIST_TIME_TOTAL : LIST_TIME;
        !           367:     m_pMenuCurrent->CheckMenuItem(IDM_LIST + (m_SortOrder & 7), MF_BYCOMMAND | MF_CHECKED);
        !           368:     Invalidate(TRUE);
        !           369:     return;
        !           370: }                               /* CListWnd::OnSortTime() */
        !           371: 
        !           372: afx_msg void CListWnd::OnSortTimePer()
        !           373: {
        !           374:     m_pMenuCurrent->CheckMenuItem(IDM_LIST + (m_SortOrder & 7), MF_BYCOMMAND | MF_UNCHECKED);
        !           375:     m_SortOrder = fChildren ? LIST_PER_TIME_TOTAL : LIST_PER_TIME;
        !           376:     m_pMenuCurrent->CheckMenuItem(IDM_LIST + (m_SortOrder & 7), MF_BYCOMMAND | MF_CHECKED);
        !           377:     Invalidate(TRUE);
        !           378:     return;
        !           379: }                               /* CListWnd::OnSortTimePer() */
        !           380: 
        !           381: void CListWnd::OnRanges()
        !           382: {
        !           383:     CFont       cFont;
        !           384:     CFont *     lpcFont;        
        !           385: 
        !           386:     DoRangesDlg(this, &rs);
        !           387: 
        !           388:     CClientDC cdc( this );
        !           389: 
        !           390:     cFont.CreateFontIndirect(&logFont);
        !           391:     lpcFont = cdc.SelectObject(&cFont);
        !           392: //    pTimerObj->AssignSizes( &cdc, fZoom, 0, &rs);
        !           393: //   SetRect( pTimerObj->AssignLocations()) ;
        !           394:    cdc.SelectObject(lpcFont);
        !           395: 
        !           396:     Invalidate(TRUE);
        !           397: 
        !           398:     return;
        !           399: }                               /* CListWnd::OnRanges() */
        !           400: 
        !           401: void CListWnd::OnFont()
        !           402: {
        !           403:    CFontDialog  fontDlg(&logFont);
        !           404:    
        !           405:    if (fontDlg.DoModal()) {
        !           406:    
        !           407:        pRight->ComputeWidths();
        !           408:        pLeft->ComputeWidths();
        !           409:    }
        !           410:    return;
        !           411: }                               /* CListWnd::OnFont() */
        !           412: 
        !           413: afx_msg void CListWnd::OnLButtonDown(UINT nFlags, CPoint pt)
        !           414: {
        !           415:     CClientDC       dc(this);
        !           416:     
        !           417:     fCapture = TRUE;
        !           418:     SetCapture();
        !           419:     rtCapture.SetRect(pt.x-1, 0, pt.x+1, m_cyClient);
        !           420:     dc.InvertRect(&rtCapture);
        !           421:     return;
        !           422: }                               /* CListWnd::OnLButtonDown() */
        !           423: 
        !           424: afx_msg void CListWnd::OnLButtonUp(UINT nFlags, CPoint pt)
        !           425: {
        !           426:     int  x;
        !           427: 
        !           428:     if (fCapture) {
        !           429:         ReleaseCapture();
        !           430:         fCapture = FALSE;
        !           431:         x = min(max(pt.x, 10), m_cxClient-10);
        !           432:         ratio = ((float) x) / (float)m_cxClient;
        !           433: 
        !           434:         pLeft->MoveWindow(0, 0, x-1, m_cyClient);
        !           435:         pRight->MoveWindow(x+2, 0, m_cxClient-(x+2), m_cyClient);
        !           436:     } else {
        !           437:         CWnd::OnLButtonUp(nFlags, pt);
        !           438:     }
        !           439: }                               /* CListWnd::OnLButtonDown() */
        !           440: 
        !           441: afx_msg void CListWnd::OnMouseMove(UINT nFlags, CPoint pt)
        !           442: {
        !           443:     if (!fCapture) {
        !           444:         
        !           445:         SetCursor(HCursorSizer);
        !           446:         
        !           447:     } else {
        !           448:         CClientDC       dc(this);
        !           449:         int             x = min(max(pt.x, 10), m_cxClient-10);
        !           450:         
        !           451:         dc.InvertRect(&rtCapture);
        !           452:         rtCapture.SetRect(x-1, 0, x+1, m_cyClient);
        !           453:         dc.InvertRect(&rtCapture);
        !           454:     }
        !           455: }                               /* CListWnd::OnMouseMove() */
        !           456: 
        !           457: afx_msg void CListWnd::OnChildren()
        !           458: {
        !           459:     fChildren = !fChildren;
        !           460:     if (m_SortOrder == LIST_TIME) {
        !           461:        m_SortOrder = LIST_TIME_TOTAL;
        !           462:     } else if (m_SortOrder == LIST_TIME_TOTAL) {
        !           463:        m_SortOrder = LIST_TIME;
        !           464:     } else if (m_SortOrder == LIST_PER_TIME) {
        !           465:        m_SortOrder = LIST_PER_TIME_TOTAL;
        !           466:     } else if (m_SortOrder == LIST_PER_TIME_TOTAL) {
        !           467:        m_SortOrder = LIST_PER_TIME;
        !           468:     }
        !           469:     m_pMenuCurrent->CheckMenuItem(IDM_LIST_CHILDREN, MF_BYCOMMAND | (fChildren ? MF_CHECKED : MF_UNCHECKED));
        !           470:     Invalidate(TRUE);
        !           471:     return;
        !           472: }                               /* CListWnd::OnChildren() */
        !           473: 
        !           474: 
        !           475: 
        !           476: 
        !           477: /**********************************************************************/
        !           478: 
        !           479: BOOL CListWndChild::Create(DWORD style, const RECT& rect, CListWnd * parent)
        !           480: {
        !           481:     const char * pszStockClass;
        !           482: 
        !           483:     pszStockClass = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, NULL,
        !           484:                                         (HBRUSH) (COLOR_WINDOW+1), NULL);
        !           485: 
        !           486:     pListWnd = parent;
        !           487: 
        !           488:     return CWnd::Create(pszStockClass, "A", style, rect, parent, 999);
        !           489: 
        !           490:     
        !           491: }                               /* CListWndChild::Create() */
        !           492: 
        !           493: int CListWndChild::OnCreate(LPCREATESTRUCT p)
        !           494: {
        !           495: //    ComputeWidths();
        !           496: 
        !           497:     return 0;
        !           498: }                               /* CListWndChild::OnCreate() */
        !           499: 
        !           500: void CListWndChild::OnDestroy()
        !           501: {
        !           502:     return;
        !           503: }                               /* CListWndCHild::OnDestroy() */
        !           504: 
        !           505: 
        !           506: void  CListWndChild::OnSize(UINT nType, int cx, int cy)
        !           507: {
        !           508:     m_cxClient = cx;
        !           509:     m_cyClient = cy;
        !           510: 
        !           511:     SetScrollRange(SB_HORZ, 0, max(1, m_nHscrollMax - cx), TRUE);
        !           512: 
        !           513:     m_nVscrollMax = max(1, (int)(ListHead()->GetCount())-m_cyClient/m_cyChar);
        !           514: 
        !           515:     CWnd::OnSize(nType, cx, cy);
        !           516: 
        !           517:     return;
        !           518: }                               /* CListWndChild::OnSize() */
        !           519: 
        !           520: void CListWndChild::OnHScroll(UINT wParam, UINT pos, CScrollBar *)
        !           521: {
        !           522:     int         nScrollInc;
        !           523:     
        !           524:     switch( wParam ) {
        !           525:     case SB_LEFT:
        !           526:         nScrollInc = -m_nVscrollPos;
        !           527:         break;
        !           528:         
        !           529:     case SB_RIGHT:
        !           530:         nScrollInc = m_cxClient;
        !           531:         break;
        !           532:         
        !           533:     case SB_LINELEFT:
        !           534:         nScrollInc = -1;
        !           535:         break;
        !           536:         
        !           537:     case SB_LINERIGHT:
        !           538:         nScrollInc = 1;
        !           539:         break;
        !           540:         
        !           541:     case SB_PAGELEFT:
        !           542:         nScrollInc = -m_cxClient;
        !           543:         break;
        !           544: 
        !           545:     case SB_PAGERIGHT:
        !           546:         nScrollInc = m_cxClient;
        !           547:         break;
        !           548:         
        !           549:     case SB_THUMBTRACK:
        !           550:         nScrollInc = pos - m_nHscrollPos;
        !           551:         break;
        !           552:         
        !           553:     default:
        !           554:         nScrollInc = 0;
        !           555:     }
        !           556: 
        !           557:     nScrollInc = max( -m_nHscrollPos,
        !           558:                      min(nScrollInc,
        !           559:                          (m_nHscrollMax - m_cxClient) - m_nHscrollPos ));
        !           560:     if (nScrollInc) {
        !           561:         m_nHscrollPos += nScrollInc;
        !           562:        SetScrollPos( SB_HORZ, m_nHscrollPos );
        !           563:         ScrollWindow( -nScrollInc, 0);
        !           564:         UpdateWindow();
        !           565:     }
        !           566:     return;
        !           567: }                               /* CListWndChild::OnHScroll() */
        !           568: 
        !           569: int CListWndChild::OnVScroll(UINT wParam, UINT pos, CScrollBar *)
        !           570: {
        !           571:     int     nScrollInc;
        !           572: 
        !           573:     switch( wParam ) {
        !           574:     case SB_TOP:
        !           575:        nScrollInc = -m_nVscrollPos;
        !           576:        break;
        !           577: 
        !           578:     case SB_BOTTOM:
        !           579:        nScrollInc = m_nVscrollMax;
        !           580:        break;
        !           581: 
        !           582:     case SB_LINEUP:
        !           583:        nScrollInc = -1;
        !           584:        break;
        !           585: 
        !           586:     case SB_LINEDOWN:
        !           587:        nScrollInc = 1;
        !           588:        break;
        !           589: 
        !           590:     case SB_PAGEUP:
        !           591:        nScrollInc = min( -1, -(m_cyClient/m_cyChar - 2));
        !           592:        break;
        !           593: 
        !           594:     case SB_PAGEDOWN:
        !           595:        nScrollInc = max( 1, m_cyClient/m_cyChar  - 2);
        !           596:        break;
        !           597: 
        !           598:     case SB_THUMBTRACK:
        !           599:        nScrollInc = pos - m_nVscrollPos;
        !           600:        break;
        !           601: 
        !           602:     default:
        !           603:        nScrollInc = 0;
        !           604:        break;
        !           605:     }
        !           606: 
        !           607:     nScrollInc = max( -m_nVscrollPos,
        !           608:                      min( nScrollInc, m_nVscrollMax - m_nVscrollPos ) );
        !           609:     
        !           610:     if (nScrollInc) {
        !           611:         CRect    rt(0, 2*m_cyChar+1, m_cxClient, m_cyClient);
        !           612:        m_nVscrollPos += nScrollInc;
        !           613:        ScrollWindow( 0, -m_cyChar * nScrollInc, NULL, &rt );
        !           614:        UpdateWindow();
        !           615:     }
        !           616: 
        !           617:     return m_nVscrollPos;
        !           618: }                               /* CListWndChild::OnVScroll() */
        !           619: 
        !           620: 
        !           621: afx_msg void CListWndChild::OnMouseMove(UINT nFlags, CPoint pt)
        !           622: {
        !           623:     SetCursor(HCursorNormal);
        !           624: 
        !           625:     return;
        !           626: }                               /* CListWndChild::OnMouseMove() */
        !           627: 
        !           628: 
        !           629: /*********************************************************************/
        !           630: 
        !           631: BEGIN_MESSAGE_MAP(CListWndLeft, CWnd)
        !           632:        ON_WM_CREATE()
        !           633:        ON_WM_DESTROY()
        !           634:        ON_WM_HSCROLL()
        !           635:         ON_WM_MOUSEMOVE()
        !           636:        ON_WM_PAINT()
        !           637:        ON_WM_SIZE()
        !           638: END_MESSAGE_MAP()
        !           639: 
        !           640: 
        !           641: void  CListWndLeft::OnPaint()
        !           642: {
        !           643:     CPaintDC    dc(this);
        !           644:     CBrush      b(RGB(255, 255, 255));
        !           645: 
        !           646:     CRect       area(0, 0, m_cxClient, m_cyClient);
        !           647: 
        !           648:     int nStart;
        !           649:     int nEnd;
        !           650: 
        !           651:     nStart = max(dc.m_ps.rcPaint.top, 2*m_cyChar);
        !           652:     nStart = m_nVscrollPos + (nStart / m_cyChar) - 2;
        !           653: 
        !           654:     nEnd = min( ListHead()->GetCount(),
        !           655:                (dc.m_ps.rcPaint.bottom - dc.m_ps.rcPaint.top) / m_cyChar +
        !           656:                nStart + 2);
        !           657: 
        !           658:     int         x = -m_nHscrollPos;
        !           659:     int         y;
        !           660:     int         perCent;
        !           661:     int         j;
        !           662:     CRect       rt;
        !           663:     
        !           664:     dc.FillRect( area, &b);
        !           665: 
        !           666:     dc.SetTextAlign( TA_CENTER | TA_TOP );
        !           667:     rt.SetRect(0, 0, m_cxClient, m_cyChar);
        !           668:     dc.ExtTextOut((m_cxClient-5)/2, 0, ETO_CLIPPED, &rt, "Name", 4, NULL);
        !           669: 
        !           670:     dc.SetTextAlign( TA_LEFT | TA_TOP );
        !           671:     dc.SetBkMode(TRANSPARENT);
        !           672: 
        !           673:     /*
        !           674:      *  Print out the data
        !           675:      */
        !           676: 
        !           677:     CString     szDisplay;
        !           678:     ListItem *  pCur;
        !           679: 
        !           680:     for (y= (nStart - m_nVscrollPos + 2) * m_cyChar;
        !           681:          nStart < nEnd; nStart++, y += m_cyChar ) {
        !           682:         pCur = ListHead()->GetPosition( nStart, SortOrder());
        !           683:         perCent = (int) pCur->Time().PerCent(ListHead()->TotalTime());
        !           684:         
        !           685:         for (j=0; j<RangeStruct()->cRanges-1; j++) {
        !           686:             if ((RangeStruct()->Above[j] <= perCent) &&
        !           687:                 (perCent < RangeStruct()->Above[j+1])) {
        !           688:                 break;
        !           689:             }
        !           690:         }
        !           691:        
        !           692:         CBrush bBack( RangeStruct()->BackColor[j] );
        !           693:        
        !           694:         dc.SetTextColor( RangeStruct()->TextColor[j] * RGB(255, 255, 255));
        !           695:         
        !           696:         area.top = y;
        !           697:         area.bottom = y + m_cyChar;
        !           698:         dc.FillRect( area, &bBack );
        !           699:         
        !           700:         /*
        !           701:          * Print out the dll and function name
        !           702:          */
        !           703:        
        !           704:         szDisplay = pCur->strModule() + " : " + pCur->strFunction();
        !           705:         
        !           706:         dc.TextOut(x, y, szDisplay);
        !           707:         
        !           708:     }
        !           709: 
        !           710:     dc.MoveTo(0, 2*m_cyChar-1); dc.LineTo(m_cxClient, 2*m_cyChar-1);
        !           711:     dc.MoveTo(0, 2*m_cyChar); dc.LineTo(m_cxClient, 2*m_cyChar);
        !           712: 
        !           713:     return;
        !           714: }                               /* CListWndLeft::OnPaint() */
        !           715: 
        !           716: 
        !           717: void CListWndLeft::ComputeWidths()
        !           718: {
        !           719:     int         i;
        !           720:     CRect       rt;
        !           721:     CString     str;
        !           722:     CClientDC   cdc( this );
        !           723:     CFont       cFont;
        !           724:     CFont *     lpcFont;
        !           725:     TEXTMETRIC  tm;
        !           726:     int         maxWidth = 0;
        !           727: 
        !           728:     cFont.CreateFontIndirect(LogFont());
        !           729:     lpcFont = cdc.SelectObject(&cFont);
        !           730:     cdc.GetTextMetrics( &tm );
        !           731:     
        !           732:     m_cxChar = tm.tmAveCharWidth;
        !           733:     m_cyChar = tm.tmHeight + tm.tmExternalLeading;
        !           734:     m_nVscrollPos = m_nHscrollPos = 0;
        !           735: 
        !           736:     ListItem * pCur;
        !           737: 
        !           738:     for (i=0; i<ListHead()->GetCount(); i++) {
        !           739:         pCur = ListHead()->GetPosition(i, SortOrder());
        !           740:         str = pCur->strModule() + " : " + pCur->strFunction();
        !           741:         
        !           742:         rt.SetRectEmpty();
        !           743:         cdc.DrawText(str, -1, &rt, DT_CALCRECT);
        !           744:         maxWidth = max(maxWidth, rt.Width()+10);
        !           745:     }
        !           746: 
        !           747:     m_nHscrollMax = maxWidth;
        !           748:     SetScrollRange(SB_HORZ, 0, max(1, m_nHscrollMax - m_cxClient), TRUE);
        !           749: 
        !           750:     m_nVscrollMax = max(1, (int)(ListHead()->GetCount())-m_cyClient/m_cyChar);
        !           751: 
        !           752:     cdc.SelectObject(lpcFont);
        !           753:     Invalidate(TRUE);
        !           754: 
        !           755:     return;
        !           756: }                               /* CListWndLeft::ComputeWidths() */
        !           757: 
        !           758: /*********************************************************************/
        !           759: 
        !           760: BEGIN_MESSAGE_MAP(CListWndRight, CWnd)
        !           761:        ON_WM_CREATE()
        !           762:        ON_WM_DESTROY()
        !           763:        ON_WM_HSCROLL()
        !           764:         ON_WM_MOUSEMOVE()
        !           765:        ON_WM_PAINT()
        !           766:        ON_WM_SIZE()
        !           767: END_MESSAGE_MAP()
        !           768: 
        !           769: 
        !           770: void  CListWndRight::OnPaint()
        !           771: {
        !           772:     CPaintDC    dc(this);
        !           773:     CBrush      b(RGB(255, 255, 255));
        !           774:     CFont       cFont;
        !           775:     CFont *     lpcFont;        
        !           776: 
        !           777:     CRect       area(0, 0, m_cxClient, m_cyClient);
        !           778:     
        !           779:     dc.FillRect( area, &b);
        !           780: 
        !           781:     CRect       rt;
        !           782:     char        rgch[256];
        !           783:     int         perCent;
        !           784:     int         perCentPer;
        !           785:     int         perCentAll;
        !           786:     int         perCentPerAll;
        !           787:     int         j;
        !           788:     int         i;
        !           789:     int         x = -m_nHscrollPos;
        !           790:     int         y;
        !           791:     
        !           792:     int nStart;
        !           793:     int nEnd;
        !           794: 
        !           795:     nStart = max(dc.m_ps.rcPaint.top, 2*m_cyChar);
        !           796:     nStart = m_nVscrollPos + (nStart / m_cyChar) - 2;
        !           797: 
        !           798:     nEnd = min( ListHead()->GetCount(),
        !           799:                (dc.m_ps.rcPaint.bottom - dc.m_ps.rcPaint.top) / m_cyChar +
        !           800:                nStart + 2);
        !           801: 
        !           802:     dc.FillRect(&dc.m_ps.rcPaint, &b);
        !           803: 
        !           804:     area.SetRect(0, 0, m_cxClient, 0);
        !           805:     dc.SetBkMode(TRANSPARENT);
        !           806:     
        !           807:     cFont.CreateFontIndirect(LogFont());
        !           808:     lpcFont = dc.SelectObject(&cFont);
        !           809: 
        !           810:     area.bottom = 2*m_cyChar;
        !           811:     dc.FillRect( area, &b );
        !           812:     dc.SetTextColor(0);
        !           813: 
        !           814:     /*
        !           815:      *  Print out the titles for the List Window
        !           816:      */
        !           817: 
        !           818:     dc.SetTextAlign( TA_CENTER | TA_TOP );
        !           819:        
        !           820:     rt.SetRect(x, 0, x+rgl[0]-5, 2*m_cyChar);
        !           821:     dc.ExtTextOut(x+(rgl[0]-5)/2, 0, ETO_CLIPPED, &rt, "Num", 3, NULL);
        !           822:     dc.ExtTextOut(x+(rgl[0]-5)/2, m_cyChar, ETO_CLIPPED, &rt, "Calls", 5, NULL);
        !           823: 
        !           824:     rt.SetRect(x+rgl[0], 0, x+rgl[4]-5, 2*m_cyChar);
        !           825:     dc.ExtTextOut(x+(rgl[0]+rgl[4]-5)/2, 0, ETO_CLIPPED, &rt, "Function Only", 13, NULL);
        !           826:     
        !           827:     rt.SetRect(x+rgl[0], 0, x+rgl[2]-5, 2*m_cyChar);
        !           828:     dc.ExtTextOut(x+(rgl[0]+rgl[2]-5)/2, m_cyChar, ETO_CLIPPED, &rt, "Function", 8, NULL);
        !           829: 
        !           830:     rt.SetRect(x+rgl[2], 0, x+rgl[4]-5, 2*m_cyChar);
        !           831:     dc.ExtTextOut(x+(rgl[2]+rgl[4]-5)/2, m_cyChar, ETO_CLIPPED, &rt, "Per Call", 8, NULL);
        !           832:     
        !           833:     rt.SetRect(x+rgl[4], 0, x+rgl[6]-5, 2*m_cyChar);
        !           834:     dc.ExtTextOut(x+(rgl[4]+rgl[6]-5)/2, m_cyChar, ETO_CLIPPED, &rt, "Function", 8, NULL);
        !           835:     
        !           836:     rt.SetRect(x+rgl[4], 0, x+rgl[8], 2*m_cyChar);
        !           837:     dc.ExtTextOut(x+(rgl[4]+rgl[8])/2, 0, ETO_CLIPPED, &rt, "Function + Children", 19, NULL);
        !           838: 
        !           839:     rt.SetRect(x+rgl[6], 0, x+rgl[8], 2*m_cyChar);
        !           840:     dc.ExtTextOut(x+(rgl[6]+rgl[8])/2, m_cyChar, ETO_CLIPPED, &rt, "Per Call", 8, NULL);
        !           841: 
        !           842:     dc.SetTextAlign( TA_RIGHT | TA_TOP );
        !           843: 
        !           844: 
        !           845:     /*
        !           846:      *  Now print out the actual data items
        !           847:      */
        !           848: 
        !           849:     CString szDisplay;
        !           850:     ListItem *  pCur;
        !           851: 
        !           852:     for ( y= (nStart - m_nVscrollPos + 2)*m_cyChar;
        !           853:        nStart < nEnd;
        !           854:        nStart++, y += m_cyChar ) {
        !           855:         pCur = ListHead()->GetPosition( nStart, SortOrder() );
        !           856:        perCent = (int) pCur->Time().PerCent(ListHead()->TotalTime());
        !           857:        perCentPer = (int) pCur->TimePerCall().PerCent(ListHead()->TotalTime());
        !           858:        perCentAll = (int) pCur->TimeAll().PerCent(ListHead()->TotalTime());
        !           859:        perCentPerAll = (int) pCur->TimeAllPerCall().PerCent(ListHead()->TotalTime());
        !           860: 
        !           861:        for (j=0; j<RangeStruct()->cRanges-1; j++) {
        !           862:            if ((RangeStruct()->Above[j] <= perCent) &&
        !           863:                (perCent < RangeStruct()->Above[j+1])) {
        !           864:                break;
        !           865:            }
        !           866:        }
        !           867:        
        !           868:        CBrush bBack( RangeStruct()->BackColor[j] );
        !           869:        
        !           870:        dc.SetTextColor( RangeStruct()->TextColor[j] * RGB(255, 255, 255));
        !           871: 
        !           872:        area.top = y;
        !           873:        area.bottom = y + m_cyChar;
        !           874:        dc.FillRect( area, &bBack );
        !           875: 
        !           876:         /*
        !           877:          * Now print the number of calls
        !           878:          */
        !           879:         
        !           880:        sprintf(rgch, "%d", pCur->Calls());
        !           881:        rt.SetRect(x, y, x+x+rgl[0]-5, y+m_cyChar);
        !           882:        dc.ExtTextOut(x+rgl[0]-5, y, ETO_CLIPPED, &rt,
        !           883:                       rgch, strlen(rgch), NULL);
        !           884: 
        !           885:         /*
        !           886:          *
        !           887:          */
        !           888: 
        !           889:         pCur->Time().format(rgch);
        !           890:        rt.SetRect(x+rgl[0], y, x+rgl[1]-5, y+m_cyChar);
        !           891:        dc.ExtTextOut(x+rgl[1]-5, y, ETO_CLIPPED, &rt,
        !           892:                       rgch, strlen(rgch), NULL);
        !           893: 
        !           894:        sprintf(rgch, "%d%%", perCent);
        !           895:        rt.SetRect(x+rgl[1], y, x+rgl[2]-5, y+m_cyChar);
        !           896:        dc.ExtTextOut(x+rgl[2]-5, y, ETO_CLIPPED, &rt,
        !           897:                       rgch, strlen(rgch), NULL);
        !           898: 
        !           899:        pCur->TimePerCall().format(rgch);
        !           900:        rt.SetRect(x+rgl[2], y, x+rgl[3]-5, y+m_cyChar);
        !           901:        dc.ExtTextOut(x+rgl[3]-5, y, ETO_CLIPPED, &rt,
        !           902:                       rgch, strlen(rgch), NULL);
        !           903: 
        !           904:        sprintf(rgch, "%d%%", perCentPer);
        !           905:        rt.SetRect(x+rgl[3], y, x+rgl[4]-5, y+m_cyChar);
        !           906:        dc.ExtTextOut(x+rgl[4]-5, y, ETO_CLIPPED, &rt,
        !           907:                       rgch, strlen(rgch), NULL);
        !           908:     
        !           909:        pCur->TimeAll().format(rgch);
        !           910:        rt.SetRect(x+rgl[4], y, x+rgl[5]-5, y+m_cyChar);
        !           911:        dc.ExtTextOut(x+rgl[5]-5, y, ETO_CLIPPED, &rt,
        !           912:                       rgch, strlen(rgch), NULL);
        !           913: 
        !           914:        sprintf(rgch, "%d%%", perCentAll);
        !           915:        rt.SetRect(x+rgl[5], y, x+rgl[6]-5, y+m_cyChar);
        !           916:        dc.ExtTextOut(x+rgl[6]-5, y, ETO_CLIPPED, &rt,
        !           917:                       rgch, strlen(rgch), NULL);
        !           918: 
        !           919:        pCur->TimeAllPerCall().format(rgch);
        !           920:        rt.SetRect(x+rgl[6], y, x+rgl[7]-5, y+m_cyChar);
        !           921:        dc.ExtTextOut(x+rgl[7]-5, y, ETO_CLIPPED, &rt,
        !           922:                       rgch, strlen(rgch), NULL);
        !           923: 
        !           924:        sprintf(rgch, "%d%%", perCentPerAll);
        !           925:        rt.SetRect(x+rgl[7], y, x+rgl[8]-5, y+m_cyChar);
        !           926:        dc.ExtTextOut(x+rgl[8]-5, y, ETO_CLIPPED, &rt,
        !           927:                       rgch, strlen(rgch), NULL);
        !           928:     }
        !           929: 
        !           930:     /*
        !           931:      * Now lets draw in the funny lines which make things look better
        !           932:      */
        !           933:     
        !           934:     for (i=0; i<8; i++) {
        !           935:        if ((i == 1) || (i == 3) || (i == 5) || (i == 7)) { 
        !           936:            y = 2*m_cyChar;
        !           937:        } else if ((i == 2) || (i == 6)) {
        !           938:            y = m_cyChar;
        !           939:        } else {
        !           940:            y = 0;
        !           941:        }
        !           942:        dc.MoveTo(x+rgl[i]-3, y); dc.LineTo(x+rgl[i]-3, m_cyClient);
        !           943:        dc.MoveTo(x+rgl[i]-2, y); dc.LineTo(x+rgl[i]-2, m_cyClient);
        !           944:        dc.MoveTo(x+rgl[i]-1, y); dc.LineTo(x+rgl[i]-1, m_cyClient);
        !           945:     }
        !           946: 
        !           947:     dc.MoveTo(x+rgl[0], m_cyChar-1); dc.LineTo(m_cxClient, m_cyChar-1);
        !           948:     dc.MoveTo(x+rgl[0], m_cyChar); dc.LineTo(m_cxClient, m_cyChar);
        !           949:     dc.MoveTo(x+rgl[0], m_cyChar+1); dc.LineTo(m_cxClient, m_cyChar+1);
        !           950: 
        !           951:     dc.MoveTo(0, 2*m_cyChar-1); dc.LineTo(m_cxClient, 2*m_cyChar-1);
        !           952:     dc.MoveTo(0, 2*m_cyChar); dc.LineTo(m_cxClient, 2*m_cyChar);
        !           953: 
        !           954:     dc.SelectObject(lpcFont);
        !           955:     return;
        !           956: }                               /* CListWndRight::OnPaint() */
        !           957: 
        !           958: void CListWndRight::ComputeWidths()
        !           959: {
        !           960:     int                i;
        !           961:     char        rgch[100];
        !           962:     CRect       rt;
        !           963:     CClientDC   cdc( this );
        !           964:     CFont       cFont;
        !           965:     CFont *     lpcFont;
        !           966:     TEXTMETRIC  tm;
        !           967: 
        !           968:     int         perCent;
        !           969:     int         perCentPer;
        !           970:     int         perCentAll;
        !           971:     int         perCentPerAll;
        !           972: 
        !           973:     cFont.CreateFontIndirect(LogFont());
        !           974:     lpcFont = cdc.SelectObject(&cFont);
        !           975:     cdc.GetTextMetrics( &tm );
        !           976:     
        !           977:     m_cxChar = tm.tmAveCharWidth;
        !           978:     m_cyChar = tm.tmHeight + tm.tmExternalLeading;
        !           979:     m_nVscrollPos = m_nHscrollPos = 0;
        !           980: 
        !           981:     ListItem * pCur;
        !           982:     CString     szDisplay;
        !           983: 
        !           984:     for (i=0; i<9; i++) {
        !           985:         rgl[i] = 0;
        !           986:     }
        !           987: 
        !           988: 
        !           989:     for (i=0; i<ListHead()->GetCount(); i++) {
        !           990:         pCur = ListHead()->GetPosition(i, SortOrder());
        !           991:         
        !           992:        perCent = (int) pCur->Time().PerCent(ListHead()->TotalTime());
        !           993:        perCentPer = (int) pCur->TimePerCall().PerCent(ListHead()->TotalTime());
        !           994:        perCentAll = (int) pCur->TimeAll().PerCent(ListHead()->TotalTime());
        !           995:        perCentPerAll = (int) pCur->TimeAllPerCall().PerCent(ListHead()->TotalTime());
        !           996: 
        !           997: 
        !           998:         /*
        !           999:          *  Width of # calls
        !          1000:          */
        !          1001: 
        !          1002:         sprintf(rgch, "%d", pCur->Calls());
        !          1003:         rt.SetRectEmpty();
        !          1004:         cdc.DrawText(rgch, -1, &rt, DT_CALCRECT);
        !          1005:         rgl[0] = max(rgl[0], rt.Width()+10);
        !          1006: 
        !          1007:         /*
        !          1008:          *
        !          1009:          */
        !          1010: 
        !          1011:         pCur->Time().format(rgch);
        !          1012:        rt.SetRectEmpty();
        !          1013:         cdc.DrawText(rgch, -1, &rt, DT_CALCRECT);
        !          1014:         rgl[1] = max(rgl[1], rt.Width()+10);
        !          1015: 
        !          1016:        sprintf(rgch, "%d%%", perCent);
        !          1017:        rt.SetRectEmpty();
        !          1018:         cdc.DrawText(rgch, -1, &rt, DT_CALCRECT);
        !          1019:         rgl[2] = max(rgl[2], rt.Width()+10);
        !          1020: 
        !          1021:        pCur->TimePerCall().format(rgch);
        !          1022:        rt.SetRectEmpty();
        !          1023:         cdc.DrawText(rgch, -1, &rt, DT_CALCRECT);
        !          1024:         rgl[3] = max(rgl[3], rt.Width()+10);
        !          1025: 
        !          1026:        sprintf(rgch, "%d%%", perCentPer);
        !          1027:        rt.SetRectEmpty();
        !          1028:         cdc.DrawText(rgch, -1, &rt, DT_CALCRECT);
        !          1029:         rgl[4] = max(rgl[4], rt.Width()+10);
        !          1030:     
        !          1031:        pCur->TimeAll().format(rgch);
        !          1032:        rt.SetRectEmpty();
        !          1033:         cdc.DrawText(rgch, -1, &rt, DT_CALCRECT);
        !          1034:         rgl[5] = max(rgl[5], rt.Width()+10);
        !          1035: 
        !          1036:        sprintf(rgch, "%d%%", perCentAll);
        !          1037:        rt.SetRectEmpty();
        !          1038:         cdc.DrawText(rgch, -1, &rt, DT_CALCRECT);
        !          1039:         rgl[6] = max(rgl[6], rt.Width()+10);
        !          1040: 
        !          1041:        pCur->TimeAllPerCall().format(rgch);
        !          1042:        rt.SetRectEmpty();
        !          1043:         cdc.DrawText(rgch, -1, &rt, DT_CALCRECT);
        !          1044:         rgl[7] = max(rgl[7], rt.Width()+10);
        !          1045: 
        !          1046:        sprintf(rgch, "%d%%", perCentPerAll);
        !          1047:        rt.SetRectEmpty();
        !          1048:         cdc.DrawText(rgch, -1, &rt, DT_CALCRECT);
        !          1049:         rgl[8] = max(rgl[8], rt.Width()+10);
        !          1050:     }
        !          1051: 
        !          1052:     for (i=1; i<9; i++) {
        !          1053:         rgl[i] += rgl[i-1];
        !          1054:     }
        !          1055: 
        !          1056:     m_nHscrollMax = rgl[8];
        !          1057:     SetScrollRange(SB_HORZ, 0, max(1, m_nHscrollMax), TRUE);
        !          1058: 
        !          1059:     m_nVscrollMax = max(1, (int)(ListHead()->GetCount())-m_cyClient/m_cyChar);
        !          1060:     
        !          1061:     cdc.SelectObject(lpcFont);
        !          1062:     Invalidate(TRUE);
        !          1063: 
        !          1064:     return;
        !          1065: }                               /* CListWndRight::ComputeWidths() */
        !          1066: 
        !          1067: 
        !          1068: #if 0
        !          1069: afx_msg void CListWndRight::OnMouseMove(UINT nFlags, CPoint pt)
        !          1070: {
        !          1071:     int  i;
        !          1072:     BOOL f = FALSE;
        !          1073: 
        !          1074: //    if (!fCapture) {
        !          1075:         
        !          1076:         SetCursor(HCursorNormal);
        !          1077:         
        !          1078: //    } else {
        !          1079: //        CClientDC       dc(this);
        !          1080: //        int             x = min(max(pt.x, rgl[iCapture-1]+10),
        !          1081: //                             rgl[iCapture+1]-10);
        !          1082: //        
        !          1083: //        dc.InvertRect(&rtCapture);
        !          1084: //        rtCapture.SetRect(x-1, 0, x+1, m_cyClient);
        !          1085: //        dc.InvertRect(&rtCapture);
        !          1086: //    }
        !          1087: }                               /* CListWndRight::OnMouseMove() */
        !          1088: 
        !          1089: 
        !          1090: afx_msg void CListWnd::OnLButtonDown(UINT nFlags, CPoint pt)
        !          1091: {
        !          1092:     BOOL        f = FALSE;
        !          1093:     int         i;
        !          1094:     
        !          1095:     for (i=1; i<10; i++) {
        !          1096:         if ((rgl[i]-5 < pt.x) && (pt.x < rgl[i])) {
        !          1097:             f = TRUE;
        !          1098:             break;
        !          1099:         }
        !          1100:     }
        !          1101: 
        !          1102:     if (f) {
        !          1103:         CClientDC       dc(this);
        !          1104:         fCapture = TRUE;
        !          1105:         iCapture = i;
        !          1106:         SetCapture();
        !          1107:         rtCapture.SetRect(pt.x-1, 0, pt.x+1, m_cyClient);
        !          1108:         dc.InvertRect(&rtCapture);
        !          1109:     } else {
        !          1110:         CWnd::OnLButtonDown(nFlags, pt);
        !          1111:     }
        !          1112: }                               /* CListWnd::OnLButtonDown() */
        !          1113: 
        !          1114: afx_msg void CListWnd::OnLButtonUp(UINT nFlags, CPoint pt)
        !          1115: {
        !          1116:     if (fCapture) {
        !          1117:         ReleaseCapture();
        !          1118:         fCapture = FALSE;
        !          1119:         rgl[iCapture] = min(max(pt.x, rgl[iCapture-1]+10), rgl[iCapture+1]-10);
        !          1120:         Invalidate(TRUE);
        !          1121:     } else {
        !          1122:         CWnd::OnLButtonUp(nFlags, pt);
        !          1123:     }
        !          1124: }                               /* CListWnd::OnLButtonDown() */
        !          1125: #endif

unix.superglobalmegacorp.com

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