Visual C++程序开发范例宝典(软件工程师典藏版)
上QQ阅读APP看书,第一时间看更新

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);
}

举一反三

根据本实例,读者可以:

设计虚拟键盘密码验证程序。