已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验三 非标准控件的使用一、 实验目的1、 了解非标准控件的使用过程;2、 了解非标准控件的注册方法;3、 掌握对非控件的控制和事件响应编程的一般方法。二、 实验要求1、使用 Microsoft Forms 2.0组中的非标准控件,选择其中一个,掌握使用方法。 如 Microsoft Forms 2.0 CommandButton 控件,要求在Button上是位图显示,点击鼠标左键,Button的显示在两个位图之间切换。 2、msdxm.ocx 是播放AVI图像文件的控件。控件名称是 ActiveMovieControlObject ,编写使用该控件实现在对话窗口上播放AVI视频的程序(要求:AVI的文件名可选择,用 CFileDialog Class实现)。 3、掌握 MsFlexGrid 控件的使用方法,MsFlexGrid 是用于显示文件及计算结果的控件。(MsFlexGrid 控件全称:Microsoft FlexGrid Control version 6.0)要求:在对话窗口显示数据 打开一数据文件,文件格式如下: 张三,95,77,66,55 李四,84,99,78,67 在打开文件后,数据文件内容在控件上显示。对其中一些内容修改后,再保存到另一个文件中(CFileDialog)。三、 实验过程1、 添加控件对于一个已注册的ActiveX控件,必须在每个项目中安装该控件。方法是选择Project-Add To Project-Components And Controls,再选择Registered ActiveX Controls,如下图所示:这里会列出系统中当前已经注册的所有ActiveX控件,找到所需控件后选中,点击Insert,ClassWizard就会产生一个CWnd的派生类,点击OK即可。一个尚未注册的ActiveX控件,是不会出现在上图的文件列表中的。利用系统提供的注册软件regsvr32可以进行注册。如需注册播放器控件msdxm.ocx,在命令行提示符下键入:regsvr32 msdxm.ocx该命令有些其它选择:/u /s /n /I 如在注册表中去掉已注册的控件,用/u,在命令行提示符下键入:regsvr32 /u msdxm.ocx2、 具体步骤2.1 CommandButton对话框首先创建一个单文档工程(也可分别创建3个基于对话框的工程)。(1)添加测试菜单,设置图像按钮菜单的属性,见下图:如下图添加加速健Ctrl+F2:为项目新建一个对话框,利用ClassWizard创建对话框的生成类,命名为CButtonDlg。在此对话框中添加控件Microsoft Forms 2.0 CommandButton。(2)为菜单添加command消息函数如下图,在Class name一栏选择视图类,菜单的ID名称ID_BUTTON,COMMAND消息,然后点击添加消息函数:编辑消息函数:void CActivexView:OnButton() / TODO: Add your command handler code hereCButtonDlg dlg;dlg.DoModal();添加对话框类头文件:#include ButtonDlg.h(3)访问命令按钮在对话框类CButtonDlg中,为命令按钮添加成员变量m_commandButton,用来改变控件的设置。ActiveX控件中有一通用成员函数SetPicture(),利用它可以设置ActiveX控件显示的位图;然后在工程资源中编辑两幅位图以备使用,其ID为IDB_RED_BITMAP及IDB_BLUE_BITMAP,注意:绘制图片不要在满幅图涂上单色。首先添加头文件:#include afxctl.h,就可以用类CPictureHolder。CPictureHolder类的设计目的是实现ActiveX控件的Picture属性(可由SetPicture函数实现),它可以将一个图像等控件的名称转换成控件指针dispatch pointer,帮助SetPicture函数实现设置。编写按钮的消息函数如下:bool bChange;void CButtonDlg:OnClickCommandbutton1() / TODO: Add your control notification handler code hereCPictureHolder pictholder;if (!bChange)pictholder.CreateFromBitmap(IDB_BLUE_BITMAP); /从ID到LPDISPATCH的转换 m_commandButton.SetPicture(pictholder.GetPictureDispatch();/利用ActiveX通用的SetPicture来设置CommandButton的位图 else pictholder.CreateFromBitmap(IDB_RED_BITMAP);m_commandButton.SetPicture(pictholder.GetPictureDispatch();bChange = !bChange; /换另一位图2.2 ActiveMovieControl对话框1注册控件:在命令行运行regsvr32 msdxm.ocx。2为项目添加控件ActiveMovieControl Object。3添加对话框,生成对应类。放入该控件。对话框如下图所示:同样为ActiveMovieControl控件添加成员变量m_ActiveMoive,使用CFileDialog来选择需要打开的文件,通过m_ActiveMovie.SetFileName()及m_ActiveMovie.Run()播放选择的文件。添加 “打开”按钮的click消息函数,编辑代码如下:void CMy32Dlg:OnButton1() / TODO: Add your control notification handler code herechar szFileFilter= 全部支持类型|*.mp3;*.wma;*dat;*.wav;*.avi;*mid;*.mpeg| Mp3 File(*.mp3)|*.mp3| Wma File(*.wma)|*.wma| Video File(*.dat)|*.dat| Wave File(*.wav)|*.wav| AVI File(*.avi)|*.avi| Mid File(*.mid;*,rmi)|*.mid;*.rmi| MPEG File(*.mpeg)|*.mpeg| All File(*.*)|*.*|; CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(dlg.DoModal()=IDOK) CString PathName=dlg.GetPathName(); PathName.MakeUpper(); m_movie.SetFileName(PathName); /获取播放文件信息 else return; m_movie.Run(); /播放文件 SetTimer(0,20,NULL); /设置定时器 2.3 MsFlexGrid对话框对话框入下图所示:为MsFlexGrid添加成员变量m_FlexGridData_Ctrl,使用CFileDialog来选择需要打开或保存的数据文件(此处为文本文件)。需要用到的MsFlexGrid成员函数如下:m_FlexGridData_Ctrl.SetCol(int Col); /选择行号 m_FlexGridData_Ctrl.SetRow(int Row); /选择列号 m_FlexGridData_Ctrl.SetText(CString Text); /设置Row行,Col列的内容 m_FlexGridData_Ctrl.SetRows(int Rows); /设置总行数 m_FlexGridData_Ctrl.SetCols(int Cols); /设置总列数 m_FlexGridData_Ctrl.GetText(); /得到当前内容读取数据文件内容时可使用CFile类,用到的成员函数有: CFile:Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL) /打开文件 CFile:Write( const void* lpBuf, UINT nCount ); /写文件 通过Cfile:Open()将数据文件内容装入CString类型变量内,然后通过各种字符串操作将数据内容写入对应的MsFlexGrid表格内。使用到的字符串操作函数如下: CString:IsEmpty(); /变量是否为空 CString:Mid(int nFirst, int nCount); /获取nFirst开始之后nCount个字符的内容 CString:Find(LPCTSTR pstr, int nStart); /在字符串nStart处开始查找pstr指定的内容以上各函数的定义及使用方法在MSDN中均有详细说明。编程步骤:1在ClassWizard中为控件添加成员变量: m_FlexGridData_Ctrl;2双击“打开”按钮,为其添加消息函数,编码如下:void CGridDlg:OnButton1() / TODO: Add your control notification handler code hereCFile myDataFile;char DataBuf1025;memset(DataBuf, 0, 1025);char szFileFilter= 支持类型|*.txt| 文本文件 (*.txt)|*.txt| 所有文件 (*.*)|*.*|; CString DataStr;CString PathName; CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(dlg.DoModal() = IDOK) PathName = dlg.GetPathName(); PathName.MakeUpper(); else return; myDataFile.Open(PathName, CFile:modeRead); myDataFile.SeekToBegin(); myDataFile.Read(DataBuf,myDataFile.GetLength(); /将数据文件内容保存在字符串中 DataStr = DataBuf; /char*转换为cstring便于处理 myDataFile.Close(); int pos1 = 0, pos2 = 0; /字符串指针位置 int i = 0; /行号 int j = 0; /列号 int k; char lpstrRow100 = 1; /编号 m_FlexGridData_Ctrl.SetCol(0); m_FlexGridData_Ctrl.SetRow(0); m_FlexGridData_Ctrl.SetText(编号); m_FlexGridData_Ctrl.SetCol(1); m_FlexGridData_Ctrl.SetRow(0); m_FlexGridData_Ctrl.SetText(姓名); m_FlexGridData_Ctrl.SetCol(2); m_FlexGridData_Ctrl.SetRow(0); m_FlexGridData_Ctrl.SetText(政治); m_FlexGridData_Ctrl.SetCol(3); m_FlexGridData_Ctrl.SetRow(0); m_FlexGridData_Ctrl.SetText(高数); m_FlexGridData_Ctrl.SetCol(4); m_FlexGridData_Ctrl.SetRow(0); m_FlexGridData_Ctrl.SetText(物理); m_FlexGridData_Ctrl.SetCol(5); m_FlexGridData_Ctrl.SetRow(0); m_FlexGridData_Ctrl.SetText(化学); /初始化FlexGrid /m_FlexGridData_Ctrl.SetRows(int)(DataStr.GetLength()/18) + 2); m_FlexGridData_Ctrl.SetRows(100); m_FlexGridData_Ctrl.SetCols(6); for (i = 1; i = (int)(DataStr.GetLength()/18); i+) m_FlexGridData_Ctrl.SetRow(i); /需要设置或修改的行号 m_FlexGridData_Ctrl.SetCol(0); itoa(i, (char*)lpstrRow, 100); m_FlexGridData_Ctrl.SetText(lpstrRow); /将第0列作为编号 for (j = 1; j = 5; j+) m_FlexGridData_Ctrl.SetCol(j); /需要设置或修改的列号 if(j = 5) pos2 = DataStr.Find(n, pos2) + 1;k=2; /输出最后一门成绩 else pos2 = DataStr.Find(, pos1) + 1;k=1; /定位课程成绩/ if(j = 5 & i = 6) pos2 = pos2 + 2; m_FlexGridData_Ctrl.SetText(DataStr.Mid(pos1,pos2 - pos1 - k); /显示数据 pos1 = pos2; /移动位置指针 3添加“关闭”按钮的消息函数,代码如下:void CGridDlg:OnButton2() / TODO: Add your control notification handler code hereCFile myDataFile;char szFileFilter= 支持类型|*.txt| 文本文件 (*.txt)|*.txt| 所有文件 (*.*)|*.*|; CString DataStr;CString PathName; CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(dlg.DoModal() = IDOK) PathName = dlg.GetPathName(); / PathName.MakeUpper(); else return; myDataFile.Open(PathName, CFile:modeCreate | CFile:modeWrite); myDataFile.SeekToBegin(); int maxRow = m_FlexGridData_Ctrl.GetRows(); int maxCol = m_FlexGridData_Ctrl.GetCols(); CString data; /表格中的数据 char* dataBuf; /写入数据文件的字符串指针 for (int i = 1; i maxRow; i+) for (int j = 1;j maxCol; j+) m_FlexGridData_Ctrl.SetRow(i); /需要设置或修改的行号 m_FlexGridData_Ctrl.S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江苏高邮市畅达机动车检测有限公司招聘1人笔试历年参考题库附带答案详解
- 2025江苏淮安市名城投资控股集团有限公司下属子公司第二批次人才招聘9人笔试历年参考题库附带答案详解
- 2025新疆交投阿勒泰文化旅游发展有限公司招聘2人笔试历年参考题库附带答案详解
- 2025广西武宣县益丰农村建设发展投资有限公司招聘总工程师笔试历年参考题库附带答案详解
- 2025年井冈山人力资源服务有限公司招聘1人笔试历年参考题库附带答案详解
- 2025山西忻州资产经营集团有限公司招聘财务部部长1人笔试历年参考题库附带答案详解
- 2025山东潍坊食品安全管理员招聘1人笔试历年参考题库附带答案详解
- 2025安徽阜阳市临泉县自来水厂招聘5人笔试历年参考题库附带答案详解
- 2025国企秋招开启往届生如何选择就业笔试历年参考题库附带答案详解
- 2025中国铁建国际投资集团招聘28人笔试历年参考题库附带答案详解
- 建筑工程施工现场视频监控布置实施方案
- 2025年恙虫病的护理试题及答案
- 银行资产保全处置2025年策略测试试卷(含答案)
- 2025年道路运输企业主要负责人模拟考试题及答案
- 电厂化验实施培训
- 【2025年】宿州市巡察信息中心选调事业单位工作人员考试笔试试卷【答案】
- 成都新易盛高速率光模块技术与产线扩产升级项目环境影响报告表
- 传热学基础知识培训课件
- 渔业船舶安全生产培训课件
- 微纳集成电路制造工艺 课件全套 第1-12章 绪论;硅单晶与硅晶圆制备工艺 -工艺集成与工艺流程
- 厦门市中石化2025秋招笔试综合知识专练题库及答案
评论
0/150
提交评论