www.gusucode.com > VC++编写的SQL服务端和客户端源码程序 > VC++编写的SQL服务端和客户端源码程序\code\Client\FileBar.cpp

    // FileBar.cpp : implementation file
/////////////////////////////////////////////////////////////////////////////
// Download by http://www.NewXing.com
#include "stdafx.h"
#include "Client.h"
#include "FileBar.h"
#include "Resource.h"
//#include "table.h"
//#include "MSLDoc.h"

#include "ClientDoc.h"
#include "Msg.h"

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

extern CClientApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CFileBar

CFileBar::CFileBar()
{
}

CFileBar::~CFileBar()
{
}

#define IDC_TREE_CTRL 1000

BEGIN_MESSAGE_MAP(CFileBar, CControlBar)
	//{{AFX_MSG_MAP(CFileBar)
	ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING, OnItemexpanding)
	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
	ON_WM_CREATE()
	ON_WM_WINDOWPOSCHANGED()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFileBar message handlers

int CFileBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CControlBar::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	if( !m_TreeCtrl.Create(WS_CHILD | WS_VISIBLE | WS_THICKFRAME | TVS_HASBUTTONS |
		TVS_HASLINES | TVS_LINESATROOT, CRect(0,0,0,0), this ,IDC_TREE_CTRL) )
	{
		TRACE0("Failed to create view for CFileBar\n");
		return -1;
	}

	////////////////////////////////////////////////////////////////
	m_TreeCtrl.SetMenuID(IDR_POPUP);

	m_TreeCtrl.ModifyStyleEx(0, WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE);

	m_ImageList.Create (IDB_IMAGE_FILE, 16, 1, RGB(0,255,0));
	m_TreeCtrl.SetImageList (&m_ImageList, TVSIL_NORMAL);

	//Construct the trees____
	hitem0 = m_TreeCtrl.InsertItem( "MiniSQL关系库", 3, 3 );
	m_TreeCtrl.SetItemState( hitem0, TVIS_BOLD, TVIS_BOLD );

	return 0;
}

void CFileBar::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) 
{
	CCJControlBar::OnWindowPosChanged(lpwndpos);
	
	// TODO: Add your message handler code here
	if (IsFloating()) {
		m_TreeCtrl.MoveWindow( 5, 5, lpwndpos->cx-10, lpwndpos->cy-10 );
	}

	else if (IsHorzDocked()) {
		m_TreeCtrl.MoveWindow( 17, 3, lpwndpos->cx-25, lpwndpos->cy-17 );
	}

	else {
		m_TreeCtrl.MoveWindow( 3, 17, lpwndpos->cx-17, lpwndpos->cy-30 );
	}
}

BOOL CFileBar::add_item( CString& tname )
{
	int flag=0;
	POSITION pos = item_list.GetHeadPosition();
	while( pos )
	{
		if( item_list.GetNext( pos ) == tname )
		{
			flag = 1;
			break;
		}
	}
	
	if(flag)
		return FALSE;
	else 
	{
		item_list.AddTail( tname );
		return TRUE;
	}
}

void CFileBar::insert_tree( CString& tname, HTREEITEM hitem)
{
	if( add_item( tname ) )
		m_TreeCtrl.InsertItem( tname, 4, 4, hitem, TVI_LAST );
}

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

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

void CFileBar::ExpandTree()
{
	m_TreeCtrl.Expand (hitem0, TVE_EXPAND);
}

void CFileBar::ViewDb()
{
	HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
	CString name = m_TreeCtrl.GetItemText( hItem );

	CString cmd( "select * from " );
	cmd += name + ";";
	CMsg msg( COMMAND );
	msg.m_msgList.AddTail( cmd );
	theApp.SendMsg( msg );

	CClientDoc* pDoc = NULL;
	theApp.m_ClientDocList.AddTail( pDoc );
}

void CFileBar::DelFile(const CString &fname)
{
	POSITION pos = item_list.GetHeadPosition();
	POSITION old;
	bool flag = false;
	while( pos )
	{
		old = pos;
		CString temp = item_list.GetNext( pos );
		if( temp == fname )
		{
			item_list.RemoveAt( old );
			flag = true;
			break;
		}			
	}	

	if( !flag )
		return ;

	HTREEITEM hItem;
	hItem = m_TreeCtrl.GetNextItem( hitem0, TVGN_CHILD );
	if( hItem )
	{	
		if( m_TreeCtrl.GetItemText( hItem ) == fname )
		{
			m_TreeCtrl.DeleteItem( hItem );
			return ;
		}
		while( hItem = m_TreeCtrl.GetNextItem( hItem, TVGN_NEXT ) )
			if( m_TreeCtrl.GetItemText( hItem ) == fname )
			{
				m_TreeCtrl.DeleteItem( hItem );
				return ;
			}
	}
}

void CFileBar::Expanding()
{
	HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
	if( m_TreeCtrl.ItemHasChildren( hItem ) )
		return ;

	CString tname = m_TreeCtrl.GetItemText( hItem );
	theApp.m_treeList.AddTail( hItem );
	CMsg msg( FILEBAR_EXPAND );
	msg.m_msgList.AddTail( tname );
	theApp.SendMsg( msg );
}

void CFileBar::InsertAttr( CString& attr, HTREEITEM hItem )
{
	m_TreeCtrl.InsertItem( attr, 5, 5, hItem, TVI_LAST );
}

void CFileBar::InsertIndex( CString& index, HTREEITEM hItem )
{
	m_TreeCtrl.InsertItem( index, 6, 6, hItem, TVI_LAST );
}

void CFileBar::InsertIndex( LPCTSTR tname, LPCTSTR iname )
{
	HTREEITEM hItem;
	hItem = m_TreeCtrl.GetNextItem( hitem0, TVGN_CHILD );
	if( hItem )
	{	
		if( m_TreeCtrl.GetItemText( hItem ) == tname )
			;
		else
			while( hItem = m_TreeCtrl.GetNextItem( hItem, TVGN_NEXT ) )
				if( m_TreeCtrl.GetItemText( hItem ) == tname )
					break;
	}

	if( m_TreeCtrl.ItemHasChildren( hItem ) )
	{
		CString str( _T("index:") );
		str += iname;
		m_TreeCtrl.InsertItem( str, 6, 6, hItem, TVI_LAST );
	}
}

void CFileBar::DropIndex( LPCTSTR tname, LPCTSTR iname )
{
	HTREEITEM hItem;
	hItem = m_TreeCtrl.GetNextItem( hitem0, TVGN_CHILD );
	if( hItem )
	{	
		if( m_TreeCtrl.GetItemText( hItem ) == tname )
			;
		else
			while( hItem = m_TreeCtrl.GetNextItem( hItem, TVGN_NEXT ) )
				if( m_TreeCtrl.GetItemText( hItem ) == tname )
					break;
	}

	CString text( _T("index:") );
	text += iname;
	if( m_TreeCtrl.ItemHasChildren( hItem ) )
	{
		hItem = m_TreeCtrl.GetNextItem( hItem, TVGN_CHILD );
		if( m_TreeCtrl.GetItemText( hItem ) == text )
		{
			m_TreeCtrl.DeleteItem( hItem );
			return;
		}
		while( hItem = m_TreeCtrl.GetNextItem( hItem, TVGN_NEXT ) )
			if( m_TreeCtrl.GetItemText( hItem ) == text )
			{
				m_TreeCtrl.DeleteItem( hItem );
				return;
			}
	}
}