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

📄 leftpaneview.cpp

📁 功能进化对于设计人员来说有着及其重要的作用
💻 CPP
字号:
// LeftPaneView.cpp : implementation file
//

#include "stdafx.h"
#include "duoshi2.h"
#include "LeftPaneView.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLeftPaneView

IMPLEMENT_DYNCREATE(CLeftPaneView, CTreeView)

CLeftPaneView::CLeftPaneView()
{


}

CLeftPaneView::~CLeftPaneView()
{
}


BEGIN_MESSAGE_MAP(CLeftPaneView, CTreeView)
	//{{AFX_MSG_MAP(CLeftPaneView)
	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
	ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
	ON_COMMAND(IDM_DELETE, OnDelete)
	ON_COMMAND(IDM_EDIT, OnEdit)
	ON_COMMAND(IDM_INSERT_AFTER, OnInsertAfter)
	ON_COMMAND(IDM_INSERT_BEFORE, OnInsertBefore)
	ON_COMMAND(IDM_INSERT_FATHER, OnInsertFather)
	ON_COMMAND(IDM_INSERT_SUN, OnInsertSun)
	ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, OnEndlabeledit)
	ON_COMMAND(ID_tree_test, Ontreetest)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLeftPaneView drawing

void CLeftPaneView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CLeftPaneView diagnostics

#ifdef _DEBUG
void CLeftPaneView::AssertValid() const
{
	CTreeView::AssertValid();
}

void CLeftPaneView::Dump(CDumpContext& dc) const
{
	CTreeView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CLeftPaneView message handlers

BOOL CLeftPaneView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}

void CLeftPaneView::OnInitialUpdate() 
{
	CTreeView::OnInitialUpdate();
	
//设置树风格
	::SetWindowLong(m_hWnd,GWL_STYLE,WS_VISIBLE|WS_TABSTOP 
		|WS_CHILD|WS_BORDER|TVS_HASBUTTONS 
		|TVS_LINESATROOT|TVS_HASLINES|TVS_EDITLABELS);
	CTreeCtrl& treeCtrl=GetTreeCtrl();
	//创建图像列表
	//m_ImageList.Create(IDB_IMAGES, 16, 1, RGB(255, 0, 255));	
//	treeCtrl.SetImageList(&m_ImageList, LVSIL_NORMAL);
	m_ImageList.Create(16, 16, ILC_COLOR32 ,10, RGB(0,0,0));
	m_ImageList.SetBkColor(RGB(198,247,181));		//设置背景色
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON5));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON6));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON7));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON8));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON9));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON10));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON11));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON12));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON13));
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON14));

	treeCtrl.SetImageList(&m_ImageList,TVSIL_NORMAL);

	treeCtrl.SetBkColor(RGB(201,230,245));
	treeCtrl.SetTextColor(RGB(255,0,0));
	//插入树项
	treeCtrl.InsertItem("Function tree", 0, 0);
	
}

void CLeftPaneView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	
	*pResult = 0;
}

void CLeftPaneView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	CMenu mainMenu;
	mainMenu.LoadMenu(IDM_POPMENU);
	CMenu* pPopMenu=mainMenu.GetSubMenu(0);
	CPoint point;
    UINT pflag;
	GetCursorPos(&point);
	ScreenToClient(&point);
		CTreeCtrl& treeCtrl=GetTreeCtrl();
	HTREEITEM hItem=treeCtrl.HitTest(point,&pflag);   
	if(hItem==NULL)
		return;   
	treeCtrl.SelectItem(hItem);   
/*	CString str;
	str.Format("%d,%d",point.x,point.y);
	MessageBox(str);*/
	ClientToScreen(&point);
	pPopMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON , point.x,point.y,FromHandle(this->m_hWnd),NULL);	
	*pResult = 0;
}

void CLeftPaneView::OnDelete() 
{

	CTreeCtrl& treeCtrl=GetTreeCtrl();
	treeCtrl.DeleteItem(treeCtrl.GetSelectedItem());
}

void CLeftPaneView::OnEdit() 
{
	CTreeCtrl& treeCtrl=GetTreeCtrl();
	treeCtrl.EditLabel(treeCtrl.GetSelectedItem());
	
}


int CLeftPaneView::GetLevel(const HTREEITEM htim)	//得到第几级节点
{   CTreeCtrl& treeCtrl=GetTreeCtrl();
	HTREEITEM tempHitm=htim;
	int level=1;
	while(tempHitm=treeCtrl.GetParentItem(tempHitm))
		level++;
	level%=7;
	return level;
}


void CLeftPaneView::OnInsertAfter() 
{
	CTreeCtrl& treeCtrl=GetTreeCtrl();
	HTREEITEM hitm=treeCtrl.GetSelectedItem();
	if(NULL==hitm)
		return;
	int level=GetLevel(hitm);
	treeCtrl.EditLabel(treeCtrl.InsertItem("function",2*level-2,2*level-1,treeCtrl.GetParentItem(hitm),hitm));
	
}

void CLeftPaneView::OnInsertBefore() 
{
	CTreeCtrl& treeCtrl=GetTreeCtrl();
	HTREEITEM hitm=treeCtrl.GetSelectedItem();
	if(NULL==hitm)
		return;
	int level=GetLevel(hitm);
	treeCtrl.EditLabel(treeCtrl.InsertItem("function",2*level-2,2*level-1,treeCtrl.GetParentItem(hitm),treeCtrl.GetPrevSiblingItem(hitm)==NULL?TVI_FIRST:treeCtrl.GetPrevSiblingItem(hitm)));
	
}

void CLeftPaneView::OnInsertFather() 
{
CTreeCtrl& treeCtrl=GetTreeCtrl();
treeCtrl.EditLabel(treeCtrl.InsertItem("function",0,1,TVI_ROOT,TVI_LAST));	
}

void CLeftPaneView::OnInsertSun() 
{
CTreeCtrl& treeCtrl=GetTreeCtrl();
HTREEITEM hitm=treeCtrl.GetSelectedItem();
	if(NULL==hitm)
		return;
	int level=GetLevel(hitm);
	level++;
	HTREEITEM tempHitm=treeCtrl.InsertItem("function",2*level-2,2*level-1,hitm,TVI_LAST);
	treeCtrl.Expand(hitm,TVE_EXPAND);
	treeCtrl.EditLabel(tempHitm);	
}

void CLeftPaneView::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
{
	TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
	// TODO: Add your control notification handler code here

/*	CString str,temstr;
	GetEditControl()->GetWindowText(str);
	str.Replace(_T(" "),"  ");	//把中文空格换成两个英文空格
	temstr=str;
	str.TrimLeft();
	str.TrimRight();
	if(strlen(str)<1 || temstr!=str)	//第二个条件保证不以空格开头或结尾
		*pResult=false;		//set it false not to save the changes
	else
		*pResult = true;	//set it true to save the changes
*///注释部分的方法只检测不修改
	//检测并自动去掉首尾空格
	CString str(pTVDispInfo->item.pszText);
	str.Replace(_T(" "),"  ");
	str.TrimLeft();
	str.TrimRight();
	if(strlen(str)<1)
		*pResult=false;
	else
	{
		sprintf(pTVDispInfo->item.pszText,"%s",str.GetBuffer(str.GetLength()));
		*pResult=true;
	}
}

void CLeftPaneView::Ontreetest() 
{
 


CTreeCtrl& treeCtrl=GetTreeCtrl();
HTREEITEM hitm=treeCtrl.GetFirstVisibleItem();
fatherD=treeCtrl.GetItemText(hitm);
num_child=0;
HTREEITEM hitm1=treeCtrl.GetChildItem(hitm);

if(treeCtrl.GetItemText(hitm1)!="")
{
num_child=1;
sunD[0]=treeCtrl.GetItemText(hitm1);
HTREEITEM hitm3=treeCtrl.GetChildItem(hitm1);
grandD[0][0]=treeCtrl.GetItemText(hitm3);

int i=1;
HTREEITEM hitm4=treeCtrl.GetNextSiblingItem(hitm3);
while(treeCtrl.GetItemText(hitm4)!="")
{

grandD[0][i]=treeCtrl.GetItemText(hitm4);
i++;
hitm4=treeCtrl.GetNextSiblingItem(hitm4);
}
num_grand[0]=i;


HTREEITEM hitm2=treeCtrl.GetNextSiblingItem(hitm1);
while(treeCtrl.GetItemText(hitm2)!="")
{

sunD[num_child]=treeCtrl.GetItemText(hitm2);
HTREEITEM hitm5=treeCtrl.GetChildItem(hitm2);
grandD[num_child][0]=treeCtrl.GetItemText(hitm5);
HTREEITEM hitm6=treeCtrl.GetNextSiblingItem(hitm5);
int j=1;
while(treeCtrl.GetItemText(hitm6)!="")
{

grandD[num_child][j]=treeCtrl.GetItemText(hitm6);
j++;
hitm6=treeCtrl.GetNextSiblingItem(hitm6);
}
num_grand[num_child]=j;
num_child++;
hitm2=treeCtrl.GetNextSiblingItem(hitm2);
}
}
else{}














}

⌨️ 快捷键说明

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