File:  [WindowsNT SDKs] / mstools / samples / sdktools / capview / tree.cpp
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 18:24:28 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: ntsdk-jul-1993, HEAD
Microsoft Windows NT Build 511 (SDK Final Release) 07-24-1993

#include        <afxwin.h>
#include        <afxdlgs.h>
#include        <afxcoll.h>
#include        <string.h>

#include        "types.h"
//#include        "dialogs.h"
#include        "resource.h"
#include        "ranges.h"
#include        "dispobj.h"
#include        "timer.h"
#include        "tree.h"


#define PAGESIZE 8

/*********************** GLOBAL DATA *****************************/

CAaaArray       rgLoc;
BOOL  fXYZ = FALSE;
BOOL  fTotal = TRUE;
extern  HICON   HIconTree;

/*****************************************************************/

BEGIN_MESSAGE_MAP(CTREEWND, CMDIChildWnd)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_MDIACTIVATE()
	ON_WM_HSCROLL()
	ON_WM_KEYDOWN()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_LBUTTONDOWN()
	ON_WM_PAINT()
	ON_WM_SIZE()
	ON_WM_VSCROLL()

	ON_COMMAND( VK_UP, OnUp )
	ON_COMMAND( VK_DOWN, OnDown )
	ON_COMMAND( IDM_TREE_EXPANDALL, OnExpandAll )
	ON_COMMAND( IDM_TREE_FONT, OnFont )
	ON_COMMAND( IDM_TREE_TOTAL, OnTotal )
	ON_COMMAND( IDM_TREE_XYZ, OnXYZ )
	ON_COMMAND( IDM_TREE_ZOOM, OnZoom )
	ON_COMMAND( IDM_TREE_RANGES, OnRanges )

END_MESSAGE_MAP()

BOOL CTREEWND::Create(LPCSTR szTitle, LONG style, const RECT& rect,
	CMDIFrameWnd* parent)
{
    const char * pszStockClass = AfxRegisterWndClass(
	CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL, IDC_UPARROW),
	(HBRUSH) (COLOR_WINDOW+1), HIconTree);

    return CMDIChildWnd::Create(pszStockClass, szTitle, style, rect, parent);
}


CTREEWND::CTREEWND()  : ptOrigin(0, 0)
{
   int  i;
   
   m_pMenuCurrent = NULL;
   m_bWindowActive = FALSE;
   logFont = DefaultFont;
   fZoom = FALSE;
   
   for (i=0; i<MAX_NUM_RANGES; i++) {
       rs.TextColor[i] = 0;
       rs.BackColor[i] = RGB( 0, 0, 0);
       rs.Above[i] = 101;
   }
   
   rs.Above[0] = 0;  rs.BackColor[0] = RGB(   0,   0, 255);  
		rs.TextColor[0] = 1;
   rs.Above[1] = 1;  rs.BackColor[1] = RGB(   0, 255,   0);
   rs.Above[2] = 2;  rs.BackColor[2] = RGB(   0, 255, 255);
   rs.Above[3] = 5;  rs.BackColor[3] = RGB( 255, 255,   0);
   rs.Above[4] = 20;  rs.BackColor[4] = RGB( 255,   0,   0);
   rs.Above[5] = 101;
   rs.cRanges = 5;
}

CTREEWND::~CTREEWND()
{
    if (m_bWindowActive) {
	m_pMenuCurrent->Detach();
    }
}


int CTREEWND::OnCreate(LPCREATESTRUCT p)
{
    TEXTMETRIC  tm;

    CDC *       dc = GetDC();
    dc->GetTextMetrics( &tm );
    ReleaseDC( dc );

    m_cxChar = tm.tmAveCharWidth;
    m_cxCaps = ( (tm.tmPitchAndFamily & 1) ? 3 : 2) * m_cxChar / 2;
    m_cyChar = tm.tmHeight + tm.tmExternalLeading;
    m_nMaxWidth = ( 20 ) * m_cxCaps;

    return 0;
}


void CTREEWND::OnDestroy()
{
  //  m_pMDIFrameWnd->SendMessage(WM_CHILDDESTROY, (UINT)m_hWnd, 0);
    return;
}


void CTREEWND::OnSize(UINT nType, int cx, int cy)
{
    m_cxClient = cx;
    m_cyClient = cy;

    ptOrigin.y = min( ptOrigin.y, rtArea.Height());
    
    SetScrollRange( SB_VERT, 0, rtArea.Height(), FALSE );
    SetScrollPos( SB_VERT, ptOrigin.y, TRUE );


    ptOrigin.x = min( ptOrigin.x, rtArea.Width() );

    SetScrollRange( SB_HORZ, 0, rtArea.Width(), FALSE );
    SetScrollPos( SB_HORZ, ptOrigin.x, TRUE );

    CMDIChildWnd::OnSize(nType, cx, cy);

    return;
}

void CTREEWND::OnMDIActivate(BOOL bActivate, CWnd * pActive,
	CWnd* pDeactivate)
{
    CMDIFrameWnd * pFrame = m_pMDIFrameWnd;
    CMenu *             pWinPopupMenu = NULL;
    CMenu *             pMenu = NULL;

    m_bWindowActive = bActivate;

    if (bActivate) {
	pMenu = new CMenu;
	pMenu->LoadMenu("MdiMenuTree");
	pWinPopupMenu = pMenu->GetSubMenu(TREE_MENU_POSITION);

	CMenu * pLastMenu = pFrame->MDISetMenu(pMenu,pWinPopupMenu);
	pLastMenu->DestroyMenu();

	delete m_pMenuCurrent;
	m_pMenuCurrent = pMenu;
    } else {
	pMenu = new CMenu;
	pMenu->LoadMenu("MdiMenuInit");
	pWinPopupMenu = pMenu->GetSubMenu(INIT_MENU_POS);

	CMenu * pLastMenu = pFrame->MDISetMenu(pMenu, pWinPopupMenu);
	pLastMenu->DestroyMenu();

	delete m_pMenuCurrent;
	m_pMenuCurrent = pMenu;
    }

    pFrame->DrawMenuBar();
}

void CTREEWND::OnPaint()
{
    CPaintDC dc (this);
    CFont       cFont;
    CFont *     lpcFontOld;
    
    if (!fZoom) {
	cFont.CreateFontIndirect(&logFont);
	lpcFontOld = dc.SelectObject(&cFont);
    }
    dc.SetWindowOrg(ptOrigin);
    
    dc.SetBkMode(TRANSPARENT);
    dc.m_ps.rcPaint.left += ptOrigin.x;
    dc.m_ps.rcPaint.right += ptOrigin.x;
    dc.m_ps.rcPaint.top += ptOrigin.y;
    dc.m_ps.rcPaint.bottom += ptOrigin.y;
    
    timerRoot.PaintTree(&dc, fZoom, &rs, dc.m_ps.rcPaint);

    if (!fZoom) {
	dc.SelectObject(lpcFontOld);    
    }
    return;
}

void CTREEWND::OnVScroll(UINT wParam, UINT pos, CScrollBar *)
{
    int     nScrollInc;

    switch( wParam ) {
    case SB_TOP:
	nScrollInc = -ptOrigin.y;
	break;

    case SB_BOTTOM:
	nScrollInc = rtArea.Height() - ptOrigin.y;
	break;

    case SB_LINEUP:
	nScrollInc = -m_cyClient/10;
	break;

    case SB_LINEDOWN:
	nScrollInc = m_cyClient/10;
	break;

    case SB_PAGEUP:
	nScrollInc = min( -1, -m_cyClient);
	break;

    case SB_PAGEDOWN:
	nScrollInc = max( 1, m_cyClient );
	break;

    case SB_THUMBTRACK:
	nScrollInc = pos - ptOrigin.y;
	break;

    default:
	nScrollInc = 0;
	break;
    }

    nScrollInc = max( -ptOrigin.y, min( nScrollInc, rtArea.Height() - ptOrigin.y ) );
    if (nScrollInc) {
	ptOrigin.y += nScrollInc;
	ScrollWindow( 0, -nScrollInc );
	SetScrollPos( SB_VERT, ptOrigin.y );
	UpdateWindow();
    }
}

void CTREEWND::OnHScroll(UINT wParam, UINT pos, CScrollBar *)
{
    int     nScrollInc;

    switch( wParam ) {
    case SB_LINEUP:
	nScrollInc = -m_cxClient/10;
	break;

    case SB_LINEDOWN:
	nScrollInc = m_cxClient/10;
	break;

    case SB_PAGEUP:
	nScrollInc = -m_cxClient;
	break;

    case SB_PAGEDOWN:
	nScrollInc = m_cxClient;
	break;

    case SB_THUMBTRACK:
	nScrollInc = pos - ptOrigin.x;
	break;

    default:
	nScrollInc = 0;
	break;
    }

    nScrollInc = max( -ptOrigin.x, min( nScrollInc, rtArea.Width() - ptOrigin.x ) );
    if (nScrollInc) {
	ptOrigin.x += nScrollInc;
	ScrollWindow( -nScrollInc, 0 );
	SetScrollPos( SB_HORZ, ptOrigin.x );
	UpdateWindow();
    }
}

void CTREEWND::OnUp()
{
}

void CTREEWND::OnDown()
{
}

void CTREEWND::OnKeyDown( UINT wParam, UINT, UINT )
{
    switch( wParam ) {
    case VK_HOME:
	OnVScroll( SB_TOP, 0, NULL );
	break;
    case VK_END:
	OnVScroll( SB_BOTTOM, 0, NULL );
	break;

    case VK_PRIOR:
	OnVScroll( SB_PAGEUP, 0, NULL );
	break;

    case VK_NEXT:
	OnVScroll( SB_PAGEDOWN, 0, NULL );
	break;

    case VK_LEFT:
	OnHScroll( SB_PAGEUP, 0, NULL );
	break;

    case VK_RIGHT:
	OnHScroll( SB_PAGEDOWN, 0, NULL );
	break;
    }
}

void CTREEWND::OnLButtonDown( UINT, CPoint location )
{
    location.Offset(ptOrigin);
    timerRoot.DblClick( location );
    timerRoot.SetProperties(SET_LOCATION, fZoom);
    SetRect(timerRoot.RectTotal());
    Invalidate();
   
    return;
}

void CTREEWND::OnLButtonDblClk( UINT wParam, CPoint location ) 
{
   
   return;
}

void CTREEWND::OnFont()
{
   CFont        cFont;
   CFont *      lpcFont;        
   CFontDialog  fontDlg(&logFont);
   CRect        rt;
   
   fontDlg.DoModal();   
   
   CClientDC cdc( this );
   cFont.CreateFontIndirect(&logFont);
   lpcFont = cdc.SelectObject(&cFont);

   timerRoot.SetProperties(SET_SIZE|SET_LOCATION, fZoom, NULL, &cdc);
   SetRect( timerRoot.RectTotal() );

   cdc.SelectObject(lpcFont);
   Invalidate();
   return;
}


void CTREEWND::OnExpandAll()
{
    timerRoot.ExpandAll();
    timerRoot.SetProperties(SET_LOCATION, fZoom);
    SetRect( timerRoot.RectTotal() );
    Invalidate();
}

void CTREEWND::OnXYZ()
{
   fXYZ = !fXYZ;
   m_pMenuCurrent->CheckMenuItem(IDM_TREE_XYZ,
        MF_BYCOMMAND | (fXYZ ? MF_CHECKED : MF_UNCHECKED));
   Invalidate();
}

void CTREEWND::OnTotal()
{
   fTotal = !fTotal;
   m_pMenuCurrent->CheckMenuItem(IDM_TREE_TOTAL,
        MF_BYCOMMAND | (fTotal ? MF_CHECKED : MF_UNCHECKED));
   Invalidate();
}
   
void CTREEWND::OnZoom()
{
   fZoom = !fZoom;

   CClientDC cdc( this );

   timerRoot.SetProperties(SET_LOCATION, fZoom);
   SetRect( timerRoot.RectTotal() );

   Invalidate();
   
   return;    
}

void CTREEWND::OnRanges()
{
    BOOL f = rs.fPrune;

    DoRangesDlg(this, &rs);

    if (f != rs.fPrune) {
	timerRoot.SetProperties(SET_COLORS|SET_LOCATION, fZoom, &rs);
    } else {
	timerRoot.SetProperties(SET_COLORS, fZoom, &rs);
    }
    SetRect( timerRoot.RectTotal() );

    Invalidate();

    return;
}

unix.superglobalmegacorp.com

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