内容发布更新时间 : 2024/12/23 4:49:01星期一 下面是文章的全部内容请认真阅读。
石河子大学--Delphi课程设计
2012年11月2日
while(!gi.IsEOF()) {
HTREEITEM hGroup = m_tree_list.InsertItem(gi.m_groupName); m_tree_list.SetItemData(hGroup, gi.m_id); CString strPeoPleQuery;
strPeoPleQuery.Format(\,
gi.m_id);
CDatabase db2; CPeople people(&db2);
people.Open(AFX_DB_USE_DEFAULT_TYPE, strPeoPleQuery); HTREEITEM hPeople; while(!people.IsEOF()) { }
db2.Close(); gi.MoveNext();
hPeople = m_tree_list.InsertItem(people.m_fullName, hGroup); m_tree_list.SetItemData(hPeople, people.m_id); people.MoveNext();
石河子大学--Delphi课程设计
}
db1.Close();
2012年11月2日
}
当教师在左侧的树控件中选中某一组时,程序将关闭此前展开的组而打开当前选中的组;而如果教师在左侧的树控件中选中的是一名教师时,则在窗口右侧的区域中显示该教师的详细信息。上述动作过程是以树控件的选择项改变响应函数OnSelchangedTreeList为核心完成的。
1. 函数OnSelchangedTreeList
要添加响应函数OnSelchangedTreeList,可以先切换到资源视图,然后选中主对话框左侧的树控件,并在其上点击鼠标右键,选中弹出菜单中的“属性”,此时将弹出属性窗口。在属性窗口中可以看到一个闪电的图标,把鼠标放在上面会有一个提示信息:控件事件。点击闪电图标,在下面的列表中找到TVN_SELCHANGED,单击和此事件相对应的右边空白处,会出现一个下拉列表:<添加>OnSelchangedTreeList。选择了之后VS2008将自动在程序中添加TVN_SELCHANGED事件的处理函数OnSelchangedTreeList,并在当前工作区中显示代码编辑窗口。
函数OnSelchangedTreeList首先通过树控件的GetSelectdItem方法取得当前选择项,然后通过GetParentItem取得父节点。如果没有父节点,则表明其为组节点,否则表明其为教师节点。如果是组节点,则应先通过函数CollapseTree收起当前所有展开项,然后通过Expand方法展开当前选中的组,最后通过SwitchData将此前显示的教师信息清空,并将“更新”按钮禁用而将“增加”按钮启用。如果为教师节点,则通过CPeople取得当前选定教师信息,然后通过函数SwitchData将教师信息显示于界面中,并将“更新”按钮启用而将“增加”按钮禁用。
函数OnSelchangedTreeList部分代码如下:
HTREEITEM hItem = m_tree_list.GetSelectedItem(); //取得当前选择节点的句柄
石河子大学--Delphi课程设计
if(hItem != NULL) {
2012年11月2日
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);
2. 函数CollapseTree
函数CollapseTree的功能是将所有展开的组收起,它实现的方式是首先取得树控件的第一项,也就是第一个组节点,并将其收起,然后依次取得其后继兄弟节点(即其他组节点)
函数CollapseTree代码如下:
石河子大学--Delphi课程设计
void CAddressListDlg::CollapseTree() {
2012年11月2日
HTREEITEM htiItem = m_tree_list.GetRootItem(); while(NULL != htiItem) { }
m_tree_list.Expand(htiItem, TVE_COLLAPSE); htiItem = m_tree_list.GetNextSiblingItem(htiItem);
}
3. 函数SwitchData
在函数OnSelchangedTreeList中调用了SwitchData,其功能是将数据显示于窗口各控件或从窗口控件中取得当前输入的值,它的第一个参数为INTERFACECTRLDATA类型的引用,INTERFACECTRLDATA是在头文件AddressListDlg.h定义的结构体,其成员包含了教师的各项信息,具体定义如下:
typedef struct {
CString strName; bool bSex;
CString strCompany;
石河子大学--Delphi课程设计
CString strPhoneInCompany; CString strHomeAddress; CString strPhoneInHome; CString strMobile; CString strMail; CString strQq; CString strMsn; CString strMemory;
2012年11月2日
}INTERFACECTRLDATA;
函数OnSelchangedTreeList的第二个参数是一个布尔型的参数,当它的值为逻辑真时,函数OnSelchangedTreeList将第一个参数中传入的教师信息显示于窗口之上;而当它的值为假时,函数OnSelchangedTreeList则将当前窗体中各控件设定的值保存于第一个参数传入的INTERFACECTRLDATA结构体变量的各成员之中。
函数SwitchData的部分代码如下:
void CAddressListDlg::SwitchData(INTERFACECTRLDATA &info, bool flag) {
If (flag) {// 更新界面
m_address = info.strHomeAddress;