📄 红黑树view.cpp
字号:
// 红黑树View.cpp : implementation of the CMyView class
//
#include "stdafx.h"
#include "红黑树.h"
#include "红黑树Doc.h"
#include "红黑树View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern rbTree gtree;
extern pNode temp;
/////////////////////////////////////////////////////////////////////////////
// CMyView
void listAll(pNode pn,CTreeCtrl *list,HTREEITEM hit=0);
void listAll(pNode pn,CListBox *list ,int nindex=0);
IMPLEMENT_DYNCREATE(CMyView, CView)
BEGIN_MESSAGE_MAP(CMyView, CView)
//{{AFX_MSG_MAP(CMyView)
ON_WM_CREATE()
ON_BN_CLICKED(IDC_BNI,OnButtonInsert)
ON_BN_CLICKED(IDC_BND,OnButtonDelete)
ON_BN_CLICKED(IDC_SHOW,OnButtonShow)
ON_LBN_SELCHANGE(IDC_LST, OnSelchangeLB)
ON_BN_CLICKED(IDC_RANK,OnButtonRank)
ON_BN_CLICKED(IDC_SEL,OnButtonSel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyView construction/destruction
CMyView::CMyView()
{
// TODO: add construction code here
}
CMyView::~CMyView()
{
}
BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
//cs.dwExStyle=WS_HSCROLL|WS_VSCROLL;
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMyView drawing
void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//pDC->TextOut(0,500,"This is a simple test");
}
/////////////////////////////////////////////////////////////////////////////
// CMyView diagnostics
#ifdef _DEBUG
void CMyView::AssertValid() const
{
CView::AssertValid();
}
void CMyView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMyDoc* CMyView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
return (CMyDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMyView message handlers
int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
m_btnd=new CButton;
m_btni=new CButton;
m_btnshow=new CButton;
m_btnr=new CButton;
m_btnsel=new CButton;
CRect btn1(50,150,130,180);CRect btnr(150,150,230,180);
CRect btn2(50,200,130,230);CRect btns(150,200,230,230);
CRect btn3(100,250,180,280);CRect bt(230,200,260,230);
m_btnshow->Create("显示(&s)",WS_VISIBLE,btn3,this,IDC_SHOW);
m_btnd->Create("删除(&I)",WS_VISIBLE,btn1,this,IDC_BND);
m_btni->Create("插入(&D)",WS_VISIBLE,btn2,this,IDC_BNI);
m_btnr->Create("级别(&R)",WS_VISIBLE,btnr,this,IDC_RANK);
m_btnsel->Create("定位(&S)",WS_VISIBLE,btns,this,IDC_SEL);
Sele =new CEdit;
Sele->Create( WS_VISIBLE,bt,this,IDC_ESEL);
m_ek=new CStatic;
m_en=new CStatic;
ss=new CStatic;
ss1=new CStatic;
CRect tx1(50,20,100,50);
CRect tx2(350,20,430,50);
m_ek->Create("name:",WS_VISIBLE|WS_CHILD,tx1,this,0);
m_en->Create("All Nodes",WS_VISIBLE,tx2,this,0);
CRect tx3(120,20,200,50);
// CRect tx1(20,20,100,50);
name=new CEdit;
name->Create( WS_VISIBLE|ES_AUTOHSCROLL,tx3,this,IDC_NAM);
name->CreateSolidCaret(100,30);
CRect lb2(350,51,730,450);
//tree=new CTreeCtrl;
//tree->Create(WS_VISIBLE|WS_CHILD|WS_VSCROLL|WS_HSCROLL,lb2,this,IDC_TREE);
//tree->SetBkColor(RGB(180,180,180));
list=new CListBox;
list->Create(WS_VISIBLE|WS_CHILD|WS_VSCROLL|WS_HSCROLL
,lb2,this,IDC_LST);
// list->SetBkColor(RGB(180,180,180));
CRect tx5(120,60,200,90);
CRect tx4(50,60,100,90);
key=new CEdit;
ss->Create ( "Key:",WS_VISIBLE,tx4,this);
key->Create( WS_VISIBLE,tx5,this,IDC_KEY);
key->SetWindowText("34");
name->SetWindowText("root");
name->SetLimitText(4);
key->SetLimitText(3);
srank=new CStatic;
ssize=new CStatic;
CRect r1(50,350,200,380);
CRect r2(50,400,200,430);
//CRect r3(50,250,130,280);
srank->Create("Rank : ",WS_VISIBLE,r1,this,IDC_RANK);
ssize->Create("Size : ",WS_VISIBLE,r2,this,IDC_IZE);
return 0;
}
void CMyView::OnButtonInsert()
{
CString sna,sky;
name->GetWindowText(sna);
key->GetWindowText(sky);
int k;
sscanf(sky,"%d",&k);
gtree.rbInsert(gtree.newNode(k,sna.GetBuffer(15)));
int cn=list->GetCount();
for(int i=0;i<cn;i++)
list->DeleteString(0);
if(gtree.root!=nil)
listAll(gtree.root,list);
}
void CMyView::OnButtonDelete()
{
if(list->GetCount()==0)
{
MessageBox("还是一棵空树!!!");
return ;
}
int in;
in=list->GetCurSel();
if(in==LB_ERR)
{
MessageBox("请先在表中选择!!!");
return ;
}
gtree.rbDelete((pNode)list->GetItemData(in));
int cn=list->GetCount();
for(int i=0;i<cn;i++)
list->DeleteString(0);
if(gtree.root!=nil)
listAll(gtree.root,list);
}
void CMyView::OnButtonShow()
{
((CMainFrame*)AfxGetMainWnd())->OnShow();
}
void CMyView::OnSelchangeLB()
{
int in;
in=list->GetCurSel();
if(in==LB_ERR)
return ;
pNode tem=(pNode)list->GetItemData(in);
CString str;
str.Format("%d",tem->key);
key->SetWindowText(str);
name->SetWindowText(tem->name);
//UpdateData(1);
key->UpdateWindow();
name->UpdateData(1);
str.Format("%d",tem->size);
ssize->SetWindowText(str);
}
void CMyView::OnButtonRank()
{
if(list->GetCount()==0)
{
MessageBox("还是一棵空树!!!");
return ;
}
int in;
in=list->GetCurSel();
if(in==LB_ERR)
{
MessageBox("请先在表中选择!!!");
return ;
}
pNode tem=(pNode)list->GetItemData(in);
CString str,str1;
str.Format("%d",tem->key);
key->SetWindowText(str);
name->SetWindowText(tem->name);
//UpdateData(1);
key->UpdateWindow();
name->UpdateData(1);
str.Format("%s%d","Size : ",tem->size);
ssize->SetWindowText(str);
str.Format("%s%d","Rank : ",gtree.Rank(tem));
srank->SetWindowText(str);
}
void CMyView::OnButtonSel()
{
if(list->GetCount()==0)
{
MessageBox("还是一棵空树!!!");
return ;
}
int in;
CString rr;
Sele->GetWindowText(rr);
sscanf(rr,"%d",&in);
if(in<0)
{
MessageBox("输入不合法!!");
return ;
}
if(in>gtree.root->size)
{
MessageBox("输入值太大!!");
return ;
}
pNode tem=gtree.OS_Select(gtree.root,in);
CString str;
str.Format("%d",tem->key);
key->SetWindowText(str);
name->SetWindowText(tem->name);
//UpdateData(1);
key->UpdateWindow();
name->UpdateData(1);
str.Format("%s%d","Size : ",tem->size);
ssize->SetWindowText(str);
str.Format("%s%d","Rank : ",gtree.Rank(tem));
srank->SetWindowText(str);
int cn=list->GetCount();
for(int i=0;i<cn;i++)
{
pNode p=(pNode)list->GetItemData(in);
if(p==tem)
{
list->SetSel(i);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -