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

📄 addresslistdlg.cpp

📁 用vc++实现的通讯录程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/**********************************************************************
 * 功  能:	初始化左侧树形列表 
 * 参  数:	void
 * 返回值:	void
 *********************************************************************/
void CAddressListDlg::InitTreeList()
{
	// 清空原有项目
	m_tree_list.DeleteAllItems(); 

	// 组查询
	CString strPeoPleQuery;
	strPeoPleQuery = "SELECT * FROM groupInfo ORDER BY id DESC";
	CDatabase db1;
	CGroupInfo gi(&db1);
	gi.Open(AFX_DB_USE_DEFAULT_TYPE, strPeoPleQuery);

	while(!gi.IsEOF())
	{
		// 插入组名
		HTREEITEM hGroup = m_tree_list.InsertItem(gi.m_groupName);
		// 设置组ID
		m_tree_list.SetItemData(hGroup, gi.m_id);
		// 查询组下成员
		CString strPeoPleQuery;
		strPeoPleQuery.Format("SELECT * FROM people WHERE groupId = %d",
			gi.m_id);
		CDatabase db2;
		CPeople people(&db2);
		people.Open(AFX_DB_USE_DEFAULT_TYPE, strPeoPleQuery);
        
		HTREEITEM hPeople;
		while(!people.IsEOF())
		{
			// 插入联系人
			hPeople = m_tree_list.InsertItem(people.m_fullName, hGroup);
			// 设置联系人ID
			m_tree_list.SetItemData(hPeople, people.m_id);
			people.MoveNext();
		}
		db2.Close();
		gi.MoveNext();
	}

	db1.Close();
}

/**********************************************************************
 * 功  能:	选择项改变事件响应
 * 参  数:	NMHDR*
 *			LRESULT* 
 * 返回值:	void
 *********************************************************************/
void CAddressListDlg::OnSelchangedTreeList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	
	HTREEITEM hItem = m_tree_list.GetSelectedItem();
	if(hItem != NULL)
	{
		if(m_tree_list.GetParentItem(hItem) == NULL)
		{// 选中组
			// 收起所有展开项
			CollapseTree();
			// 展开选中的组
			m_tree_list.Expand(hItem, TVE_EXPAND);
			m_tree_list.EnsureVisible(hItem);

			// 清空联系人信息
			INTERFACECTRLDATA temp;
			SwitchData(temp, true);

			// 更新按钮禁用
			GetDlgItem(IDC_BUTTON_EDIT)->EnableWindow(FALSE); 
			// 增加按钮启用
			GetDlgItem(IDC_BUTTON_APPEND)->EnableWindow(TRUE); 			
		}
		else
		{// 选中联系人
			CDatabase db;
			CPeople people(&db);
			CString strSql;
			strSql.Format("SELECT * FROM people WHERE id=%d",  
				m_tree_list.GetItemData(hItem)); 
			people.Open(AFX_DB_USE_DEFAULT_TYPE, strSql);
			INTERFACECTRLDATA interfaceData;
			if(!people.IsEOF())
			{
				if(people.m_sex)
				{
					interfaceData.bSex = true;
				}
				else
				{
					interfaceData.bSex = false;
				}
				interfaceData.strCompany = people.m_company;
				interfaceData.strHomeAddress = people.m_homeAddress;
				interfaceData.strMail = people.m_mail;
				interfaceData.strMemory = people.m_memory;
				interfaceData.strMobile = people.m_mobile;
				interfaceData.strMsn = people.m_msn;
				interfaceData.strName = people.m_fullName;
				interfaceData.strPhoneInHome = people.m_phineInHome;
				interfaceData.strPhoneInCompany = people.m_phoneInCompany;
				interfaceData.strQq = people.m_qq;
			}
			SwitchData(interfaceData, true);

			// 更新按钮启用
			GetDlgItem(IDC_BUTTON_EDIT)->EnableWindow(TRUE); 
			// 增加按钮禁用
			GetDlgItem(IDC_BUTTON_APPEND)->EnableWindow(FALSE); 	
		}
	}
	
	*pResult = 0;
}

void CAddressListDlg::OnClickTreeList(NMHDR* pNMHDR, LRESULT* pResult) 
{	
	*pResult = 0;
}

/**********************************************************************
 * 功  能:	收缩Tree控件
 * 参  数:	void
 * 返回值:	void
 *********************************************************************/
void CAddressListDlg::CollapseTree()
{
	HTREEITEM htiItem = m_tree_list.GetRootItem();
	while(NULL != htiItem)
	{
		m_tree_list.Expand(htiItem, TVE_COLLAPSE);
		htiItem = m_tree_list.GetNextSiblingItem(htiItem);
	}	
}

/**********************************************************************
 * 功  能:	取得当前选中的组ID
 * 参  数:	void
 * 返回值:	void
 *********************************************************************/
int CAddressListDlg::GetCurrentSelGroupId()
{
	int nGroupId = -1;
	// 取得当前选中项
	HTREEITEM hSelItem = m_tree_list.GetSelectedItem();
	if(m_tree_list.GetParentItem(hSelItem) == NULL)
	{// 选中组
		nGroupId = m_tree_list.GetItemData(hSelItem);
	}
	else
	{// 选中联系人
		HTREEITEM hGroupItem;
		hGroupItem = m_tree_list.GetParentItem(hSelItem);
		nGroupId = m_tree_list.GetItemData(hGroupItem);
	}

	return nGroupId;
}

/**********************************************************************
 * 功  能:	刷新Tree控件
 * 参  数:	void
 * 返回值:	void
 *********************************************************************/
void CAddressListDlg::RefurTree()
{
	// 记录当前选中项
	HTREEITEM hSelItem = m_tree_list.GetSelectedItem();
	int nGroupId	= -1;
	int nPeopleId	= -1;
	if(m_tree_list.GetParentItem(hSelItem) == NULL)
	{// 选中组
		nGroupId = m_tree_list.GetItemData(hSelItem);
	}
	else
	{// 选中联系人
		HTREEITEM hGroupItem;
		hGroupItem = m_tree_list.GetParentItem(hSelItem);
		nGroupId = m_tree_list.GetItemData(hGroupItem);
		nPeopleId = m_tree_list.GetItemData(hSelItem);
	}

	// 初始化Tree
	InitTreeList();

	// 恢复选中项
	HTREEITEM htiItem = m_tree_list.GetRootItem();
	int nId;
	while(NULL != htiItem)
	{
		nId = m_tree_list.GetItemData(htiItem);
		// 选中为当前组
		if(nGroupId == nId)
		{
			m_tree_list.Select(htiItem, TVGN_CARET);
			// 清空联系人信息
			INTERFACECTRLDATA temp;
			SwitchData(temp, true);

			// 选中组下的联系人
			if(nPeopleId != -1)
			{
				HTREEITEM hPeople = m_tree_list.GetChildItem(htiItem);
				while(NULL != hPeople)
				{
					if(nPeopleId == m_tree_list.GetItemData(hPeople))
					{
						m_tree_list.Select(hPeople, TVGN_CARET);
						break;
					}
					hPeople = m_tree_list.GetNextSiblingItem(hPeople);
				}
			}
			break;
		}
		htiItem = m_tree_list.GetNextSiblingItem(htiItem);
	}
}

/**********************************************************************
 * 功  能:	“删除”按钮响应
 * 参  数:	void
 * 返回值:	void
 *********************************************************************/
void CAddressListDlg::OnButtonRemove() 
{
	// 取得当前选择项
	HTREEITEM hSelItem = m_tree_list.GetSelectedItem();
	int nID;
	nID = m_tree_list.GetItemData(hSelItem);

	if(m_tree_list.ItemHasChildren(hSelItem))
	{// 选中组
		// 组[未分组]不能删除
		if(1 == nID)
		{
			MessageBox("[未分组]不能删除!", "警告", MB_OK | MB_ICONWARNING);
			return;
		}
		if(MessageBox("您确信要删除当前选中的组及组下所有联系人吗?", "确认", 
			MB_OK | MB_YESNO | MB_ICONQUESTION) == IDYES)
		{
			RemoveGroup(nID);
			RefurTree();
		}
	}
	else
	{// 选中联系人
		if(MessageBox("您确信要删除当前选中的联系人吗?", "确认", 
			MB_OK | MB_YESNO | MB_ICONQUESTION) == IDYES)
		{
			RemovePeople(nID);
			RefurTree();
		}
	}
	
}

/**********************************************************************
 * 功  能:	删除组
 * 参  数:	void
 * 返回值:	void
 *********************************************************************/
bool CAddressListDlg::RemoveGroup(int id)
{
	CDatabase database;
	database.Open(_T("address"));
	CString strSql;
	strSql.Format("DELETE FROM groupInfo WHERE id=%d", id);
	database.ExecuteSQL(strSql); 
	database.Close(); 

	return true;
}

/**********************************************************************
 * 功  能:	删除联系人
 * 参  数:	void
 * 返回值:	void
 *********************************************************************/
bool CAddressListDlg::RemovePeople(int id)
{
	CDatabase database;
	database.Open(_T("address"));
	CString strSql;
	strSql.Format("DELETE FROM people WHERE id=%d", id);
	database.ExecuteSQL(strSql); 
	database.Close(); 

	return true;
}

/**********************************************************************
 * 功  能:	增加组
 * 参  数:	void
 * 返回值:	void
 *********************************************************************/
void CAddressListDlg::OnButtonAppendgroup() 
{
	CAppendNewGroupDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		RefurTree();
	}
}

/**********************************************************************
 * 功  能:	更新当前联系人信息
 * 参  数:	void
 * 返回值:	void
 *********************************************************************/
void CAddressListDlg::OnButtonEdit() 
{
	// 输入合法
	if(CheckInputInfo())
	{

		// 取得界面数据
		INTERFACECTRLDATA interfaceCtrlData;
		SwitchData(interfaceCtrlData, false);

		// 取得当前联系人ID
		HTREEITEM hSelItem = m_tree_list.GetSelectedItem();
		int nID;
		nID = m_tree_list.GetItemData(hSelItem);

		// 更新数据
		CDatabase db;
		db.Open("address"); 
		CString strSql;
		strSql.Format("UPDATE people SET fullName='%s', \
			sex='%d', \
			company='%s', \
			phoneInCompany='%s', \
			homeAddress='%s', \
			phineInHome='%s', \
			mobile='%s', \
			mail='%s', \
			qq='%s', \
			msn='%s', \
			memory='%s' \
			WHERE id=%d", \
			interfaceCtrlData.strName, \
			interfaceCtrlData.bSex, \
			interfaceCtrlData.strCompany, \
			interfaceCtrlData.strPhoneInCompany, \
			interfaceCtrlData.strHomeAddress, \
			interfaceCtrlData.strPhoneInHome, \
			interfaceCtrlData.strMobile, \
			interfaceCtrlData.strMail, \
			interfaceCtrlData.strQq, \
			interfaceCtrlData.strMsn, \
			interfaceCtrlData.strMemory, \
			nID
			); 
		db.ExecuteSQL(strSql);
		db.Close();
	}	
}

/**********************************************************************
 * 功  能:	查询按钮响应
 * 参  数:	void
 * 返回值:	void
 *********************************************************************/
void CAddressListDlg::OnOK() 
{
	CQueryPeopleDialog dlg;
	if(dlg.DoModal() == IDOK)
	{
		// 取得待查询联系人名
		CString strPeopleName = dlg.m_peopleName;

		// 执行查询
		CDatabase db;
		CPeople people(&db);
		CString strSql;
		strSql.Format("SELECT * FROM people WHERE fullName='%s' \
			ORDER BY groupId DESC, id",
			strPeopleName);
		people.Open(AFX_DB_USE_DEFAULT_TYPE, strSql);

		if(people.GetRecordCount() == 0)
		{
			MessageBox("没有找到要查询的联系人!", "信息", \
				MB_OK | MB_ICONINFORMATION);
			return;
		}

		// 显示结果
		while(!people.IsEOF())
		{
			// 取得联系人ID
			int nId;
			nId = people.m_id;

			HTREEITEM htiItem = m_tree_list.GetRootItem();
			while(NULL != htiItem)
			{
				m_tree_list.GetItemData(htiItem);				
				m_tree_list.Select(htiItem, TVGN_CARET);
				// 清空联系人信息
				INTERFACECTRLDATA temp;
				SwitchData(temp, true);

				// 选中组下的联系人			
				HTREEITEM hPeople = m_tree_list.GetChildItem(htiItem);
				while(NULL != hPeople)
				{
					if(nId == m_tree_list.GetItemData(hPeople))
					{
						m_tree_list.Select(hPeople, TVGN_CARET);
						goto SEEKEND;
					}
					hPeople = m_tree_list.GetNextSiblingItem(hPeople);
				}								
				htiItem = m_tree_list.GetNextSiblingItem(htiItem);
			}
SEEKEND:			
			
			// 移至下条记录
			people.MoveNext();

			if(!people.IsEOF())
			{
				if(MessageBox("还有满足条件的联系人,继续查看下一条吗?", "确认", 
					MB_YESNO | MB_ICONQUESTION) == IDNO)
				{
					break; // 中断查询,跳出循环
				}
			}
		}

		people.Close();
		db.Close();

	}
	
//	CDialog::OnOK();
}

⌨️ 快捷键说明

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