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

📄 classtreeview.cpp

📁 VC操作SQL Server主从表,一种利用VC操作数据库主从表的源码
💻 CPP
字号:
// ClassTreeView.cpp : implementation file
//

#include "stdafx.h"
#include "dag.h"
#include "ClassTreeView.h"
#include "mainfrm.h"
#include "dagview.h"
#include "dagDetialView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//-------------------------
extern CDagApp theApp; 
/////////////////////////////////////////////////////////////////////////////
// CClassTreeView

IMPLEMENT_DYNCREATE(CClassTreeView, CTreeView)

CClassTreeView::CClassTreeView()
{
	HICON hIconFolder=AfxGetApp()->LoadIcon(IDI_ICON1);
	HICON hIconOpenFolder=AfxGetApp()->LoadIcon(IDI_ICON2);
	m_imageList.Create(16,16,ILC_MASK|ILC_COLOR16,0,2);
	m_imageList.Add(hIconFolder);
	m_imageList.Add(hIconOpenFolder);
	

	
}

CClassTreeView::~CClassTreeView()
{
}


BEGIN_MESSAGE_MAP(CClassTreeView, CTreeView)
	//{{AFX_MSG_MAP(CClassTreeView)
	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CClassTreeView drawing

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

/////////////////////////////////////////////////////////////////////////////
// CClassTreeView diagnostics

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

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

/////////////////////////////////////////////////////////////////////////////
// CClassTreeView message handlers

void CClassTreeView::OnInitialUpdate() 
{
	CTreeView::OnInitialUpdate();
	long lStyleOld;
	// Initialize the CTreeView control
	CTreeCtrl& refTree=GetTreeCtrl();
	refTree.SetImageList(&m_imageList,TVSIL_NORMAL);

    lStyleOld = GetWindowLong(refTree.m_hWnd, GWL_STYLE);
	lStyleOld |= TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT;
	SetWindowLong(refTree.GetSafeHwnd(), GWL_STYLE, lStyleOld); 
//	CFont font;
//	font.CreatePointFont(120,"Impact");
//	refTree.SetFont(&font,true);
	//使用ADO创建数据库记录集
	m_pRecordset.CreateInstance(__uuidof(Recordset));

	// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
	// 因为它有时会经常出现一些想不到的错误
	TV_INSERTSTRUCT insertStruct;
	insertStruct.hParent=NULL;
	insertStruct.hInsertAfter=TVI_FIRST;
   	insertStruct.item.iSelectedImage=0;
	insertStruct.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
	insertStruct.item.hItem=NULL;
	insertStruct.item.stateMask=0;
	insertStruct.item.iImage=1;
	insertStruct.item.cChildren=0;
	insertStruct.item.lParam=0;
	insertStruct.item.pszText="所有分类";//根
	HTREEITEM hRoot=refTree.InsertItem(&insertStruct);
  
//---添加所有分类---------------------
	InitTree(refTree,hRoot,"01");
	InitTree(refTree,hRoot,"02");
	HTREEITEM hSecond=InitTree(refTree,hRoot,"03");
//---由于数据库设计的因素这样分类比较妥当
	refTree.Expand(hSecond,TVE_EXPAND);	
	refTree.SelectItem(hSecond);

	
}

HTREEITEM CClassTreeView::InitTree(CTreeCtrl& refTree,HTREEITEM hTreeNode,CString strParent)
{

	_RecordsetPtr pRS;
	pRS.CreateInstance(__uuidof(Recordset));
	try
	{
		pRS->Open("SELECT * FROM sambios001",                // 查询qysys001表中所有字段
							theApp.m_pConnection.GetInterfacePtr(),	 // 获取库接库的IDispatch指针
							adOpenDynamic,
							adLockOptimistic,
							adCmdText);
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}
	pRS->MoveFirst();
	_variant_t var;
	CString strTableName,strTableCode;
	HTREEITEM hChildItem;
	while(!pRS->adoEOF)
	{
		var=pRS->GetCollect("menuname");
		if(var.vt != VT_NULL)
			strTableName = (LPCSTR)_bstr_t(var);		

		var=pRS->GetCollect("menucode");
		if(var.vt != VT_NULL)
			strTableCode = (LPCSTR)_bstr_t(var);
		if(!strTableCode.Find(strParent,0)&&strTableCode.GetLength()==strParent.GetLength()+2)
		{
			hChildItem=refTree.InsertItem(strTableName,hTreeNode,TVI_LAST);			
			InitTree(refTree,hChildItem,strTableCode);
		}
		pRS->MoveNext();
	}
	return hChildItem;

}



void CClassTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here	
	CTreeCtrl& refTreeCtrl=GetTreeCtrl();
	HTREEITEM hSelected=pNMTreeView->itemNew.hItem;
	if(hSelected!=NULL)
	{
		m_strMenuName=refTreeCtrl.GetItemText(hSelected); 
	    if(AfxGetMainWnd()->IsWindowEnabled())
		UpdateDagView();
	
	}

	//-----------
	*pResult = 0;
}

void CClassTreeView::UpdateDagView()
{
	CMainFrame* pFrame=static_cast<CMainFrame*>(AfxGetMainWnd());
	CDagView* pDagView=static_cast<CDagView*>(pFrame->m_wndSplitter2.GetPane(0,0));
	CDagDetialView* pDagDetialView=static_cast<CDagDetialView*>(pFrame->m_wndSplitter2.GetPane(1,0));
	pDagView->m_strTableName=GetTableName();
    pDagView->OnInitialUpdate();
//	pDagDetialView->OnInitialUpdate();
	

}

CString CClassTreeView::GetTableName()
{

	if(m_strMenuName=="党群工作类")
		return "sambios0101";
	else if(m_strMenuName=="科学研究类")
		return "sambios0101";
	return "sambios0101";
	
	
}

⌨️ 快捷键说明

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