📄 addresslistdlg.cpp
字号:
/**********************************************************************
* 功 能: 初始化左侧树形列表
* 参 数: 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 + -