⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rbtreeview.cpp

📁 使用VS.NET开发的数据结构红黑树可视化图形界面演示。可以进行节点的添加及删除。
💻 CPP
字号:
// RBTreeView.cpp : CRBTreeView 类的实现
//

#include "stdafx.h"
#include "RBTree.h"
#include "MainFrm.h"

#include "RBTreeDoc.h"
#include "RBTreeView.h"
#include ".\rbtreeview.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CRBTreeView

IMPLEMENT_DYNCREATE(CRBTreeView, CView)

BEGIN_MESSAGE_MAP(CRBTreeView, CView, CSInsert, CSDelete)
	// 标准打印命令
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
	ON_COMMAND(ID_SHOW, OnShow)
	ON_BN_CLICKED(ID_DEL_OK, OnShow)
	ON_BN_CLICKED(ID_INS_OK, OnShow)
END_MESSAGE_MAP()

// CRBTreeView 构造/析构

CRBTreeView::CRBTreeView()
{
	// TODO: 在此处添加构造代码

}

CRBTreeView::~CRBTreeView()
{
}

BOOL CRBTreeView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
	// 样式

	return CView::PreCreateWindow(cs);
}

// CRBTreeView 绘制

void CRBTreeView::OnDraw(CDC* pDC)
{
	CRBTreeDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO: 在此处为本机数据添加绘制代码

	pDoc->UpdateAllViews(this);
	extern RBTree rbtree;
	rbtree.Fixlevel();

	
	CRect rc;
	
	
	

	GetClientRect(&rc);
	

	rbtree.FixPosition(rc.right,rc.left);

	RBTreeNode * node =rbtree.GetRoot();
	Show(node);
	
	
	
	
	
	

}

int CRBTreeView::Draw(long x,long y,BOOL state)
{
	
	return 0;
	
	
/*
	
	*/
	
}

int CRBTreeView::Show(RBTreeNode * z)
{
	
		CClientDC dc(this);
		extern RBTree rbtree;
		
		
		
	
		RBTreeNode * Nil = rbtree.Nil;
		CString strvalue;
		CString strsize;
		CString strlevel;
	if(z!=Nil)
	{
		long cx=z->x;
		long cy=z->y;
		long level=z->level;

		strvalue.Format("value:%d",z->value);
		strsize.Format("size:%d",z->size);
		strlevel.Format("level:%d",z->level);


		
		
		

		

	
		if(z->leftchild!=Nil)
		{
			
			Show(z->leftchild);
			
		}
		if(z->rightchild!=Nil)
			{
				
				Show(z->rightchild);

			}

		dc.MoveTo(cx,cy);
		
	//	dc.TextOut(cx+23,cy+16,strsize);
		
		if(z->parent!=Nil)
		{
			dc.MoveTo(z->x,z->y);
			dc.LineTo(z->parent->x,z->parent->y);
		}
		HBITMAP hbitmap;

		if(z->color==RED)
			hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_RED));
		else hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BLACK));


		HDC hMemDC=::CreateCompatibleDC(NULL);
		SelectObject(hMemDC,hbitmap);
		::StretchBlt(dc.m_hDC,(cx-24),cy,47,47,hMemDC,0,0,47,47,SRCCOPY);
		::DeleteDC(hMemDC);
		::DeleteObject(hbitmap);

		dc.TextOut(cx-8,cy+46,strvalue);
		dc.TextOut(cx-8,cy+62,strsize);
		dc.TextOut(cx-8,cy+78,strlevel);
	//	dc.TextOut(cx+10,cy+24,strlevel);

	return 0;

		return 0;	
		
	}
	
	else 
		return 0;
}

void CRBTreeView::OnShow()
{
//	OnPreparePrinting(pInfo);
	
	CRBTreeDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;


	CPaintDC dc(this);
	Invalidate(1);
	
	OnDraw(&dc);
	
	
	

	
}

// CRBTreeView 打印

BOOL CRBTreeView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// 默认准备
	return DoPreparePrinting(pInfo);
}

void CRBTreeView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 打印前添加额外的初始化
}

void CRBTreeView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 打印后添加清除过程
}


// CRBTreeView 诊断

#ifdef _DEBUG
void CRBTreeView::AssertValid() const
{
	CView::AssertValid();
}

void CRBTreeView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CRBTreeDoc* CRBTreeView::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRBTreeDoc)));
	return (CRBTreeDoc*)m_pDocument;
}
#endif //_DEBUG


// CRBTreeView 消息处理程序


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -