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

📄 memnavigation.cpp

📁 使用vc进行数据库编程的好例子
💻 CPP
字号:
// MemNabigation.cpp : implementation file
//

#include "stdafx.h"
#include "ManageSystem.h"
#include "MemNavigation.h"


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

#define RESULT_SHOW	0
#define RESULT_HIDE	1
/////////////////////////////////////////////////////////////////////////////
// CMemNavigation dialog
extern bool	g_isMLocked;


IMPLEMENT_DYNCREATE(CMemNavigation, CDialog)

CMemNavigation::CMemNavigation(CWnd* pParent /*=NULL*/)
	: CDialog(CMemNavigation::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMemNavigation)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CMemNavigation::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMemNavigation)
	DDX_Control(pDX, IDC_TRE_MEMBER, m_Tre_Member);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMemNavigation, CDialog)
	//{{AFX_MSG_MAP(CMemNavigation)
	ON_WM_SIZE()
	ON_NOTIFY(TVN_SELCHANGED, IDC_TRE_MEMBER, OnSelchangedTreMember)
	ON_NOTIFY(NM_CLICK, IDC_TRE_MEMBER, OnClickTreMember)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_UPDETASELDATA,UpdateSelData)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMemNavigation message handlers

void CMemNavigation::OnOK() 
{
	// TODO: Add extra validation here

}

void CMemNavigation::OnCancel() 
{
	// TODO: Add extra cleanup here

}

void CMemNavigation::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	OnDialogSize();
}

BOOL CMemNavigation::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	bIsFirstSel=true;

	AddItems();

	m_Tre_Member.Expand(mem_addr,TVE_EXPAND);
/*
	CRect rect;
	GetClientRect(&rect);
	if(m_Tre_Member.GetSafeHwnd())
		m_Tre_Member.MoveWindow(&rect);
*/
	OnDialogSize();
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CMemNavigation::OnSelchangedTreMember(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	if(bIsFirstSel==true)
	{
		*pResult = 0;
		return;
	}
	
	if(g_isMlocked==false)
	{
		if(g_mSet->IsOpen())
			g_mSet->Close();
	}
	else
	{
		*pResult=0;
		return;
	}

	CString sqlComm,currrentItem,parentItem;
	m_hTreeCurrent=m_Tre_Member.GetSelectedItem();
	currrentItem=m_Tre_Member.GetItemText(m_hTreeCurrent);
	m_hTreeCurrent=m_Tre_Member.GetParentItem(m_hTreeCurrent);
	parentItem=m_Tre_Member.GetItemText(m_hTreeCurrent);

	try
	{
		if(parentItem.IsEmpty())//根
		{
			sqlComm="SELECT * FROM memberinfo";
		}
		else if(parentItem=="按地址分类")
		{
			CString addr=currrentItem.Left(4);
			sqlComm="SELECT * FROM memberinfo WHERE province='";
			sqlComm+=addr;
			sqlComm+="'";
		}
		else if(parentItem=="按注册时间分类")
		{
			
			CString date=currrentItem.Left(4);
			if(date=="2002")
			{
				sqlComm="SELECT * FROM memberinfo WHERE register_time >= '2002-01-01'";
			}
			else if(date=="1996")
			{
				sqlComm="SELECT * FROM memberinfo WHERE register_time <= '1996-12-31'";
			}
			else
			{
				CString date1=date+"-01-01";
				CString date2=date+"-12-31";
				sqlComm="SELECT * FROM memberinfo WHERE register_time BETWEEN '";
				sqlComm+=date1;
				sqlComm+="' AND '";
				sqlComm+=date2;
				sqlComm+="'";
			}
		}
			
		g_mSet->Open(CRecordset::snapshot,sqlComm);
		g_isMlocked=true;
		::SendMessage(::AfxGetMainWnd()->m_hWnd,WM_SHOW_MEM_RESULT_SIMP,0,RESULT_SHOW);

	}
	catch(CDBException* pe)
	{
		AfxMessageBox("用户信息数据加载错误:\n"+pe->m_strError);
		if(g_mSet)
		{
			if(g_mSet->IsOpen())
				g_mSet->Close();
			delete g_mSet;
		}
		pe->Delete();
	}
	
	*pResult = 0;
}

void CMemNavigation::OnDialogSize()
{
	if(m_Tre_Member.GetSafeHwnd())
	{
		CRect rect;
		GetClientRect(&rect);
		m_Tre_Member.MoveWindow(&rect);
	}
}

bool CMemNavigation::AddItems()
{
	mem_addr = m_Tre_Member.InsertItem(_T("按地址分类"));
	m_Tre_Member.InsertItem(_T("浙江省"), mem_addr);
	m_Tre_Member.InsertItem(_T("山东省"), mem_addr);
	m_Tre_Member.InsertItem(_T("江苏省"), mem_addr);
	m_Tre_Member.InsertItem(_T("上海市"), mem_addr);
	m_Tre_Member.InsertItem(_T("北京市"), mem_addr);
	m_Tre_Member.InsertItem(_T("辽宁省"), mem_addr);
	m_Tre_Member.InsertItem(_T("广东省"), mem_addr);
	m_Tre_Member.InsertItem(_T("黑龙江省"), mem_addr);
	m_Tre_Member.InsertItem(_T("吉林省"), mem_addr);
	m_Tre_Member.InsertItem(_T("辽宁省"), mem_addr);
	m_Tre_Member.InsertItem(_T("河北省"), mem_addr);
	m_Tre_Member.InsertItem(_T("河南省"), mem_addr);
	m_Tre_Member.InsertItem(_T("湖北省"), mem_addr);
	m_Tre_Member.InsertItem(_T("湖南省"), mem_addr);
	m_Tre_Member.InsertItem(_T("江西省"), mem_addr);
	m_Tre_Member.InsertItem(_T("福建省"), mem_addr);
	m_Tre_Member.InsertItem(_T("广东省"), mem_addr);
	m_Tre_Member.InsertItem(_T("海南省"), mem_addr);
	m_Tre_Member.InsertItem(_T("安徽省"), mem_addr);
	m_Tre_Member.InsertItem(_T("四川省"), mem_addr);
	m_Tre_Member.InsertItem(_T("山西省"), mem_addr);
	m_Tre_Member.InsertItem(_T("陕西省"), mem_addr);
	m_Tre_Member.InsertItem(_T("宁夏自治区"), mem_addr);
	m_Tre_Member.InsertItem(_T("西藏自治区"), mem_addr);
	m_Tre_Member.InsertItem(_T("台湾省"), mem_addr);

	mem_date = m_Tre_Member.InsertItem(_T("按注册时间分类"));
	m_Tre_Member.InsertItem(_T("2002年"), mem_date);
	m_Tre_Member.InsertItem(_T("2001年"), mem_date);
	m_Tre_Member.InsertItem(_T("2000年"), mem_date);
	m_Tre_Member.InsertItem(_T("1999年"), mem_date);
	m_Tre_Member.InsertItem(_T("1998年"), mem_date);
	m_Tre_Member.InsertItem(_T("1997年"), mem_date);
	m_Tre_Member.InsertItem(_T("1996年及以前"), mem_date);
	
	return true;
}

void CMemNavigation::OnClickTreMember(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	bIsFirstSel=false;

	OnSelchangedTreMember(pNMHDR,pResult);
	
	*pResult = 0;
}

void CMemNavigation::UpdateSelData()
{
	if(g_isMlocked==false)
	{
		if(g_mSet->IsOpen())
			g_mSet->Close();
	}
	else
	{
		return;
	}

	CString sqlComm,currrentItem,parentItem;
	m_hTreeCurrent=m_Tre_Member.GetSelectedItem();
	currrentItem=m_Tre_Member.GetItemText(m_hTreeCurrent);
	m_hTreeCurrent=m_Tre_Member.GetParentItem(m_hTreeCurrent);
	parentItem=m_Tre_Member.GetItemText(m_hTreeCurrent);

	try
	{
		if(parentItem.IsEmpty())//根
		{
			sqlComm="SELECT * FROM memberinfo";
		}
		else if(parentItem=="按地址分类")
		{
			CString addr=currrentItem.Left(4);
			sqlComm="SELECT * FROM memberinfo WHERE province='";
			sqlComm+=addr;
			sqlComm+="'";
		}
		else if(parentItem=="按注册时间分类")
		{
			
			CString date=currrentItem.Left(4);
			if(date=="2002")
			{
				sqlComm="SELECT * FROM memberinfo WHERE register_time >= '2002-01-01'";
			}
			else if(date=="1996")
			{
				sqlComm="SELECT * FROM memberinfo WHERE register_time <= '1996-12-31'";
			}
			else
			{
				CString date1=date+"-01-01";
				CString date2=date+"-12-31";
				sqlComm="SELECT * FROM memberinfo WHERE register_time BETWEEN '";
				sqlComm+=date1;
				sqlComm+="' AND '";
				sqlComm+=date2;
				sqlComm+="'";
			}
		}
			
		g_mSet->Open(CRecordset::snapshot,sqlComm);
		g_isMlocked=true;
		::SendMessage(::AfxGetMainWnd()->m_hWnd,WM_SHOW_MEM_RESULT_SIMP,0,RESULT_HIDE);

	}
	catch(CDBException* pe)
	{
		AfxMessageBox("用户信息数据加载错误:\n"+pe->m_strError);
		if(g_mSet)
		{
			if(g_mSet->IsOpen())
				g_mSet->Close();
			delete g_mSet;
		}
		pe->Delete();
	}
}

⌨️ 快捷键说明

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