Annotation of mstools/samples/sdktools/capview/tree.cpp, revision 1.1.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        "dialogs.h"
                      8: #include        "resource.h"
                      9: #include        "ranges.h"
                     10: #include        "dispobj.h"
                     11: #include        "timer.h"
                     12: #include        "tree.h"
                     13: 
                     14: 
                     15: #define PAGESIZE 8
                     16: 
                     17: /*********************** GLOBAL DATA *****************************/
                     18: 
                     19: CAaaArray       rgLoc;
                     20: BOOL  fXYZ = FALSE;
                     21: BOOL  fTotal = TRUE;
                     22: extern  HICON   HIconTree;
                     23: 
                     24: /*****************************************************************/
                     25: 
                     26: BEGIN_MESSAGE_MAP(CTREEWND, CMDIChildWnd)
                     27:        ON_WM_CREATE()
                     28:        ON_WM_DESTROY()
                     29:        ON_WM_MDIACTIVATE()
                     30:        ON_WM_HSCROLL()
                     31:        ON_WM_KEYDOWN()
                     32:        ON_WM_LBUTTONDBLCLK()
                     33:        ON_WM_LBUTTONDOWN()
                     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_TREE_EXPANDALL, OnExpandAll )
                     41:        ON_COMMAND( IDM_TREE_FONT, OnFont )
                     42:        ON_COMMAND( IDM_TREE_TOTAL, OnTotal )
                     43:        ON_COMMAND( IDM_TREE_XYZ, OnXYZ )
                     44:        ON_COMMAND( IDM_TREE_ZOOM, OnZoom )
                     45:        ON_COMMAND( IDM_TREE_RANGES, OnRanges )
                     46: 
                     47: END_MESSAGE_MAP()
                     48: 
                     49: BOOL CTREEWND::Create(LPCSTR szTitle, LONG style, const RECT& rect,
                     50:        CMDIFrameWnd* parent)
                     51: {
                     52:     const char * pszStockClass = AfxRegisterWndClass(
                     53:        CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL, IDC_UPARROW),
                     54:        (HBRUSH) (COLOR_WINDOW+1), HIconTree);
                     55: 
                     56:     return CMDIChildWnd::Create(pszStockClass, szTitle, style, rect, parent);
                     57: }
                     58: 
                     59: 
                     60: CTREEWND::CTREEWND()  : ptOrigin(0, 0)
                     61: {
                     62:    int  i;
                     63:    
                     64:    m_pMenuCurrent = NULL;
                     65:    m_bWindowActive = FALSE;
                     66:    logFont = DefaultFont;
                     67:    fZoom = FALSE;
                     68:    
                     69:    for (i=0; i<MAX_NUM_RANGES; i++) {
                     70:        rs.TextColor[i] = 0;
                     71:        rs.BackColor[i] = RGB( 0, 0, 0);
                     72:        rs.Above[i] = 101;
                     73:    }
                     74:    
                     75:    rs.Above[0] = 0;  rs.BackColor[0] = RGB(   0,   0, 255);  
                     76:                rs.TextColor[0] = 1;
                     77:    rs.Above[1] = 1;  rs.BackColor[1] = RGB(   0, 255,   0);
                     78:    rs.Above[2] = 2;  rs.BackColor[2] = RGB(   0, 255, 255);
                     79:    rs.Above[3] = 5;  rs.BackColor[3] = RGB( 255, 255,   0);
                     80:    rs.Above[4] = 20;  rs.BackColor[4] = RGB( 255,   0,   0);
                     81:    rs.Above[5] = 101;
                     82:    rs.cRanges = 5;
                     83: }
                     84: 
                     85: CTREEWND::~CTREEWND()
                     86: {
                     87:     if (m_bWindowActive) {
                     88:        m_pMenuCurrent->Detach();
                     89:     }
                     90: }
                     91: 
                     92: 
                     93: int CTREEWND::OnCreate(LPCREATESTRUCT p)
                     94: {
                     95:     TEXTMETRIC  tm;
                     96: 
                     97:     CDC *       dc = GetDC();
                     98:     dc->GetTextMetrics( &tm );
                     99:     ReleaseDC( dc );
                    100: 
                    101:     m_cxChar = tm.tmAveCharWidth;
                    102:     m_cxCaps = ( (tm.tmPitchAndFamily & 1) ? 3 : 2) * m_cxChar / 2;
                    103:     m_cyChar = tm.tmHeight + tm.tmExternalLeading;
                    104:     m_nMaxWidth = ( 20 ) * m_cxCaps;
                    105: 
                    106:     return 0;
                    107: }
                    108: 
                    109: 
                    110: void CTREEWND::OnDestroy()
                    111: {
                    112:   //  m_pMDIFrameWnd->SendMessage(WM_CHILDDESTROY, (UINT)m_hWnd, 0);
                    113:     return;
                    114: }
                    115: 
                    116: 
                    117: void CTREEWND::OnSize(UINT nType, int cx, int cy)
                    118: {
                    119:     m_cxClient = cx;
                    120:     m_cyClient = cy;
                    121: 
                    122:     ptOrigin.y = min( ptOrigin.y, rtArea.Height());
                    123:     
                    124:     SetScrollRange( SB_VERT, 0, rtArea.Height(), FALSE );
                    125:     SetScrollPos( SB_VERT, ptOrigin.y, TRUE );
                    126: 
                    127: 
                    128:     ptOrigin.x = min( ptOrigin.x, rtArea.Width() );
                    129: 
                    130:     SetScrollRange( SB_HORZ, 0, rtArea.Width(), FALSE );
                    131:     SetScrollPos( SB_HORZ, ptOrigin.x, TRUE );
                    132: 
                    133:     CMDIChildWnd::OnSize(nType, cx, cy);
                    134: 
                    135:     return;
                    136: }
                    137: 
                    138: void CTREEWND::OnMDIActivate(BOOL bActivate, CWnd * pActive,
                    139:        CWnd* pDeactivate)
                    140: {
                    141:     CMDIFrameWnd * pFrame = m_pMDIFrameWnd;
                    142:     CMenu *             pWinPopupMenu = NULL;
                    143:     CMenu *             pMenu = NULL;
                    144: 
                    145:     m_bWindowActive = bActivate;
                    146: 
                    147:     if (bActivate) {
                    148:        pMenu = new CMenu;
                    149:        pMenu->LoadMenu("MdiMenuTree");
                    150:        pWinPopupMenu = pMenu->GetSubMenu(TREE_MENU_POSITION);
                    151: 
                    152:        CMenu * pLastMenu = pFrame->MDISetMenu(pMenu,pWinPopupMenu);
                    153:        pLastMenu->DestroyMenu();
                    154: 
                    155:        delete m_pMenuCurrent;
                    156:        m_pMenuCurrent = pMenu;
                    157:     } else {
                    158:        pMenu = new CMenu;
                    159:        pMenu->LoadMenu("MdiMenuInit");
                    160:        pWinPopupMenu = pMenu->GetSubMenu(INIT_MENU_POS);
                    161: 
                    162:        CMenu * pLastMenu = pFrame->MDISetMenu(pMenu, pWinPopupMenu);
                    163:        pLastMenu->DestroyMenu();
                    164: 
                    165:        delete m_pMenuCurrent;
                    166:        m_pMenuCurrent = pMenu;
                    167:     }
                    168: 
                    169:     pFrame->DrawMenuBar();
                    170: }
                    171: 
                    172: void CTREEWND::OnPaint()
                    173: {
                    174:     CPaintDC dc (this);
                    175:     CFont       cFont;
                    176:     CFont *     lpcFontOld;
                    177:     
                    178:     if (!fZoom) {
                    179:        cFont.CreateFontIndirect(&logFont);
                    180:        lpcFontOld = dc.SelectObject(&cFont);
                    181:     }
                    182:     dc.SetWindowOrg(ptOrigin);
                    183:     
                    184:     dc.SetBkMode(TRANSPARENT);
                    185:     dc.m_ps.rcPaint.left += ptOrigin.x;
                    186:     dc.m_ps.rcPaint.right += ptOrigin.x;
                    187:     dc.m_ps.rcPaint.top += ptOrigin.y;
                    188:     dc.m_ps.rcPaint.bottom += ptOrigin.y;
                    189:     
                    190:     timerRoot.PaintTree(&dc, fZoom, &rs, dc.m_ps.rcPaint);
                    191: 
                    192:     if (!fZoom) {
                    193:        dc.SelectObject(lpcFontOld);    
                    194:     }
                    195:     return;
                    196: }
                    197: 
                    198: void CTREEWND::OnVScroll(UINT wParam, UINT pos, CScrollBar *)
                    199: {
                    200:     int     nScrollInc;
                    201: 
                    202:     switch( wParam ) {
                    203:     case SB_TOP:
                    204:        nScrollInc = -ptOrigin.y;
                    205:        break;
                    206: 
                    207:     case SB_BOTTOM:
                    208:        nScrollInc = rtArea.Height() - ptOrigin.y;
                    209:        break;
                    210: 
                    211:     case SB_LINEUP:
                    212:        nScrollInc = -m_cyClient/10;
                    213:        break;
                    214: 
                    215:     case SB_LINEDOWN:
                    216:        nScrollInc = m_cyClient/10;
                    217:        break;
                    218: 
                    219:     case SB_PAGEUP:
                    220:        nScrollInc = min( -1, -m_cyClient);
                    221:        break;
                    222: 
                    223:     case SB_PAGEDOWN:
                    224:        nScrollInc = max( 1, m_cyClient );
                    225:        break;
                    226: 
                    227:     case SB_THUMBTRACK:
                    228:        nScrollInc = pos - ptOrigin.y;
                    229:        break;
                    230: 
                    231:     default:
                    232:        nScrollInc = 0;
                    233:        break;
                    234:     }
                    235: 
                    236:     nScrollInc = max( -ptOrigin.y, min( nScrollInc, rtArea.Height() - ptOrigin.y ) );
                    237:     if (nScrollInc) {
                    238:        ptOrigin.y += nScrollInc;
                    239:        ScrollWindow( 0, -nScrollInc );
                    240:        SetScrollPos( SB_VERT, ptOrigin.y );
                    241:        UpdateWindow();
                    242:     }
                    243: }
                    244: 
                    245: void CTREEWND::OnHScroll(UINT wParam, UINT pos, CScrollBar *)
                    246: {
                    247:     int     nScrollInc;
                    248: 
                    249:     switch( wParam ) {
                    250:     case SB_LINEUP:
                    251:        nScrollInc = -m_cxClient/10;
                    252:        break;
                    253: 
                    254:     case SB_LINEDOWN:
                    255:        nScrollInc = m_cxClient/10;
                    256:        break;
                    257: 
                    258:     case SB_PAGEUP:
                    259:        nScrollInc = -m_cxClient;
                    260:        break;
                    261: 
                    262:     case SB_PAGEDOWN:
                    263:        nScrollInc = m_cxClient;
                    264:        break;
                    265: 
                    266:     case SB_THUMBTRACK:
                    267:        nScrollInc = pos - ptOrigin.x;
                    268:        break;
                    269: 
                    270:     default:
                    271:        nScrollInc = 0;
                    272:        break;
                    273:     }
                    274: 
                    275:     nScrollInc = max( -ptOrigin.x, min( nScrollInc, rtArea.Width() - ptOrigin.x ) );
                    276:     if (nScrollInc) {
                    277:        ptOrigin.x += nScrollInc;
                    278:        ScrollWindow( -nScrollInc, 0 );
                    279:        SetScrollPos( SB_HORZ, ptOrigin.x );
                    280:        UpdateWindow();
                    281:     }
                    282: }
                    283: 
                    284: void CTREEWND::OnUp()
                    285: {
                    286: }
                    287: 
                    288: void CTREEWND::OnDown()
                    289: {
                    290: }
                    291: 
                    292: void CTREEWND::OnKeyDown( UINT wParam, UINT, UINT )
                    293: {
                    294:     switch( wParam ) {
                    295:     case VK_HOME:
                    296:        OnVScroll( SB_TOP, 0, NULL );
                    297:        break;
                    298:     case VK_END:
                    299:        OnVScroll( SB_BOTTOM, 0, NULL );
                    300:        break;
                    301: 
                    302:     case VK_PRIOR:
                    303:        OnVScroll( SB_PAGEUP, 0, NULL );
                    304:        break;
                    305: 
                    306:     case VK_NEXT:
                    307:        OnVScroll( SB_PAGEDOWN, 0, NULL );
                    308:        break;
                    309: 
                    310:     case VK_LEFT:
                    311:        OnHScroll( SB_PAGEUP, 0, NULL );
                    312:        break;
                    313: 
                    314:     case VK_RIGHT:
                    315:        OnHScroll( SB_PAGEDOWN, 0, NULL );
                    316:        break;
                    317:     }
                    318: }
                    319: 
                    320: void CTREEWND::OnLButtonDown( UINT, CPoint location )
                    321: {
                    322:     location.Offset(ptOrigin);
                    323:     timerRoot.DblClick( location );
                    324:     timerRoot.SetProperties(SET_LOCATION, fZoom);
                    325:     SetRect(timerRoot.RectTotal());
                    326:     Invalidate();
                    327:    
                    328:     return;
                    329: }
                    330: 
                    331: void CTREEWND::OnLButtonDblClk( UINT wParam, CPoint location ) 
                    332: {
                    333:    
                    334:    return;
                    335: }
                    336: 
                    337: void CTREEWND::OnFont()
                    338: {
                    339:    CFont        cFont;
                    340:    CFont *      lpcFont;        
                    341:    CFontDialog  fontDlg(&logFont);
                    342:    CRect        rt;
                    343:    
                    344:    fontDlg.DoModal();   
                    345:    
                    346:    CClientDC cdc( this );
                    347:    cFont.CreateFontIndirect(&logFont);
                    348:    lpcFont = cdc.SelectObject(&cFont);
                    349: 
                    350:    timerRoot.SetProperties(SET_SIZE|SET_LOCATION, fZoom, NULL, &cdc);
                    351:    SetRect( timerRoot.RectTotal() );
                    352: 
                    353:    cdc.SelectObject(lpcFont);
                    354:    Invalidate();
                    355:    return;
                    356: }
                    357: 
                    358: 
                    359: void CTREEWND::OnExpandAll()
                    360: {
                    361:     timerRoot.ExpandAll();
                    362:     timerRoot.SetProperties(SET_LOCATION, fZoom);
                    363:     SetRect( timerRoot.RectTotal() );
                    364:     Invalidate();
                    365: }
                    366: 
                    367: void CTREEWND::OnXYZ()
                    368: {
                    369:    fXYZ = !fXYZ;
                    370:    m_pMenuCurrent->CheckMenuItem(IDM_TREE_XYZ,
                    371:         MF_BYCOMMAND | (fXYZ ? MF_CHECKED : MF_UNCHECKED));
                    372:    Invalidate();
                    373: }
                    374: 
                    375: void CTREEWND::OnTotal()
                    376: {
                    377:    fTotal = !fTotal;
                    378:    m_pMenuCurrent->CheckMenuItem(IDM_TREE_TOTAL,
                    379:         MF_BYCOMMAND | (fTotal ? MF_CHECKED : MF_UNCHECKED));
                    380:    Invalidate();
                    381: }
                    382:    
                    383: void CTREEWND::OnZoom()
                    384: {
                    385:    fZoom = !fZoom;
                    386: 
                    387:    CClientDC cdc( this );
                    388: 
                    389:    timerRoot.SetProperties(SET_LOCATION, fZoom);
                    390:    SetRect( timerRoot.RectTotal() );
                    391: 
                    392:    Invalidate();
                    393:    
                    394:    return;    
                    395: }
                    396: 
                    397: void CTREEWND::OnRanges()
                    398: {
                    399:     BOOL f = rs.fPrune;
                    400: 
                    401:     DoRangesDlg(this, &rs);
                    402: 
                    403:     if (f != rs.fPrune) {
                    404:        timerRoot.SetProperties(SET_COLORS|SET_LOCATION, fZoom, &rs);
                    405:     } else {
                    406:        timerRoot.SetProperties(SET_COLORS, fZoom, &rs);
                    407:     }
                    408:     SetRect( timerRoot.RectTotal() );
                    409: 
                    410:     Invalidate();
                    411: 
                    412:     return;
                    413: }

unix.superglobalmegacorp.com

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