基于MFC的激光笔辅助教学系统的界面设计
2015-07-27北京林业大学北京100083
邵 麟,谢 滨,闫 磊(北京林业大学,北京 100083)
基于MFC的激光笔辅助教学系统的界面设计
邵 麟,谢 滨,闫 磊
(北京林业大学,北京 100083)
目前投影仪和大屏幕在教学、展示、会议、演讲等各个方面得到了广泛应用。但是,用户与计算机之间的交互,仍局限于键盘和鼠标。本文将在阐述MFC框架结构的基础上介绍一种基于MFC的激光笔辅助教学系统的界面设计,通过OPENCV开源计算机视觉库分析摄像头所采集的激光的移动路径,借助复杂的图像处理技术,将位置信息返回给MFC进行处理,最终使用户能够实现远距离的实时绘制激光移动轨迹,根据所需进行标记与绘画等。
MFC;界面设计;激光笔辅助教学
1 MFC简介
Microsoft Visual Studio 2010是微软公司推出的功能强大的可视化Windows平台集成开发环境,MFC是其中的一个重要组成部分[1]。MFC(Microsoft Foundation Class Library)是微软公司对大部分标准Win32 API函数的封装,是面向对象的基础类库,利用这些类可以有效地完成基于Windows的程序开发。
MFC类库是C++语言与Windows的接口,提供了大量预先编写的类和代码。利用MFC编写程序的本质是选择该类库中合适的类,并调用其下相应成员函数来完成程序所需的特定功能。
2 MFC框架结构
AppWizard(应用程序向导)和Class Wizard(类向导)是Visual C++中两个十分重要的向导组件。AppWizard可以用来生成一个MFC类库的Windows应用程序基本框架,它以一系列对话框的形式来询问用户所建立的应用程序的类型和特征信息,根据用户的选择自动生成应用程序的基本源代码;Class Wizard用来管理程序中的类、对象和消息,协助用户在应用程序框架中添加代码以完成具体的功能[2]。
整体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,用户所要做的就是通过预定义的接口把应用程序特有的东西填入这个轮廓[2]。这种利用向导自动生成用来完成常规编程任务的源代码的形式,大大简化了Windows应用程序的设计工作并节约了设计者的开发时间。
3 MFC消息映射机制以及消息分类
3.1 MFC消息映射机制
MFC使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消息处理函数的声明和实现等代码[3]。当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。
3.2 消息分类
MFC中消息分为以下三类:
(1)标准消息。除WM_COMMAND外,所有以WM_开头的消息是标准消息。从CWnd派生的类,都可以接收到这类消息; (2)命令消息。来自菜单、加速键或工具栏按钮的消息。消息名以WM_ COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息。从CCmdTarget派生的类,都可以接收到这类消息; (3)通知消息。由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口通知事件的发生。消息名也是WM_COMMAND。
从CCmdTarget派生的类,都可以接收到这类消息[4]。
MFC中各派生类与接收的消息类型关系如图1所示。
图1 MFC派生类与接受消息类型关系图
4 MFC功能实现
4.1 功能介绍
目前,多媒体演示 已渗透到人类活动的方方面面,投影仪和大屏幕在教学、展示、会议、演讲等处更是得到了广泛应用。但是,用户与计算机之间的交互,仍局限于键盘和鼠标,当用户想一边讲演一边标注时,只能局限于计算机旁,不能自由走动,当远离计算机时,虽能用世面上一些激光笔指示所讲内容,却又不能对所讲内容留下标记。基于以上缺憾,本实验设计了激光笔辅助教学系统,用户能借助激光笔远距离的在投影幕布上进行指示的同时又能对指示内容进行相应的标记,利用摄像头采集激光的移动轨迹,运用OPENCV计算机视觉库对采集到的视频进行复杂的图像处理,最终将激光点的坐标返回给MFC进行最后的实时绘图工作。以下重点阐述激光笔辅助教学系统中MFC所起到的重要作用。
4.2 设计流程
功能流程图如图2所示。
图2 功能流程图
4.3 获取桌面窗口句柄
本实现的目的是在大屏幕上激光笔所指示位置留下对应的轨迹痕迹,即需要在整个桌面上进行绘图工作。那么,我们需要获取到跟桌面相关的句柄,此后所有的绘图操作,都在桌面这个窗口上显示,而定义一个CWindowDC类型的对象意味着它可以访问整个屏幕区域(包括客户区域和非客户区域),满足了本实验的要求,具体实现代码如下:CWindowDC dc(GetDesktopWindow());//指示一个和桌面窗口相关的dc
4.4 设置线宽、颜色等信息
在MFC中,对资源的操作通常都是通过一个与资源相关的类来完成的。对话框资源也有一个相应的基类。因此首先需要创建一个类与要调用的子对话框相关联(或者也可以选择程序中已有的一个类与之相关联)[3]。
本实验自定义一个设置线宽的对话框类CSettingDlg和应用一个已有的颜色对话框类CColorDialog,具体实现代码实现如下:
CSettingDlg dlg;//生成一个自定义设置线宽的对话框的类的对象dlg.m_nLineWidth=m_nLineWidth;//将先前设置的值保留下来并显示if(IDOK==dlg.DoModal())// {
m_nLineWidth=dlg.m_nLineWidth;//当用户选择确定按钮时将线宽值保存起来
}
CColorDialog dlg; //生成一个已有的颜色对话框的类的对象
dlg.m_cc.rgbResult=m_clr;//保存上次选择的颜色
if(IDOK==dlg.DoModal())
{
m_clr=dlg.m_cc.rgbResult;// 当用户选择确定按钮时将颜色值保存起来
}
最后在View.cpp中的消息处理函数中按照用户的选择创建画笔,代码实现如下:
CPen pen(PS_SOLID,m_nLineWidth,m_clr);//按照上文指定的线宽和颜色创建画笔
dc.SelectObject(&pen);//将此画笔选择到设备描述表当中
4.5 绘图工作
完成以上处理工作后,在Microsoft Visual Studio 2010中完成OPENCV计算机视觉开发库的环境配置,并利用OPENCV处理后得到的坐标,在MFC中,使用dc.MoveTo()和dc.LineTo()函数根据不同的需求选择不同的划线方式。具体实现代码不再累述。
4.6 激光笔辅助教学系统运行效果如图3所示
图3 效果图
5 结语
本文主要阐述了MFC的基本框架结构和基于MFC的激光笔辅助教学系统的界面设计。从MFC的实现步骤中可以看出MFC是C++实现界面可视化的核心,借助于MFC应用程序框架可以更加方便地编写Windows应用程序,也便于开发更加复杂的应用程序。
[1]车忠志,孙雪雁.MFC应用程序基本框架分析[J].农业网络信息,2010(09):9-12.
[2]杨建红.文档/视图结构的MFC应用程序基本框架分析[J].湖北工学院学报,2004(04):25-30.
[3]徐璇,姜明新,黄静,徐晶,李敏.基于MFC的工程软件界面设计[J].电子设计工程,2011(21):13-15.
[4]孙鑫.VC++深入详解[M].北京:电子工业出版社,2006.
本文系北京林业大学2015年北京市大学生创新创业训练计划项目(项目编号: S201510022086 )资助。
10.16640/j.cnki.37-1222/t.2015.21.242