




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、会议视频管理系统学院专业班级学号姓名指导教师教师职称年月日目录会议视频管理系统目录摘要0 引言1 系统需求分析1 系统需求分析2 开发工具的选择2 总体设计1 工程规划2 系统功能结构3 设计目标3 系统设计1 开发及运行环境2 数据库设计1 构建应用程序框架2 封装数据库3 主窗口设计4 系统登录管理5 视频采集6 视频录像7 会议记录附录 A 参考文献附录 B 数据表摘要【摘要】为了适应全球经济一体化的迅速发展,各大企业纷纷在世界各地建立企业的分支机构,以扩大企业在经济领域中的影响力。企业规模的不断扩大,给企业管理出现了新的管理要求,为了让各地分支机构能够及时的对企业决策作出迅速的反应,各
2、企业都积极采用高科技技术视频会议,对各分支机构进行统一的通知、调整等,使各地的分支机构能够同一时间,同时按照企业的整体规化和按排开始行动。具有关研究表明,人脑所接受的信息中55%来自于面对面的视觉效果,38%依赖于说话者的语音,而只有7%依赖于内容。随着计算机网络通信技术发展和电信基础运营成本的降低,新一代视频会议系统在各企业中得到广泛的应用。2004 年和 2005 年,中国视频会议市场增长率将保持在 32以上,在年度IT 业界热点技术中,视频会议技术位居前列,显示了这一市场的潜力确实值得期待。【关键词】会议视频管理系统0 引言视频会议管理系统通过录像对会议的全程跟踪和记录,把会议记录的图像
3、信息存储到数据库中,通过管理系统对数据库中记录进行管理,实现了通过管理系统对会议的全程图像信息进行管理。本系统为单机版视频管理系统,通过摄像头进行图像的摄录,以记录形式保存在数据库中。通过对数据库中的记录的管理实现对会议信息的管理。1 系统需求分析1.1 系统需求分析根据市场的需求,要求系统具有以下功能:记录会议信息。具有数据备份及数据恢复的功能,确保系统的安全性。视频录像。视频控制。会议信息查询。1.2 开发工具的选择会议视频管理系统采用句话,“聪明的程序员使用有以下特点:Microsoft 公司的 Visual C+6.0 进行开发。相信大家都听说过这样一 Delphi ,真正的程序员使用
4、 VC ”,与其他工具相比, Visual C+ 具1 Visual C+ 工具以 C+ 语言为基础,因此生成的可执行文件小,执行效率高。2 Visual C+ 具有强大的调试功能,可以设置和跟踪断点,查看栈和变量信息,能够自动检测内存泄露。3 Visual C+ 具有强大的硬件控制功能,与VB 、 Delphi 的 RAD 开发工具不同,Visual C+拥有很强的底层控制能力,现今的许多驱动程序都采用Visual C+ 进行开发。4 Visual C+ 具有丰富的帮助文档,即 MSDN 。 MSDN 包含了几 GB 的文档和源代码,通过它,可以解决各种技术难题。5 Visual C+ 出自
5、 Micorosoft 公司,因此,对 Windows 系统的新技术具有很好的支持,而其他公司的产品似乎总慢上半拍。2 总体设计2.1 工程规划根据需求分析,设计系统框架。会议视频管理系统由视频管理、综合设置、会议管理、系统维护、系统帮助等 5 部分组成。设计各部分具体功能如下:视频管理模块视频管理模块包括视频采集和结束视频采集两部分。综合设置模块综合设置模块由视频格式设定、综合设定、载取图像到剪贴板、视频压缩、录像5 部分组成。会议管理模块会议管理模块主要由会议记录和会议查询两部分组成。系统维护模块系统维护模块包括数据备份、数据还原、系统初始化、开机自动运行4 个部分。系统帮助模块系统帮助模
6、块由关于视频系统和帮助内容两部分构成。2.2 系统功能结构会议视频系统的功能结构如图1 所示。图 1 会议视频系统功能结构图2.3 设计目标本系统是根据中小企业的实际需求而开发的,完全能够实现企业的会议视频管理,通过本系统可以达到以下目标:系统运行稳定,安全可靠。界面设计美观,人机交互界面友好。信息查询灵活、方便、快捷、准确,数据存储安全可靠。满足键盘和鼠标的双重操作,完全支持回车键。信息安全保密。3 系统设计3.1 开发及运行环境1硬件要求CPU : 300MHz 以上的处理器。内存: 128MB ,推荐 256MB 。硬盘: 150MB 以上剩余空间。显示像素:最低800*600 ,最佳效
7、果1024*768 。摄像头:百脑通摄像头。2软件要求操作系统: Windows2000/NT/XP/CE 。数据库: SQL Server2000 。驱动程序:百脑通驱动程序。3.2 数据库设计1数据库概要说明数据库的选择应根据实际情况确定,首先应考虑用户的数据量大小,如果数据量不大,可以采用本地数据库,例如 Access、 Paradox 等,如果数量大,应采用大型数据库,例如 SQL Server、 Oracle、 Sybase 等。其次应考虑经费问题,因此一套大型数据库需要几万、甚至几十万的价格,所以在选择数据库时,还需要充分考虑用户的实际条件。2主要数据表的结构数据库中的数据表请参见
8、附录B 。4 功能模块设计4.1 构建应用程序框架会议视频管理系统采用单文档/ 视图结构。框架设计步骤如下:( 1)在 Visual C+ 集成开发环境中单击“ File/New ”菜单项,打开 New 窗口,选择 Projects 选项卡,如图 2 所示。图 2 New 窗口( 2)在 New 窗口中选择“ MFC AppWizard ( exe)”选项,在“ Project name”编辑框中输入工程名称,这里为“ Capture”,单击“ OK ”按钮进入 MFC 应用程序向导步骤 1 窗口,如图 3 所示。图 3 MFC 应用程序向导步骤1 窗口( 3 )选择“ Single docu
9、ment ”选项,表示创建单文档 /视图结构应用程序,单击“ Finish ” 按钮创建应用程序框架。4.2 主窗口设计会议视频管理系统主窗口由菜单、工具栏、客户区和状态栏组成,其中状态栏采用系统默认创建的状态栏,其他部分需要额外设计。主窗口运行效果如图4 所示。图 4 主窗口效果图1菜单设计1设计菜单资源菜单是应用程序经常使用的界面元素,它对应着应用程序的一项功能,单击菜单项将会执行欲定义的操作。下面笔者详细介绍菜单的设计过程。( 1)在工作区窗口中选中“ResourceView”标签页,如图5 所示。图 5 资源视图窗口( 2)展开“ Menu”节点,默认情况下,在文档视图结构中,MFC
10、向导会创建一个菜单资源“ IDR_MAINFRAME”,双击该资源节点,打开菜单资源编辑窗口,修改菜单资源如下:BEGINPOPUP " 视频管理 "BEGINMENUITEM "视频采集 ",MENUITEM "结束视频采集 ",ENDPOPUP " 综合设置 "BEGINMENUITEM "视频格式设定 ",MENUITEM "综合设定 ",MENUITEM "载取图像到剪贴板MENUITEM "视频压缩 ",MENUITEM "录
11、像 ",ENDPOPUP " 会议管理 "BEGINMENUITEM "会议记录 ",MENUITEM "会议查询 ",ID_Set_disPlayID_MENUITEMEndID_Set_disFormatID_Set_dissorce",IDC_PICPICID_VideoCompressIDCAPTUREID_MENUITEMRECORDID_MENUITEMQUERYENDPOPUP " 系统维护 "BEGINMENUITEM "数据备份 ",MENUITEM &qu
12、ot;数据还原 ",MENUITEM "系统初始化 ",MENUITEM "开机自动运行ENDPOPUP " 帮助"BEGINMENUITEM "关于视频系统MENUITEM "帮助内容 ",END",.",ID_MENUITEMBACKID_MENUITEMRESTOREID_MENUITEMSYSINIID_MENUIAUTORUNID_APP_ABOUTID_MENUITEMHELPEND2自定义菜单类默认情况下,Visual C+ 中的菜单并不能显示图标。如果需要在菜单项中显示
13、图标,需要自己重新封装菜单类 CMenu 。在本系统中,笔者自定义一个菜单类 CMyMenu ,该类能够在菜项项中显示图标,并且实现了菜单项的重绘,效果如图 6 所示。图 6 菜单设计效果图CMyMenu 类设计步骤如下:( 1)新建一个 CMyMenu 类,该类派生于 CMenu 。( 2)定义一个 CMenuItemInfo 类,该类用于记录菜单项的信息,包括菜单项的图标索引、菜单项文本、菜单项 ID ,代码如下:/*定义菜单项信息*/class CMenuItemInfopublic:CMenuItemInfo()m_MenuID = 0。 。CMenuItemInfo()。UINT m
14、_Iconindex 。 /菜单项图标索引CString m_Text 。 /菜单项文本int m_MenuID 。/ 菜单标识 ,-2顶层菜单 ,-1弹出式菜单 ,0分隔条 , 命令 ID 普通菜单 。( 3)为 CMyMenu 类添加 3 个成员变量,如下:UINT m_index 。UINT m_imageindex 。CMenuItemInfo Menus100 。/记录菜单项信息( 4)添加 ResetMenuStyle 方法,该方法用于修改菜单项的风格,使菜单项具有重绘功能,设置菜单项信息。在 ResetMenuStyle 方法中利用递归的方式遍历菜单资源中的每个菜单项,代码如下:
15、void CMyMenu:ResetMenuStyle(HMENU m_hmenu,BOOL IsTop)CMenu* m_pMenu 。/菜单指针m_pMenu = CMenu:FromHandle(m_hmenu) 。 /根据句柄获取菜单指针 if (m_pMenu!= NULL)for (UINT i = 0 。 i <m_pMenu->GetMenuItemCount() 。 i+)int m = m_pMenu->GetMenuItemID(i)。/获取菜单项 IDMenusm_index.m_MenuID = m 。 / m_pMenu->GetMenuIt
16、emID(i)。 /如果为弹出式菜单,返回-1,/ 分隔条返回 0,普通菜单,返回IDif ( (Menusm_index.m_MenuID<0) &&IsTop=TRUE) / 顶层菜单Menusm_index.m_MenuID = -2。Menusm_index.m_Iconindex = -1 。m_pMenu->GetMenuString(i,Menusm_index.m_Text,MF_BYPOSITION)。 /获取菜单项文本m_pMenu->ModifyMenu(i,MF_OWNERDRAW|MF_BYPOSITION |MF_STRING,Me
17、nusm_index.m_MenuID,(LPCTSTR)(&Menusm_index)。/ 修改菜单信息if (Menusm_index.m_MenuID>0)Menusm_index.m_Iconindex = m_imageindex 。 /设置菜单项图标索引 m_imageindex += 1 。m_index+=1 。CMenu* m_pSubmenu = m_pMenu->GetSubMenu(i) 。/ 获取子菜单if (m_pSubmenu )/ 如果存在子菜单,利用递归修改其风格ResetMenuStyle(m_pSubmenu->GetSafeHm
18、enu() 。( 5)添加AttachMenu方法,该方法将菜单与指定的句柄关联,并调用ResetMenuStyle方法修改菜单风格。代码如下:/*函数 名 : AttachMenu作用: 将菜单资源与菜单类关联,改变菜单风格参数: m_hmenu是菜单资源句柄返回 值 : 执行成功返回值为true,否则出错*/bool CMyMenu:AttachMenu(HMENU m_hmenu)Attach(m_hmenu) 。ResetMenuStyle(m_hmenu,true) 。return true。( 6)改写菜单项的 MeasureItem 方法,设置顶层菜单、弹出示菜单、分隔条、普通菜
19、单的大小。代码如下:/ 根据菜单的风格确定菜单项的大小void CMyMenu:MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct )lpMeasureItemStruct->itemHeight = 26 。lpMeasureItemStruct->itemWidth = 130 。UINT m_type 。m_type = (CMenuItemInfo*)(lpMeasureItemStruct->itemData)->m_MenuID。switch(m_type)case -2: /顶层菜单lpMeasureI
20、temStruct->itemWidth = (CMenuItemInfo*) (lpMeasureItemStruct->itemData)->m_Text.GetLength()*10 。break。case -1: /弹出式菜单lpMeasureItemStruct->itemWidth = (CMenuItemInfo*) (lpMeasureItemStruct->itemData)->m_Text.GetLength()*10 。break。case 0: /分隔条lpMeasureItemStruct->itemHeight = 10 。
21、break。default: / 普通菜单项break。( 7)改写菜单项的 DrawItem 方法,修改绘制菜单。在该方法中调用了多个自定义的方法,这些方法用户绘制菜单的图标、文本、背景颜色等,由于篇幅关系,具体代码请参考光盘。/ 重新绘制菜单项void CMyMenu:DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )if (lpDrawItemStruct->CtlType = ODT_MENU)if(lpDrawItemStruct->itemData = NULL) return。CDC* pdc = CDC:FromHandle(
22、lpDrawItemStruct->hDC)。pdc->SetBkMode(TRANSPARENT)。CRect m_rect (lpDrawItemStruct->rcItem) 。CString m_text = (CMenuItemInfo*)(lpDrawItemStruct->itemData)->m_TextUINT m_MenuID,m_State,m_imageid 。m_imageid = (CMenuItemInfo*)(lpDrawItemStruct->itemData)->m_Iconindexm_State = lpDraw
23、ItemStruct->itemState 。m_MenuID = (CMenuItemInfo*)(lpDrawItemStruct->itemData)->m_MenuID。switch(m_MenuID)case -2:DrawTopMenu(pdc,m_rect,m_State&ODS_SELECTED)。DrawText(pdc,m_rect,m_text) 。break。case -1:if (m_State&ODS_SELECTED)DrawBestRect(pdc,m_rect,0xff00ff,0xfffff,false)。elseDrawT
24、opMenu(pdc,m_rect,false) 。DrawText(pdc,m_rect,m_text) 。break。case 0:CRect rect1(m_rect) 。rect1.DeflateRect(2,10,2,5) 。pdc->Draw3dRect(&rect1,RGB(64,0,128),RGB(255,255,255)。break。default:CRect c_rect (m_rect) 。DrawBKColor(pdc,c_rect,m_State&ODS_SELECTED)。DrawText(pdc,m_rect,m_text) 。DrawMe
25、nuIcon(pdc, m_imageid,m_rect,true) 。break。( 8)在框架类中定义一个CMyMenu 变量 m_menu ,处理框架的WM_DRAWITEM 、WM_MEASUREITEM消息,代码如下:void CMainFrame:OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)m_menu.MeasureItem(lpMeasureItemStruct) 。void CMainFrame:OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawI
26、temStruct)m_menu.DrawItem(lpDrawItemStruct) 。2工具栏设计默认情况下,在文档视图结构中 MFC 应用程序向导会创建一个工具栏。该工具栏是一个普通的工具栏,背景不能够显示图像,为此,笔者修改了该工具栏,使其背景透明,效果如图7 所示。图 7 工具栏效果图MFC 提供的工具栏类CToolBar ,背景不能显示图像,因此笔者又添加了一个CReBar 对象m_rebar, CReBar 能够作为工具栏的容器,并且可以设置背景图像,如果将工具栏放置在CReBar 控件中,并将工具栏设置为透明效果,这样,工具栏不就可以显示图像背景了吗?工具栏除了显示背景图像外,
27、还应显示工具栏按钮图标。可以在程序中定义一个CImageList 控 件 , 通 过 该 控 件 添 加 一 组 图 标 , 调 用 工 具 栏 的 “ GetToolBarCtrl () .SetHotImageList ()”方法设置图像列表。工具栏创建过程代码如下:if (!m_wndToolBar.CreateEx(this,WS_CHILD| CBRS_TOOLTIPS|CBRS_FLOATING| WS_VISIBLE |CBRS_ALIGN_TOP|TBSTYLE_FLAT)TRACE0("Failed to create toolbarn") 。return
28、 -1 。m_wndToolBar.SetButtons(NULL,13)。int record = 0 。CString menutext 。CCHAR* c_temp 。for (int m = 0 。 m<13。 m+)if (m+1) % 3 =0)m_wndToolBar.SetButtonStyle(m,TBBS_SEPARATOR)。elsem_wndToolBar.SetButtonInfo(m,ID_Set_disPlay+record,TBBS_BUTTON,record)。menutext.LoadString(ID_Set_disPlay1+record) 。re
29、cord+=1 。c_temp=menutext.GetBuffer(menutext.GetLength()+1) 。c_tempmenutext.GetLength()+1='n' 。m_wndToolBar.SetButtonText(m,c_temp) 。m_wndToolBar.GetToolBarCtrl().SetButtonSize(CSize(60,55)。 /设置工具栏按钮大小/m_wndToolBar.GetToolBarCtrl().SetButtonWidth(30,60)。m_toolimages.Create(28,28,ILC_COLOR16|I
30、LC_MASK,0,0)。 /创建图像列表/ 加载图像列表m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON2)m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON3)m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON4)m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON5)m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON6)m_toolimage
31、s.Add(AfxGetApp()->LoadIcon(IDI_ICON7)m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON8)m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON9)。 /向图像列表中添加图标。m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON10)。m_wndToolBar.GetToolBarCtrl().SetHotImageList(&m_toolimages) 。 /设置工具栏的热点图标 m_toolim
32、ages.Detach() 。/ 创建工具栏图像列表m_toolimages.Create(32,32,ILC_COLOR32|ILC_MASK,1,1)。/ 加载图像列表m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON2)。m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON3)。m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON4)。m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON5)。m_
33、toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON6)。m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON7)。m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON8)。m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON9)。m_toolimages.Add(AfxGetApp()->LoadIcon(IDI_ICON10)。m_wndToolBar.GetToolBarCtrl().SetIma
34、geList(&m_toolimages)。/ 设置工具栏按钮的图标m_toolimages.Detach() 。m_rebar.Create(this)。m_rebar.AddBar(&m_wndToolBar)。REBARBANDINFO barinfo。barinfo.cbSize = sizeof(barinfo) 。barinfo.fMask = RBBIM_BACKGROUND。m_wndToolBar.ModifyStyle( 0,TBSTYLE_TRANSPARENT)。 / 将工具栏设置为透明效果barinfo.hbmBack = :LoadBitmap(Af
35、xGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP4)m_rebar.GetReBarCtrl().SetBandInfo(0,&barinfo)。3客户区设计会议视频管理系统的客户区域由树视图和普通视图两部分组成。在树视图中列出了系统中的常用功能,用户可以双击节点打开各功能模块。为实现该功能,笔者自定义了一个树视图类CCustomTree,该类派生于CTreeView 。CCustomTree 类设计步骤如下:( 1)通过工作区创建一个类,名称为CCustomTree ,父类为 CTreeView 。( 2)在 CCustomTree 类中
36、定义 3 个成员变量,如下:CStringArray m_Treenodes 。/ 记录节点文本CImageList m_imagelist 。 /图像列表CFont m_font 。 /控件字体( 3)在 OnInitialUpdate 方法中创建图像列表,添加图标,创建和设置字体,修改树视图风格,添加节点。代码如下:void CCustomTree:OnInitialUpdate()CTreeView:OnInitialUpdate()。m_imagelist.Create(16,16,ILC_COLOR24|ILC_MASK,5,5)。m_imagelist.Add(AfxGetApp(
37、)->LoadIcon(IDI_ICON1)。m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON2)。m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON3)。m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON4)。this->GetTreeCtrl().SetImageList(&m_imagelist,TVSIL_NORMAL)。this->GetTreeCtrl().DeleteAllItems()。this->Mo
38、difyStyle(0,TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS )。/ 添加树节点HTREEITEM h_root 。CString tempstr 。h_root = this->GetTreeCtrl().InsertItem("功能列表 ",0,0) 。for(int i = 0 。i<NODECOUNT 。i+)tempstr = m_Treenodesi 。this->GetTreeCtrl().InsertItem(tempstr,1,2,h_root) 。this->GetTreeCtrl
39、().Expand(h_root,TVE_EXPAND)。this->GetTreeCtrl().SetBkColor(RGB(232,254,255)。this->GetTreeCtrl().SetTextColor(RGB(0,0,255)。m_font.CreateFont(0,0,0,0,FW_BOLD,0,0,0,DEFAULT_CHARSET,OUT_STRING_PRECIS,CLIP_TT_ALWAYS,DEFAULT_QUALITY,DEFAULT_PITCH,"宋体 ") 。this->SetFont(&m_font) 。注意:
40、树视图的双击事件并没有在CCustomTree 类中实现,而是在主框架中实现的。客户区域由树视图和普通视图两部分组成,因此需要分隔框架窗口。具体步骤如下:( 1)在框架类中定义一个 CSplitterWnd 对象 m_splitter 。( 2)改写框架类的虚拟方法 OnCreateClient ,划分客户区域,代码如下:BOOL CMainFrame:OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)m_splitter.CreateStatic(this,1,2) 。m_splitter.CreateView(0,1,
41、RUNTIME_CLASS(CCaptureView),CSize(200,100),pContext)。m_splitter.CreateView(0,0,RUNTIME_CLASS(CCustomTree),CSize(200,100),pContext)。m_temptree = (CCustomTree*)m_splitter.GetPane(0,0) 。m_treehandle = m_temptree->m_hWnd 。return TRUE 。 /CFrameWnd:OnCreateClient(lpcs, pContext) 。4.3 系统登录管理1实现目标为了防止非法用
42、户进入系统,笔者设计了系统登录窗口。在程序启动时,首先显示登录窗口,要求用户输入登录信息,如果用户输入不合法,将禁止进入系统。系统登录窗口运行结果如图 8 所示。图 8 系统登录2设计步骤( 1)在工作区中选择“ Class View ”选项卡,鼠标右键单击根节点,在弹出的快捷菜单中选择“ New Form ”菜单项,打开 New Form 窗口,如图 9 所示。图 9 New Form 窗口( 2 )在“ Name”编辑框中输入窗口类名,例如“CLogin ”,在“ Base class”组合框中选择一个基类,这里为“CDialog ”,单击“ OK ”按钮创建窗口。( 3)在工作区的资源视
43、图中选择新创建的窗口,向窗口中添加图片、静态文本、群组框、列表视图、标签、编辑框、按钮等资源。设置主要资源属性如表1 所示。表 1主要资源属性设置资源名称资源 ID属性值EditIDC_EDIT2StylesPasswordButtonIDC_CONFIRMCaption登录StylesFlatEditIDC_EDIT3GeneralDisabled3代码分析改写对话框的PreTranslateMessage方法,按 <Enter> 键控制焦点移动。BOOL CLogin:PreTranslateMessage(MSG* pMsg)if (pMsg->message=WM_K
44、EYDOWN)if (pMsg->wParam = 13)if (pMsg->hwnd = m_password.m_hWnd)pMsg->wParam = 9 。return CDialog:PreTranslateMessage(pMsg) 。处理对话框初始化时的消息,创建图像列表,向图像列表中添加图标,加载操作员信息,将其显示在列表视图中。BOOL CLogin:OnInitDialog()CDialog:OnInitDialog()。m_imagelist.Create(32,32,ILC_COLOR24|ILC_MASK,0,0)。/ 创建图像列表m_imageli
45、st.Add(AfxGetApp()->LoadIcon(IDI_LOGIN1)。 /加载图标m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_LOGIN2)。m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON11)。m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON12)。m_list.SetImageList(&m_imagelist,LVSIL_NORMAL)。 /设置列表视图的图像列表LoadOperators() 。 /向列表视图中加载
46、操作员信息h_prohandle = :LoadLibrary("user32") 。 /加载动态库AnimateWindow = (CFun*):GetProcAddress(h_prohandle,"AnimateWindow") 。/ 获取函数地址 AnimateWindow(m_hWnd,1500,AW_CENTER) 。/调用动态库中的函数,使窗口特殊效果显示return TRUE 。自定义函数LoadOperators 用于加载操作员信息,并将操作员信息显示在列表视图中。void CLogin:LoadOperators()_Recordse
47、tPtr m_pRecord。CString sql = "select * from tb_Login"。CString m_operator 。int imageindex = 0 。int imagecount = m_imagelist.GetImageCount() 。m_pRecord = dataManage.p_Con->Execute(_bstr_t)sql,NULL,adCmdText)while (! m_pRecord->ADOEOF)。m_operator = (TCHAR*)(_bstr_t)m_pRecord->GetColl
48、ect("m_name")m_list.InsertItem(100,m_operator,imageindex) 。if (imageindex<imagecount-1)。imageindex+=1 。m_pRecord->MoveNext()。处理“登录”按钮的单击事件,程序首先检查用户名和密码是否为空,如果为空,进行提示,并退出操作。否则以用户名和密码为条件从数据表中查询数据,有数据返回,证明用户名和密码正确,否则认为用户名和密码不正确。void CLogin:OnConfirm()CString c_password。m_password.GetWin
49、dowText(c_password) 。if (m_username.IsEmpty()|c_password.IsEmpty()MessageBox(" 用户名或密码不能为空"," 提示 ",64) 。return 。CString sql = "select * from tb_login where m_name = ? and m_password = ?" 。dataManage.p_Com->ActiveConnection = dataManage.p_Con.GetInterfacePtr() 。dataManage.p_Com->CommandText =(_bstr_t) sql 。_ParameterPtr m_para
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园进餐教育:习惯养成与健康管理实践
- 初中数学校本课程实施方案
- 工业设计简历案例
- 藏族商业空间设计案例分析
- 康复专科护士小讲课课件
- 孕期健康教育课件
- 幼儿认识长短的科学教育
- 大学生劳动教育实训
- 五年级上册书法课件
- 林语堂的快乐教育哲学与实践
- 福建省龙岩市一级校2024-2025学年高二下学期4月期中联考 数学试题(含答案)
- 2025年街道全面加强乡村治理工作实施方案
- 明股实债协议合同
- 2025“十五五”金融规划研究白皮书
- 9.2法律保障生活(教案) -2024-2025学年统编版道德与法治七年级下册
- 2025年江西上饶铅山城投控股集团有限公司招聘笔试参考题库含答案解析
- 建筑工程结算审核现场踏勘
- 浙江省杭州市2024年中考英语真题(含答案)
- 大众速腾2009年型电路图
- 新能源电力设备项目立项报告(模板范本)
- 第六章 纳米复合材料
评论
0/150
提交评论