|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.