📄 demo_tabletreeview.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 + -