projecttree.cpp

来自「这是主要完成文件上传功能,对要写ftp程序者是一个好的参考源码」· C++ 代码 · 共 269 行

CPP
269
字号
// ProjectTree.cpp : implementation file
//

#include "stdafx.h"
#include "EasyFtp.h"
#include "ProjectTree.h"
#include "LocalView.H"
#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CProjectTree *pProjectTree;
int iOldNo=999;
int iNowProjectNo=0;
extern CMainFrame *pMainFrame;
extern CLocalView *pLocalView;
extern char sProjectAttrib[256][6][256];
extern int iTotalProject;


HTREEITEM hItem;
/////////////////////////////////////////////////////////////////////////////
// CProjectTree

IMPLEMENT_DYNCREATE(CProjectTree, CFormView)

CProjectTree::CProjectTree()
	: CFormView(CProjectTree::IDD)
{
	//{{AFX_DATA_INIT(CProjectTree)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	pProjectTree=this;
}

CProjectTree::~CProjectTree()
{
	pProjectTree=NULL;
}

void CProjectTree::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CProjectTree)
	DDX_Control(pDX, IDC_PROJECTTREE, m_ProjectTree);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CProjectTree, CFormView)
	//{{AFX_MSG_MAP(CProjectTree)
	ON_WM_SIZE()
	ON_NOTIFY(NM_CLICK, IDC_PROJECTTREE, OnClickProjecttree)
	ON_NOTIFY(TVN_SELCHANGED, IDC_PROJECTTREE, OnSelchangedProjecttree)
	ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_PROJECTTREE, OnBeginlabeleditProjecttree)
	ON_NOTIFY(TVN_ENDLABELEDIT, IDC_PROJECTTREE, OnEndlabeleditProjecttree)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_MY_PROJECT_ADD,OnProjectAdd)
	ON_MESSAGE(WM_MY_PROJECT_DELETE,OnProjectDelete)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CProjectTree diagnostics

#ifdef _DEBUG
void CProjectTree::AssertValid() const
{
	CFormView::AssertValid();
}

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

/////////////////////////////////////////////////////////////////////////////
// CProjectTree message handlers

void CProjectTree::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
	RECT rct;
	GetClientRect(&rct);			//得到客户区域大小
	if(m_ProjectTree.m_hWnd)
	{
		m_ProjectTree.ShowWindow(SW_HIDE);
		m_ProjectTree.SetWindowPos(this,0,0,rct.right,rct.bottom,SWP_NOZORDER|SWP_NOMOVE);
		m_ProjectTree.ShowWindow(SW_SHOW);
	}		//初始化大小
	//******************
	int nRegion;
	//int nDistrict;
	HTREEITEM RegionParent;
	HTREEITEM DistrictParent;
	HTREEITEM TerritoryParent;
	TV_INSERTSTRUCT InsertItem;
	char szBuffer[255];
	//char *szDistrict[5]=
	//{"用户名","服务器地址","密码","服务器路径","本地路径"};
	for(nRegion=0;nRegion<iTotalProject;nRegion++)
	{
		InsertItem.item.mask=TVIF_TEXT;
		sprintf(szBuffer,"项目%02d:%s",nRegion+1,sProjectAttrib[nRegion][0]);
		InsertItem.item.pszText=szBuffer;
		InsertItem.item.cchTextMax=255;
		InsertItem.item.iImage=0;
		InsertItem.hParent=NULL;
		InsertItem.hInsertAfter=TVI_SORT;
		RegionParent=m_ProjectTree.InsertItem(&InsertItem);
		
		InsertItem.item.pszText="顺序号";
		InsertItem.item.cchTextMax=255;
		InsertItem.hParent=RegionParent;
		InsertItem.hInsertAfter=TVI_SORT;
		DistrictParent=m_ProjectTree.InsertItem(&InsertItem);
		sprintf(szBuffer,"%d",nRegion);
		InsertItem.item.pszText=szBuffer;
		InsertItem.item.cchTextMax=255;
		InsertItem.hParent=DistrictParent;
		InsertItem.hInsertAfter=TVI_SORT;
		TerritoryParent=m_ProjectTree.InsertItem(&InsertItem);
	}
}

void CProjectTree::OnSize(UINT nType, int cx, int cy) 
{
	//CFormView::OnSize(nType, cx, cy);
	// TODO: Add your message handler code here
	if(m_ProjectTree.m_hWnd)
	{
		m_ProjectTree.ShowWindow(SW_HIDE);
		m_ProjectTree.SetWindowPos(this,0,0,cx,cy,SWP_NOZORDER|SWP_NOMOVE);
		m_ProjectTree.ShowWindow(SW_SHOW);
	}		//调整大小
}

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

void CProjectTree::OnSelchangedProjecttree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	char temp[256],*end;
	HTREEITEM hMItem;
	hMItem=m_ProjectTree.GetSelectedItem();
	hItem=m_ProjectTree.GetNextItem(hMItem,TVGN_CHILD);
	while(1)
	{
		strcpy(temp,m_ProjectTree.GetItemText(hItem));
		if(strcmp(temp,"顺序号")==0)
		{
			break;
		}
		hMItem=hItem;
		hItem=m_ProjectTree.GetNextItem(hMItem,TVGN_NEXT);
		if(hItem==NULL)
			break;
	}
	if(hItem!=NULL)
	{
		hMItem=m_ProjectTree.GetNextItem(hItem,TVGN_CHILD);
		strcpy(temp,m_ProjectTree.GetItemText(hMItem));
		iNowProjectNo=strtol(temp,&end,10);
		if(iOldNo!=iNowProjectNo)
		{
			pMainFrame->PostMessage(WM_MY_PROJECT_UPDATE);
			iOldNo=iNowProjectNo;
		}
	}
	*pResult = 0;
}

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

void CProjectTree::OnEndlabeleditProjecttree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;

	///pTVDispInfo->
	// TODO: Add your control notification handler code here
	
	
	//char temp[256];
	//HTREEITEM hItem;
	//hItem=m_ProjectTree.GetSelectedItem();
	//strcpy(temp,m_ProjectTree.UpdateData();//.GetItemText(hItem));
	//m_ProjectTree.UpdateData(false);
	//AfxMessageBox("temp");
	

	*pResult = 0;
}

void CProjectTree::OnProjectAdd(WPARAM wParam, LPARAM lParam)
{
	HTREEITEM RegionParent;
	HTREEITEM DistrictParent;
	HTREEITEM TerritoryParent;
	TV_INSERTSTRUCT InsertItem;
	char szBuffer[255];
	InsertItem.item.mask=TVIF_TEXT;
	sprintf(szBuffer,"项目%02d:%s",iNowProjectNo+1,sProjectAttrib[iNowProjectNo][0]);
	InsertItem.item.pszText=szBuffer;
	InsertItem.item.cchTextMax=255;
	InsertItem.item.iImage=0;
	InsertItem.hParent=NULL;
	InsertItem.hInsertAfter=TVI_SORT;
	RegionParent=m_ProjectTree.InsertItem(&InsertItem);

	InsertItem.item.pszText="顺序号";
	InsertItem.item.cchTextMax=255;
	InsertItem.hParent=RegionParent;
	InsertItem.hInsertAfter=TVI_SORT;
	DistrictParent=m_ProjectTree.InsertItem(&InsertItem);
	sprintf(szBuffer,"%d",iNowProjectNo);
	InsertItem.item.pszText=szBuffer;
	InsertItem.item.cchTextMax=255;
	InsertItem.hParent=DistrictParent;
	InsertItem.hInsertAfter=TVI_SORT;
	TerritoryParent=m_ProjectTree.InsertItem(&InsertItem);

	PostMessage(TVN_SELCHANGED);
}

void CProjectTree::OnProjectDelete(WPARAM wParam, LPARAM lParam)
{
	if((hItem!=NULL)&&(iTotalProject>0))
	{
		char szBuffer[256];
		HTREEITEM hMItem;
		for(int i=iNowProjectNo;i<iTotalProject;i++)
		{
			strcpy(sProjectAttrib[i][0],sProjectAttrib[i+1][0]);
			strcpy(sProjectAttrib[i][1],sProjectAttrib[i+1][1]);
			strcpy(sProjectAttrib[i][2],sProjectAttrib[i+1][2]);
			strcpy(sProjectAttrib[i][3],sProjectAttrib[i+1][3]);
			strcpy(sProjectAttrib[i][4],sProjectAttrib[i+1][4]);
			strcpy(sProjectAttrib[i][5],sProjectAttrib[i+1][5]);
			hMItem=m_ProjectTree.GetNextItem(hItem,TVGN_CHILD);
			sprintf(szBuffer,"%d",i-1);
			m_ProjectTree.SetItemText(hMItem,szBuffer);
			hMItem=m_ProjectTree.GetNextItem(hItem,TVGN_PARENT);
			hItem=m_ProjectTree.GetNextItem(hMItem,TVGN_NEXT);
			hMItem=m_ProjectTree.GetNextItem(hItem,TVGN_CHILD);
			hItem=hMItem;
		}
		iTotalProject--;
		m_ProjectTree.DeleteItem(m_ProjectTree.GetNextItem(hItem,TVGN_CARET));
	}
	PostMessage(TVN_SELCHANGED);
}

⌨️ 快捷键说明

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