教学资源管理系统MFC课程设计.docx
- 文档编号:3291575
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:48
- 大小:385.09KB
教学资源管理系统MFC课程设计.docx
《教学资源管理系统MFC课程设计.docx》由会员分享,可在线阅读,更多相关《教学资源管理系统MFC课程设计.docx(48页珍藏版)》请在冰豆网上搜索。
教学资源管理系统MFC课程设计
摘要………………………………………………………………………………………II
Abstract…………………………………………………………………………………...III
第一章概述……………………………………………………………………………..1
1.1课题背景和研究意义………………………………………………………………...1
1.2主要工作和论文结构…………………………………..……………………………1
第二章系统总体设计………………………………………………………..2
2.1需求分析……………………………………………..………………………….…2
2.2设计方案及系统结构…………………………………..………………………….…2
2.2.1设计方案.……………………………………………………………………………2
2.2.2系统结构.……………………………………………………………………………2
第三章系统详细设计…………………………………………………..………………3
3.1建立框架………………………………………..………………………….…3
3.2获取系统图标……………………………………..………………………….…5
3.3XML规范化数据………………………………..………………………….6
3.4定制显示资源目录………………….…………..………………………….…7
3.5资源视图分类…………………………………………………………………………9
第四章设计结果及分析…………………………………………………..………………..11
4.1设计结果.……………………………………………..………………………….11
4.2结果分析.…………………………………………..………………………….…12
第五章总结与展望.…………………………………………………..………………..13
5.1总结……………………………………………….………………………………..….13
5.2进一步改进的方向..….………………………………..………………………….…13
致谢…….……………………………………………………..………………………….14
参考文献…….………………..………………………………..……………………………15
附录主要程序代码………...………………………………..……………………………16
摘要
知识管理是目前一个热门的前沿课题,特别是现今随着教育改革的发展,人们更注重于方便的资源管理与操作。
对于这些教育资源,如何灵活地进行组织与管理,成为了教育行业的重头戏。
本次综合设计完成的教育资源浏览器实现了对教育资源的分类管理,并能够完成对资源的基本操作,包括打开、删除等,还有资源的显示与隐藏标记,另外对于资源的视图提供三种不同的模式,最后还实现了两个独立的资源库模块,可以对其中的资源进行浏览,并通过调用系统上安装的相应程序进行运行。
本次设计综合运用了所学的MFC编程思想,关于函数调用,消息响应,以及位图的加载,另外还使用到了系统自带的xml数据规范来表示树形控件的数据,最后还应用到了关于动态链接库加载的相关内容。
关键词:
资源管理;MFC;XML
Abstract
Knowledgemanagementisahottopicsattheforefrontnow.Especiallywiththedevelopmentofeducation,peoplefocusemoreonconvenientresourcemanagementandoperations.Howtoorganizeandmanagetheseeducationalresourceshasbecomethehighlightoftheeducationsector.
Thedesignofeducationalresourcesbrowserhasachievedclassificationalmanagementofeducationalresources,anditcancompletesomebasicoperationtotheresource,suchasopen,delete,markandsoon.Besides,itprovidesfourdifferentmodelsintheviewofresources.Atlast,itprovidestwoseparateresourcelibrarymodules,andyoucanbrowseoneoftheresources,andrunitbythecorrespondingprograminstalledonthesystem.
ThedesignusetheMFCprogrammingideas.Includingfunctioncalls,messages,respondto,andloadingbitmaps.Inadditionto,itusesthesystem’sxmldataspecificationtorepresentthetreecontroldata.Atlast,itappliestothedynamiclinklibrary.
Keywords:
Resourcesmanage;MFC;XML
第一章概述
1.1课题背景和研究意义
当前,教育行业处于热门阶段,一些优秀学校以及一些专注于教育事业的商业公司都开发出了各种大小规模的资源库,用于对教育资源的系统管理,事实证明,这种统一管理的模式对于当今的教育发展意义斐然。
本次综合设计实现的教学资源管理系统便是为了有效方便的将各种已有的以及正在开发的和以后将要开发的教育资源组织和管理起来,达到集中管理的效果,同时还能实现定制功能,满足用户的需求来显示资源。
本次设计的意义在于综合运用所学编程思想与技巧来实现一个简单的资源管理系统,初步模拟教育资源浏览器的基本操作及功能,需解决的主要问题如下:
1、能像windows操作系统的资源管理器一样将资源按目录的形式组织起来。
2、资源应是按一定的规模进行打包,形成一个个中小规模的相对独立的“资源库”。
3、鉴于资源存储的多样化,系统应能够解释各种存储格式和存储方式的资源库。
4、资源库应能够满足资源库逐步完善、长期建设的特点,并且能不断扩展资源库中的内容。
5、鉴于教师资源分科目的特点,系统应能提供教师感兴趣的资源。
[1]
1.2主要工作和论文结构
本次设计完成的主要工作是建立教育资源浏览器的基本框架,通过XML规范化系统数据接口[3],获取系统图标以及完成对资源目录的显示定制。
论文结构如表1-1:
表1-1论文结构
概述
介绍综合设计背景与意义
设计方案
总体介绍设计过程及流程图
详细设计
系统实现的每一步
功能测试
测试程序的功能
总结
本次设计的总结
第二章系统总体设计
2.1需求分析
教育资源管理浏览器同windows文件管理器差不多,不过是简化的版本。
故此程序的资源目录区域应按树形分布,并按用户喜好分栏。
而资源的预览页应满足不同人群的需要设置不同的显示模式,本程序中设置了大、小、列表、详细四种显示模式。
另外应还能直接从管理器中打开或者下载资源文件至本地。
2.2设计方案及系统结构
2.2.1设计方案
分别按中小型资源库的形式,在系统中统一集中管理,是本程序的主要任务,而要解决此任务,只需让资源具有全局唯一的编号;在此基础上,实现资源目录的定制功能是该系统的第二个任务,用户可以通过设置树形控件的各节点的状态图标,来决定该节点及其与该节点相关的父节点、子节点的显示状态;然后是获取系统图标,此过程一般可以通过ExtractIcon与SHGetFileInfo两个系统函数完成;再就是通过XML规范系统数据接口,本程序中,需要通过导入msxml.dll文件来使用微软的XML解析器,完成系统中对XML数据的调用。
2.2.2系统结构
本程序系统结构如图2-1所示。
首先运行程序进入软件界面,软件界面由菜单栏、树状目录与资源视图栏三部分组成,各部分又分别细分成几个小块。
图2-1程序结构图
第三章系统详细设计
3.1建立框架
首先建立工程后,增加CResExplorerTree类完成资源目录的显示和定制任务。
并在该类中添加相关所需要的成员函数与变量,如图3-1所示:
图3-1CResExplorerTree类的成员
添加完后需要在OnCreate函数中添加以下代码来完成控件的创建。
if(!
m_wndCaption.Create(_T("文件夹"),WS_VISIBLE|WS_EX_LEFT|WS_DLGFRAME,
CRect(0,0,0,0),this,IDC_CAPT_BUTTON))
{
TRACE0("Unabletocreatecaption.\n");
return-1;
}
//创建树控件
if(!
this->m_TreeCtrl.Create((WS_VISIBLE|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT),
CRect(0,0,0,0),this,IDC_TREE_VIEW))
{
TRACE0("unabletocreatecaption.\n");
return-1;
}
并在StdAfx.h头文件中定义相应参数:
#defineIDC_CAPT_BUTTON101
#defineIDC_TREE_VIEW103
其次在CResExplorerView类中增加成员变量m_ListCtrl用于显示资源文件列表,并在该类中增加OnCreate函数,来创建ListCtrl列表控件,代码如下:
if(!
this->m_ListCtrl.Create(WS_VISIBLE|WS_CHILD|WS_CLIPCHILDREN
|LVS_REPORT|LVS_SHAREIMAGELISTS|LVS_EDITLABELS|LVS_AUTOARRANGE
|LVS_SINGLESEL,CRect(0,0,0,0),this,IDC_LIST_VIEW))
{
TRACE0("Failedtocreatelistcontrol.\n");
return-1;
}
最后在CMainFrame类中添加类型为CSplitterWnd的成员变量m_wndSplittr,用于完成主框架的视图分割任务。
在该类中增加OnCreateClient函数:
[2]
//创建视图分割对象
if(!
m_wndSplitter.CreateStatic(this,1,2))
returnfalse;
//在视图分隔栏中创建含树控件的CResExplorerTree类
if(!
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CResExplorerTree),
CSize(300,100),pContext))
{
m_wndSplitter.DestroyWindow();
returnfalse;
}
//在视图分隔栏中创建含列表控件的CResExplorerView类
if(!
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CResExplorerView),
CSize(100,100),pContext))
{
m_wndSplitter.DestroyWindow();
returnfalse;
}
returntrue;
完成后运行系统,得到界面如图3-2所示。
图3-2应用程序界面
3.2获取系统图标
首先,在CResExplorer类的OnCreate函数中添加一些树型节点,完成基本的树控件节点的增加功能,部分代码如下:
char*CJ[3]={"VisualC++","TanXin","TanZongRen"};//跟数据名称
char*PM[3][4]=
{
("VisualC++","Version6.0","languageC++","UseByTanXin"),//产品数据项
("1979","March","Twenty-two","VisualC++"),
("HuNan","HengYang","HengDong","")
};
HTREEITEMhRoot;//树控制项目句柄
TVINSERTSTRUCTTCItem;//插入数据项数据结构
TCItem.hInsertAfter=TVI_LAST;//在最后项之前
TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE
|TVIF_SELECTEDIMAGE|TVIF_STATE;//设屏蔽
TCItem.item.lParam=0;//序号
TCItem.item.iImage=this->GetIconIndex("folder");//得到文件夹图标
TCItem.item.iSelectedImage=this->GetIconIndex("folderOpended");//得到文件夹打开图标
TCItem.item.state=INDEXTOSTATEIMAGEMASK
(1);
TCItem.item.stateMask=TVIS_STATEIMAGEMASK;
for(inti=0;i<3;i++)
{
TCItem.hParent=TVI_ROOT;
TCItem.item.pszText=CJ[i];
…….
}
同时在该类中添加成员变量m_smallImageList与m_largeImageList,并在构造函数中对其初始化:
//建立图像列表
HIMAGELISThSystemSmallImageList,hSystemLargeImageList;
SHFILEINFOssfi,lsfi;
hSystemSmallImageList=(HIMAGELIST)SHGetFileInfo((LPCTSTR)_T("C:
\\"),0,&ssfi,
sizeof(SHFILEINFO),SHGFI_SYSICONINDEX|SHGFI_SMALLICON);
m_smallImageList.Attach(hSystemSmallImageList);
大图标操作同上,由于系统图标句柄使用的是有限资源,所以需要在析构函数中调用Detach()函数释放系统图标资源。
最后添加GetIconIndex()函数,用于得到与csFileName相关的系统图标索引号:
SHFILEINFOsfi;
//获取主程序所在路径,存在sPath中
CStringsPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer();
intnPos;
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left(nPos);
CStringtmpStr=sPath+"\\icon\\local";
if(csFileName=="folder")
{//关闭的文件夹图标
SHGetFileInfo((LPCTSTR)tmpStr,0,&sfi,sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX|SHGFI_SMALLICON);
}
……
并在程序Debug目录下添加icon目录,在icon目录下添加local目录。
3.3XML规范化数据
欲要使用MSXML解释器,需要在StadAfx.h中添加以下代码:
#import"msxml.dll"named_guids
然后在工程中添加CResDataProvider类,并在其头文件中添加如下代码:
MSXML:
:
IXMLDOMElement*GetChildren(CStringid);//添加成员函数
MSXML:
:
IXMLDOMElement*GetResLibs();
CStringGetFilePathByID(CStringid);
并在源文件中对其进行定义,相关代码见附录。
此外需要在Debug目录下添加test目录,并在test目录下添加test.doc测试文档。
由于数据提供类提供的数据为XML格式,所以在CResExplorerTree类中需要添加用于解释数据的函数InsertXMLItem(),代码略。
在ResExplorerTree.h中添加以下代码:
protected:
//{{AFX_MSG(CResExplorerTree)
afx_msgvoidOnSize(UINTnType,intcx,intcy);
afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);
afx_msgvoidOnItemexpandingTreeView(NMHDR*pNMHDR,LRESULT*pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
并对OnItemexplorerTreeView()函数进行定义,最后最关键的是在源文件中添加如下代码,让事件和函数关联起来。
BEGIN_MESSAGE_MAP(CResExplorerTree,CView)
//{{AFX_MSG_MAP(CResExplorerTree)
ON_WM_SIZE()
ON_WM_CREATE()
ON_NOTIFY(TVN_ITEMEXPANDING,IDC_TREE_VIEW,OnItemexpandingTreeView)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
在OnCreate函数中添加以下代码加载规范化的数据提供类的XML数据[5],同时注释掉测试树节点代码。
this->InsertXMLItem(m_ResDataProvider.GetResLibs());
3.4定制显示资源目录
新增类CTreeCtrlX用于完成目录节点显示的设置,并在其中添加一个CresExplorer类的指针m_pTree,用于在合适的时候通知主应用程序保存设置状态。
对于某一节点需要按照完全显示、完全隐藏、部分显示等情况进行处理,该部分需要在头文件中添加如下函数。
voidCheckedAllParent(HTREEITEMhItem);
BOOLSetItemState2(HTREEITEMhItem,intnState,UINTnStateMask);
HTREEITEMGetFirstUnAllCheckedSibingItem(HTREEITEMhItem);
HTREEITEMGetFirstCheckedSibingItem(HTREEITEMhItem);
voidCheckedAllChild(HTREEITEMhItem,intState);
BOOLIsItemAllChecked(HTREEITEMhItem);
BOOLIsItemChecked(HTREEITEMhItem);
然后在源文件中对其一一定义,且源文件中需要添加CResExplorerTree的头文件。
接着添加左键单机的消息响应函数,配合用户单击来设置操作,代码如下:
voidCTreeCtrlX:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{
UINTuFlags=0;
HTREEITEMhti=HitTest(point,&uFlags);
if(uFlags&TVHT_ONITEMSTATEICON)
{
intItemState=GetItemState(hti,TVIS_STATEIMAGEMASK)>>12;
SetItemState2(hti,ItemState!
=4?
4:
2,
TVIS_STATEIMAGEMASK);
if(ItemState==4)//父节点被取消时,所有子节点都被取消
CheckedAllChild(hti,2);
else
CheckedAllChild(hti,4);//它的父节点被选中时,所有子节点都被选中
CheckedAllParent(hti);
}
else
{
CTreeCtrl:
:
OnLButtonDown(nFlags,point);
}
}
接着在CResExplorerTree类中将CTreeCtrl后加个X并添加CTreeCtrl的头文件,向其中添加SetItemState函数,用于响应CTreeCtrlX中保存节点显示状态的功能调用,部分代码如下:
BOOLCResExplorerTree:
:
SetItemState(HTREEITEMhItem,intnState)
{
TVITEMItem;
Item.hItem=hItem;
m_TreeCtrl.GetItem(&Item);
intlParam=Item.lParam;
if(lParam<0)
{
returnfalse;//去掉不需要保存状态的节点
}
CMainFrame*MainFrame1=((CMainFrame*)(AfxGetApp()->m_pMainWnd));
CResExplorerTree*pView=(CResExplorerTree*)(MainFrame1->m_wndSplitter.GetPane(0,0));
……
}
在SetItemState中实现关于设置操作时调用了数据提供对象变量m_ResDataProvider的方法,接着在数据提供对象中添加有关显示设置数据管理的相关函数如下:
intGetDispalySetting(CStringid);//获取显示设定
BOOLS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学 资源管理 系统 MFC 课程设计