亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lefttreeview.cpp

?? 數據庫操作源碼
?? CPP
字號:
// LeftTreeView.cpp : implementation file
//

#include "stdafx.h"
#include "NanjingHospital.h"
#include "LeftTreeView.h"
#include "MainFrm.h"

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

/////////////////////////////////////////////////////////////////////////////
// CLeftTreeView

IMPLEMENT_DYNCREATE(CLeftTreeView, CFormView)

CLeftTreeView::CLeftTreeView()
	: CFormView(CLeftTreeView::IDD)
{
	//{{AFX_DATA_INIT(CLeftTreeView)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

CLeftTreeView::~CLeftTreeView()
{
}

void CLeftTreeView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLeftTreeView)
	DDX_Control(pDX, IDC_TREE, m_treeCtrl);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLeftTreeView, CFormView)
	//{{AFX_MSG_MAP(CLeftTreeView)
	ON_WM_SIZE()
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, OnSelchangedTree)
	ON_NOTIFY(NM_KILLFOCUS, IDC_TREE, OnKillfocusTree)
	ON_WM_CONTEXTMENU()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLeftTreeView diagnostics

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

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

/////////////////////////////////////////////////////////////////////////////
// CLeftTreeView message handlers




/*******************************************************************
函數名稱:OnSize(UINT nType, int cx, int cy) 
函數類型:void
函數參數:nType, cx, cy
功能描述:1.使樹控件填滿整個視圖
*******************************************************************/
void CLeftTreeView::OnSize(UINT nType, int cx, int cy) 
{
	CFormView::OnSize(nType, cx, cy);
	CFormView::ShowScrollBar(SB_BOTH,FALSE);

	if (GetSafeHwnd())
	{
		CRect rect;
		GetClientRect(&rect);
		if (m_treeCtrl.GetSafeHwnd())
			m_treeCtrl.MoveWindow(&rect);
	}
}




/*******************************************************************
函數名稱:OnInitialUpdate() 
函數類型:void
函數參數:無
功能描述:1.初始化樹前的圖標,并刷新
*******************************************************************/
void CLeftTreeView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();	
	// TODO: Add your specialized code here and/or call the base class
	m_ImageList.Create(IDB_TREE, 32, 1, RGB(255, 0, 255));	
	m_treeCtrl.SetImageList(&m_ImageList, LVSIL_NORMAL);
	m_hSelItem=NULL;
	//圖標
	srand((unsigned)time(NULL));
	rand();
	m_iImage=(int)((float)rand()*8.0/(float)RAND_MAX);
	//初始化樹
	ShowTree();
}






/*******************************************************************
函數名稱:OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
函數類型:void
函數參數:pNMHDR pResult
功能描述:1.當選中樹中節點時顯示相應的一級、二級類名
*******************************************************************/
void CLeftTreeView::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	CString strRoot, strFirstClass,strSecondClass;
	HTREEITEM hRootItem,hFirstClassItem,hSecondClassItem;
	HTREEITEM hSelItem,hParent;
	BOOL bHasChild;
	hSelItem=pNMTreeView->itemNew.hItem;
	m_hSelItem=hSelItem;
	//有無子
	bHasChild=m_treeCtrl.ItemHasChildren(hSelItem);
	//其父
	hParent=m_treeCtrl.GetParentItem(hSelItem);
	//二級類別
	if(!bHasChild)
	{
		hSecondClassItem=hSelItem;
		strSecondClass=m_treeCtrl.GetItemText(hSecondClassItem);
		hFirstClassItem=m_treeCtrl.GetParentItem(hSecondClassItem);
		strFirstClass=m_treeCtrl.GetItemText(hFirstClassItem);
		hRootItem=m_treeCtrl.GetParentItem(hFirstClassItem);
		strRoot=m_treeCtrl.GetItemText(hRootItem);
		//讓輔助框架處理
		m_pRightPaneFrame->m_strFirstClass=strFirstClass;
		m_pRightPaneFrame->m_strSecondClass=strSecondClass;
		m_pRightPaneFrame->SendMessage(LIST_EVERYONE,2,0);
		
	}//所有聯系人
	else if(hParent==NULL)
	{
		hRootItem=hSelItem;
		strRoot=m_treeCtrl.GetItemText(hRootItem);
		m_pRightPaneFrame->SendMessage(LIST_EVERYONE,0,0);
	}
	//一級類別
	else
	{
		hFirstClassItem=hSelItem;
		hRootItem=m_treeCtrl.GetParentItem(hFirstClassItem);
		strFirstClass=m_treeCtrl.GetItemText(hFirstClassItem);		
		strRoot=m_treeCtrl.GetItemText(hRootItem);
		m_pRightPaneFrame->m_strFirstClass=strFirstClass;
		m_pRightPaneFrame->SendMessage(LIST_EVERYONE,1,0);
	}

	*pResult = 0;
}









/*******************************************************************
函數名稱:OpenRecordSet(_RecordsetPtr &recPtr, CString &strSQL)
函數類型:BOOL
函數參數:recPtr, strSQL
功能描述:1.將數據庫中取出的_variant_t類型的變量轉化為
            一個CString類型,簡化了對數據庫的訪問
*******************************************************************/
BOOL CLeftTreeView::OpenRecordSet(_RecordsetPtr &recPtr, CString &strSQL)
{
	CNanjingHospitalApp* pApp=(CNanjingHospitalApp*)AfxGetApp();
	
	//創建記錄集對象
	m_pRecordset.CreateInstance(__uuidof(Recordset));
	try
	{
		//從數據庫中打開表
		recPtr->Open(strSQL.AllocSysString(), 
			pApp->m_pConnection.GetInterfacePtr(),
			adOpenDynamic,
			adLockOptimistic,
			adCmdText);
	}
	catch (_com_error e)
	{
		CString strError;
		strError.Format("警告:打開數據表時發生異常。 錯誤信息: %s",\
			e.ErrorMessage());
		AfxMessageBox(strError);
		return FALSE;
	}
	return TRUE;
}








/*******************************************************************
函數名稱:ShowTree()
函數類型:void
函數參數:無
功能描述:1.顯示樹類及其一級、二級類名
*******************************************************************/
void CLeftTreeView::ShowTree()
{
	//首先刪除所有的樹項
	m_treeCtrl.DeleteAllItems();
	CString strSQL;
	strSQL="select * from info";
	if(!OpenRecordSet(m_pRecordset,strSQL))
	{
		return;
	}
	//定義變量
	_variant_t varValue;	
	//從數據庫中開始填充樹
	HTREEITEM hRootItem,hFirstClassItem,hSecondClassItem;
	hRootItem=m_treeCtrl.InsertItem("所有住院病人", 0, 1);
	int i=0;	
	m_pRecordset->MoveFirst();
	while(!m_pRecordset->adoEOF)
	{
		CString strClass;
		varValue=m_pRecordset->GetCollect("一級類別");
		strClass=VariantToCString(varValue);
		//添加二級類別
		hFirstClassItem=AddFirstClassToTree(hRootItem,strClass);
		varValue=m_pRecordset->GetCollect("二級類別");
		strClass=VariantToCString(varValue);
		hSecondClassItem=AddSecondClassToTree(hFirstClassItem,strClass);
		//展開根目錄
		m_pRecordset->MoveNext();
	}
	//關閉
	m_pRecordset->Close();
	m_pRecordset=NULL;
	m_treeCtrl.Expand(hRootItem,TVE_EXPAND);
}

HTREEITEM CLeftTreeView::AddFirstClassToTree(HTREEITEM hRootItem, 
											 CString strFirstClass)
{
	//從數據庫中開始填充樹
	if(hRootItem==NULL)
		return NULL;
	
	if(m_treeCtrl.ItemHasChildren(hRootItem))
	{
		HTREEITEM hFirstClassItem=m_treeCtrl.GetChildItem(hRootItem);
		while(hFirstClassItem)
		{
			CString strItemText =m_treeCtrl.GetItemText(hFirstClassItem);
			if(strItemText==strFirstClass)
				return hFirstClassItem;
			hFirstClassItem=m_treeCtrl.GetNextSiblingItem(hFirstClassItem);
		}
	}
	//插入數據項數據結構
	TV_INSERTSTRUCT TCItem;
	TCItem.hParent =hRootItem;
	TCItem.hInsertAfter = TVI_LAST;
	//設屏蔽
	TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
	//序號
	TCItem.item.lParam=0;
	//正常圖標
	TCItem.item.iImage=m_iImage;
	//選中時圖標
	TCItem.item.iSelectedImage=m_iImage>4?m_iImage-4:m_iImage+1;	
	TCItem.item.pszText = (LPTSTR)(LPCTSTR)strFirstClass;
	HTREEITEM hFirstClassItemNew =m_treeCtrl.InsertItem(&TCItem);
	m_treeCtrl.SortChildren(hRootItem);
	return hFirstClassItemNew;
}

HTREEITEM CLeftTreeView::AddSecondClassToTree(HTREEITEM hFirstClassItem,
											  CString strSecondClass)
{
	//從數據庫中開始填充樹
	if(hFirstClassItem==NULL)
		return NULL;	
	if(m_treeCtrl.ItemHasChildren(hFirstClassItem))
	{
		HTREEITEM hSecondClassItem=m_treeCtrl.GetChildItem(hFirstClassItem);
		while(hSecondClassItem)
		{
			CString strItemText =m_treeCtrl.GetItemText(hSecondClassItem);
			if(strItemText==strSecondClass)
				return hSecondClassItem;
			hSecondClassItem=m_treeCtrl.GetNextSiblingItem(hSecondClassItem);
		}
	}
	//插入數據項數據結構
	TV_INSERTSTRUCT TCItem;
	TCItem.hParent =hFirstClassItem;
	TCItem.hInsertAfter = TVI_LAST;
	//設屏蔽
	TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
	//序號
	TCItem.item.lParam=0;
	//正常圖標
	TCItem.item.iImage=m_iImage>4?m_iImage-3:m_iImage+2;
	//選中時圖標
	TCItem.item.iSelectedImage=m_iImage>4?m_iImage-2:m_iImage+3;
	TCItem.item.pszText = (LPTSTR)(LPCTSTR)strSecondClass;

	HTREEITEM hSecondClassItemNew =m_treeCtrl.InsertItem(&TCItem);
	m_treeCtrl.SortChildren(hFirstClassItem);
	return hSecondClassItemNew;
}













/*******************************************************************
函數名稱:VariantToCString(const _variant_t &var)
函數類型:CString
函數參數:var
功能描述:1.將數據庫中取出的_variant_t類型的變量轉化為
            一個CString類型,簡化了對數據庫的訪問
*******************************************************************/
CString CLeftTreeView::VariantToCString(const _variant_t &var)
{
	CString strValue;	
	switch (var.vt)
	{
	case VT_BSTR://字符串
	case VT_LPSTR:
	case VT_LPWSTR:
		strValue = (LPCTSTR)(_bstr_t)var;
		break;
	case VT_I1://無符號字符
	case VT_UI1:
		strValue.Format("%d", var.bVal);
		break;
	case VT_I2://短整型
		strValue.Format("%d", var.iVal);
		break;
	case VT_UI2://無符號短整型
		strValue.Format("%d", var.uiVal);
		break;
	case VT_INT://整型
		strValue.Format("%d", var.intVal);
		break;
	case VT_I4: //整型
	case VT_I8: //長整型
		 strValue.Format("%d", var.lVal);
		break;
	case VT_UINT://無符號整型
		strValue.Format("%d", var.uintVal);
		break;
	case VT_UI4: //無符號整型
	case VT_UI8: //無符號長整型
		 strValue.Format("%d", var.ulVal);
		 break;
	case VT_VOID:
		strValue.Format("%8x", var.byref);
		break;
	case VT_R4://浮點型
		strValue.Format("%.4f", var.fltVal);
		break;
	case VT_R8://雙精度型
		strValue.Format("%.8f", var.dblVal);
		break;
	case VT_DECIMAL: //小數
		strValue.Format("%.8f", (double)var);
		break;
	case VT_CY:
		{
			COleCurrency cy = var.cyVal;
			strValue = cy.Format();
		}
		break;
	case VT_BLOB:
	case VT_BLOB_OBJECT:
	case 0x2011:
		strValue = "[BLOB]";
		break;
	case VT_BOOL://布爾型		
		strValue = var.boolVal ? "TRUE" : "FALSE";
		break;
	case VT_DATE: //日期型
		{
			DATE dt = var.date;
			COleDateTime da = COleDateTime(dt); 
			strValue = da.Format("%Y-%m-%d %H:%M:%S");
		}
		break;
	case VT_NULL://NULL值
	case VT_EMPTY://空
		 strValue = "";
		 break;
	case VT_UNKNOWN://未知類型
	default:
		strValue = "UN_KNOW";
		break;
	}
	return strValue;
}








/*******************************************************************
函數名稱:OnKillfocusTree(NMHDR* pNMHDR, LRESULT* pResult) 
函數類型:void
函數參數:pNMHDR pResult
功能描述:1.使樹中結點全部落選,以便在刪除時可以判斷刪除情況
*******************************************************************/
void CLeftTreeView::OnKillfocusTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CMainFrame* pMainFrm=(CMainFrame*)AfxGetMainWnd();
	m_treeCtrl.SelectItem(NULL);  //TVM_GETNEXTITEM
	pMainFrm->bTreeSel=FALSE;
	*pResult = 0;
}







/*******************************************************************
函數名稱:OnContextMenu(CWnd* pWnd, CPoint point) 
函數類型:void
函數參數:pWnd point
功能描述:1.相應點擊一個樹中的結點
*******************************************************************/
void CLeftTreeView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	// TODO: Add your message handler code here
	if (point != CPoint (-1, -1))
	{
		//選中點擊的樹項:
		CPoint ptTree = point;
		m_treeCtrl.ScreenToClient (&ptTree);		
		HTREEITEM hTreeItem =m_treeCtrl.HitTest(ptTree);
		if (hTreeItem != NULL)
		{
			//首先選中
			m_treeCtrl.SelectItem (hTreeItem);
		}
	}
	//賦予輸入焦點
	m_treeCtrl.SetFocus ();
	//上下文菜單,命令由主框架處理
	CMainFrame* pMainFrm=(CMainFrame*)AfxGetMainWnd();
	CMenu menu;
    menu.LoadMenu(IDR_MAINFRAME);
    menu.GetSubMenu(1)
        ->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
        point.x, point.y,pMainFrm);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线视频全部完| 欧美高清视频一二三区 | 国产**成人网毛片九色| 韩国女主播成人在线| 亚洲午夜影视影院在线观看| 蜜桃视频第一区免费观看| 亚洲一区国产视频| 亚洲激情五月婷婷| 亚洲免费资源在线播放| 国产精品久久午夜| 日韩美女啊v在线免费观看| 欧美激情一区二区三区蜜桃视频| 日韩三级免费观看| 日韩一区二区电影网| 精品久久久久香蕉网| 久久蜜桃av一区二区天堂| 久久嫩草精品久久久久| 国产精品欧美综合在线| 亚洲三级小视频| 亚洲v日本v欧美v久久精品| 午夜精品久久久久影视| 日韩av电影免费观看高清完整版 | 亚洲国产精品久久久久婷婷884| 亚洲一区二区三区四区在线观看| 日韩av一区二区在线影视| 久久www免费人成看片高清| 国产91精品精华液一区二区三区| 国产在线视频不卡二| 91在线播放网址| 制服丝袜av成人在线看| 国产日韩av一区| 亚洲免费av网站| 日本成人中文字幕| 顶级嫩模精品视频在线看| 91国偷自产一区二区三区成为亚洲经典| 色欧美88888久久久久久影院| 7777精品伊人久久久大香线蕉完整版 | 99九九99九九九视频精品| 91亚洲永久精品| 欧美蜜桃一区二区三区| 久久久久免费观看| 午夜久久福利影院| 北岛玲一区二区三区四区| 欧美丰满美乳xxx高潮www| 久久精品视频一区二区三区| 一级做a爱片久久| 国产精品综合一区二区| 91精品国产色综合久久不卡电影| 亚洲图片激情小说| 国产精一区二区三区| 56国语精品自产拍在线观看| 亚洲男人电影天堂| 久久国产尿小便嘘嘘尿| 91麻豆高清视频| 国产欧美一区二区三区在线看蜜臀| 日本在线播放一区二区三区| 欧美性大战久久| 亚洲欧美激情在线| 日本乱人伦一区| 悠悠色在线精品| 欧美性大战久久| 亚洲综合色自拍一区| 91在线视频18| 亚洲一区免费视频| 精品视频在线看| 日韩黄色片在线观看| 欧美日韩激情一区二区| 青青草成人在线观看| 日韩欧美一级二级三级 | 日日夜夜免费精品| xf在线a精品一区二区视频网站| 激情小说亚洲一区| 日本一区二区三区在线不卡| 成人国产精品免费观看动漫| 日韩一区中文字幕| 欧美日韩一级黄| 国产一区二三区| 国产精品久久久久久一区二区三区| 成人深夜视频在线观看| 亚洲综合男人的天堂| 欧美一区二区三区性视频| 国产精品资源站在线| 成人欧美一区二区三区黑人麻豆 | 粉嫩13p一区二区三区| 亚洲国产综合人成综合网站| 日韩欧美综合在线| 成年人午夜久久久| 午夜影视日本亚洲欧洲精品| 亚洲精品在线观看网站| 欧美中文字幕久久| 狠狠色狠狠色合久久伊人| 国产精品系列在线播放| 一区二区三区丝袜| 久久久91精品国产一区二区三区| 色猫猫国产区一区二在线视频| 久久国产人妖系列| 五月激情六月综合| 亚洲毛片av在线| 国产日韩欧美电影| 久久综合九色综合欧美98| 日本一区二区三区国色天香| 欧美一级日韩一级| 欧美日韩不卡一区| 在线观看视频91| 95精品视频在线| 国产成人在线看| 加勒比av一区二区| 美女网站视频久久| 免费精品视频在线| 免费xxxx性欧美18vr| 丝袜脚交一区二区| 五月天国产精品| 亚洲福利一区二区三区| 在线播放亚洲一区| 欧美aⅴ一区二区三区视频| 久久久久久亚洲综合| 国产日韩欧美精品电影三级在线| 亚洲三级在线看| 青椒成人免费视频| 91蜜桃免费观看视频| 日韩三级中文字幕| 日韩美女精品在线| 亚洲成人一二三| 亚洲午夜久久久久久久久久久| 亚洲欧美国产三级| 亚洲午夜久久久久| 全国精品久久少妇| 国产中文一区二区三区| 高清在线不卡av| 欧美午夜精品一区| 91精品国产色综合久久ai换脸| 欧美一区二区日韩一区二区| 日韩精品中文字幕在线一区| 精品久久久久一区| 日本一区二区三区久久久久久久久不| 国产精品女主播在线观看| 一区二区三区久久| 蜜桃av一区二区| 成人高清视频在线| 欧美精品粉嫩高潮一区二区| www欧美成人18+| 亚洲一卡二卡三卡四卡无卡久久| 奇米四色…亚洲| 日本道免费精品一区二区三区| 日韩精品一区二区三区在线| 亚洲丝袜另类动漫二区| 美女视频黄 久久| 欧美日韩久久久久久| 悠悠色在线精品| 色综合久久综合| 亚洲欧洲av一区二区三区久久| 久久99国产精品免费网站| 91麻豆精品国产91久久久| 亚洲午夜精品在线| 欧美色图在线观看| 首页亚洲欧美制服丝腿| 欧美伦理视频网站| 亚洲成人动漫在线观看| 欧美伊人精品成人久久综合97 | 国产大陆精品国产| 欧美人成免费网站| 性久久久久久久| 欧美一区二区视频网站| 免费成人美女在线观看.| 欧美一级高清大全免费观看| 美日韩一区二区| 欧美成人艳星乳罩| 国产福利精品导航| 国产精品久久久久久久久免费丝袜 | 91精品婷婷国产综合久久竹菊| 日本欧美加勒比视频| 久久网站最新地址| 欧美性生活影院| 成人自拍视频在线观看| 亚洲国产sm捆绑调教视频| 日韩三区在线观看| 国产精品一区二区免费不卡 | 日韩一区二区视频| 国产乱码字幕精品高清av| 国产网红主播福利一区二区| www.视频一区| 国产欧美va欧美不卡在线| 国产在线精品国自产拍免费| 亚洲成人精品在线观看| 中文乱码免费一区二区| 精品对白一区国产伦| 91老师片黄在线观看| 日韩激情一区二区| 国产精品网站在线观看| 精品视频一区二区不卡| 国产精品888| 午夜精品福利一区二区蜜股av | 亚洲男同1069视频| 欧美日韩免费在线视频| 亚洲久本草在线中文字幕| 色婷婷狠狠综合| 亚洲精品乱码久久久久| 2023国产精华国产精品| 日韩一区二区三区免费看| 欧美系列在线观看|