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

📄 demo_tabletreeview.cpp

📁 使用yacc的一个例子
💻 CPP
字号:
// Demo_TableTreeView.cpp : implementation file
//

#include "stdafx.h"
#include "SdbmsDemo.h"
#include "Demo_TableTreeView.h"
#include "Demo_WorkspaceBar.h"
#include "MainFrm.h"
#include "Sdbms.h"

extern CSdbms g_sdbms;

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

/////////////////////////////////////////////////////////////////////////////
// CDemo_TableTreeView

IMPLEMENT_DYNCREATE(CDemo_TableTreeView, CTreeView)

CDemo_TableTreeView::CDemo_TableTreeView()
{
	m_ImageList.Create(IDB_TABLE_TREEVIEW, 16, 1, RGB(255,255,255));
}

CDemo_TableTreeView::~CDemo_TableTreeView()
{
}


BEGIN_MESSAGE_MAP(CDemo_TableTreeView, CTreeView)
	//{{AFX_MSG_MAP(CDemo_TableTreeView)
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	ON_NOTIFY_REFLECT(TVN_DELETEITEM, OnDeleteitem)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDemo_TableTreeView drawing

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

/////////////////////////////////////////////////////////////////////////////
// CDemo_TableTreeView diagnostics

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

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

/////////////////////////////////////////////////////////////////////////////
// CDemo_TableTreeView message handlers

void CDemo_TableTreeView::UpdateView()
{
	CTreeCtrl& ctrl = GetTreeCtrl();
	TREE_ITEM_DATA *pItemData = NULL;
	HTREEITEM hDBRootItem, hDBItem, hTableItem, hFieldItem;
	CSdbms_Table *pTable = NULL;

	//删除以前的所有项
	ctrl.DeleteAllItems();

	//添加审计表
	pTable = g_sdbms.m_audit.m_pTable;
	hTableItem = ctrl.InsertItem("审计表", 2, 2);
	pItemData = new TREE_ITEM_DATA(pTable, NULL);
	ctrl.SetItemData(hTableItem, (DWORD)pItemData);

	for	(int i=0; i<pTable->m_FieldArray.GetSize(); i++)
	{
		CSdbms_Field *pField = pTable->m_FieldArray[i];
		hFieldItem = ctrl.InsertItem(pField->m_strFieldName, 3, 3, hTableItem);
		pItemData = new TREE_ITEM_DATA(pField);
		ctrl.SetItemData(hFieldItem, (DWORD)pItemData);
	}

	//添加数据库根
	hDBRootItem = ctrl.InsertItem("数据库", 0, 0);

	//添加各数据库
	POSITION pos = g_sdbms.m_DBList.GetHeadPosition();
	while (pos)
	{
		CSdbms_Database *pDB = g_sdbms.m_DBList.GetNext(pos);
		if	(!pDB->m_bInit)
			pDB->Init();

		//添加数据库结点
		hDBItem = ctrl.InsertItem(pDB->m_strDBName, 1, 1, hDBRootItem);

		//添加数据库中的各表
		for	(int i=0; i<pDB->m_TableArray.GetSize(); i++)
		{
			pTable = pDB->m_TableArray[i];
			hTableItem = ctrl.InsertItem(pTable->m_strTableName, 2, 2, hDBItem);
			pItemData = new	TREE_ITEM_DATA(pTable, pDB);
			ctrl.SetItemData(hTableItem, (DWORD)pItemData);

			//添加表中的各属性
			for	(int j=0; j<pTable->m_FieldArray.GetSize(); j++)
			{
				CSdbms_Field *pField = pTable->m_FieldArray[j];
				hFieldItem = ctrl.InsertItem(pField->m_strFieldName, 3, 3, hTableItem);
				pItemData = new TREE_ITEM_DATA(pField);
				ctrl.SetItemData(hFieldItem, (DWORD)pItemData);
			}
		}
	}
}

void CDemo_TableTreeView::OnInitialUpdate() 
{
	CTreeView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
	GetTreeCtrl().SetImageList(&m_ImageList, TVSIL_NORMAL);
}

BOOL CDemo_TableTreeView::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
	cs.style |= (TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_TRACKSELECT);	
	return CTreeView::PreCreateWindow(cs);
}

void CDemo_TableTreeView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CTreeCtrl& ctrl = GetTreeCtrl();
	CMainFrame *pMainWnd = (CMainFrame*)AfxGetMainWnd();

	HTREEITEM hItem = ctrl.GetSelectedItem();
	TREE_ITEM_DATA *pItemData = (TREE_ITEM_DATA*)ctrl.GetItemData(hItem);
	if	(pItemData)
	{
		switch(pItemData->m_nType)
		{
		case	IT_FIELD:
			pMainWnd->m_wndOutputBar.OutputFieldInformation(pItemData->m_pField);
			break;
		case	IT_TABLE:
			VERIFY(pMainWnd->m_wndOutputBar.SetActiveTabView(pItemData->m_pDatabase, pItemData->m_pTable));
			break;
		default:
			ASSERT(FALSE);
		}
	}
	
	*pResult = 0;
}

void CDemo_TableTreeView::OnDeleteitem(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	CTreeCtrl& ctrl = GetTreeCtrl();
	HTREEITEM hItem = pNMTreeView->itemOld.hItem;
	TREE_ITEM_DATA *pItemData = (TREE_ITEM_DATA*)ctrl.GetItemData(hItem);
	if	(pItemData)
		delete pItemData;
	
	*pResult = 0;
}

⌨️ 快捷键说明

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