1.8 多媒体触摸屏程序应用实例
随着多媒体技术的不断发展,触摸屏程序应用越来越广泛。本节主要介绍触摸屏程序的设计。
实例026 采购中心多媒体触摸屏程序
本实例是一个提高效率的程序
实例位置:光盘\mingrisoft\01\026
实例说明
触摸屏软件是新兴的一种多媒体应用软件,与传统的键盘和鼠标标准输入方式相比,触摸屏输入更直观、更方便。它是政府和企事业单位为百姓、客户服务的一种非常好的手段。本实例介绍政府采购中心多媒体触摸屏程序的设计,效果如图1.35所示。
技术要点
本实例界面由图片和AVI动画构成,因此核心问题是对AVI文件的播放。在MFC类库中提供了CAnimateCtrl类,用于播放AVI动画,该类的主要方法如下所示。
(1)Open方法。该方法用于打开一个AVI文件。在播放AVI动画之前,首先应调用该方法打开文件。Open方法语法如下:
BOOL Open( LPCTSTR lpszFileName ); BOOL Open( UINT nID );
参数说明:
● lpszFileName:标识AVI文件名称。
● nID:标识AVI资源ID。
(2)Play方法。该方法用于播放AVI文件,语法如下:
BOOL Play( UINT nFrom, UINT nTo, UINT nRep );
参数说明:
● nFrom:标识播放帧的起始位置。
● nTo:标识播放帧的终止位置。
● nRep:标识循环次数,如果为-1,表示始终循环播放。
(3)Stop方法。该方法用于停止AVI文件的播放,语法如下:
BOOL Stop( );
(4)Close方法。该方法用于关闭AVI文件,语法如下:
BOOL Close( );
注意:CAnimateCtrl类只能播放无声音的AVI文件,如果播放有声音的AVI文件,需要使用微软公司ActiveX控件CAnimation。
实现过程
(1)新建一个基于对话框的应用程序。
(2)在对话框中添加Picture控件、Animate控件。
(3)通过类向导为Animate控件命名,如图1.36所示。
图1.35 采购中心多媒体触摸屏程序
图1.36 类向导窗口
(4)在对话框的OnInitDialog方法中播放AVI动画,代码如下:
m_Navigation.Open("gd.avi"); m_Navigation.Play(0,-1,-1); m_Center.Open("中间标.avi"); m_Center.Play(0,-1,-1);
举一反三
根据本实例,读者可以:
开发触摸屏地理定位程序。
实例027 为触摸屏程序添加虚拟键盘
本实例是一个提高效率的程序
实例位置:光盘\mingrisoft\01\027
实例说明
触摸屏程序最大的缺点就是没有键盘输入。如果进行动态数据查找,会带来一定的麻烦。本实例通过添加一个虚拟键盘实现触摸屏程序的动态数据查找,效果如图1.37所示。
图1.37 为触摸屏程序添加虚拟键盘
技术要点
要实现一个虚拟键盘可以在界面上放置一些按钮,用于数据录入。当用户单击某个按钮时,编辑框中会显示相应的数据。程序中需要处理按钮的单击事件,将当前按钮的文本显示在编辑框中。由于虚拟键盘需要多个按钮,如果为每个按钮一一处理单击事件,会很繁琐。如果编写一个通用的消息处理函数,由每个按钮在触发单击事件时调用,就可以简化代码了。
为了截获按钮单击事件,需要改写对话框的PreTranslateMessage方法,在该方法中判断当前是否触发了WM_LBUTTONDOWN,如果是则调用自定义的方法。详细代码可以参考实现过程。
实现过程
(1)新建一个基于对话框的应用程序。
(2)在对话框中添加DataGrid、编辑框、静态文本、按钮和群组控件。
(3)在对话框类中添加OnBtnClick方法,处理按钮的单击事件,代码如下:
void CVirtualKeyDlg::OnBtnClick(HWND hButton) { CButton* pButton = (CButton*)CButton::FromHandle(hButton); if (pButton) { CString str; pButton->GetWindowText(str); //获得按钮显示文本 CString text; m_Data.GetWindowText(text); //获得编辑框显示文本 if(str!="Del") //如果不是Del按钮 { text.Insert(text.GetLength(),str); //将按钮文本插入到编辑框文本后 } else //否则 { text=text.Left(text.GetLength()-1); //编辑框去除最右侧字符 } m_Data.SetWindowText(text); //设置编辑框显示文本 } }
(4)改写对话框类的PreTranslateMessage方法,截获鼠标的单击事件,代码如下:
BOOL CVirtualKeyDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message==WM_LBUTTONUP) //获得鼠标左键抬起事件 { OnBtnClick(pMsg->hwnd); //处理当前按下按钮的单击事件 } return CDialog::PreTranslateMessage(pMsg); }
举一反三
根据本实例,读者可以:
设计虚拟键盘密码验证程序。