基于mfc的测量程序开发剖析

上传人:今*** 文档编号:105906213 上传时间:2019-10-14 格式:DOCX 页数:13 大小:345.57KB
返回 下载 相关 举报
基于mfc的测量程序开发剖析_第1页
第1页 / 共13页
基于mfc的测量程序开发剖析_第2页
第2页 / 共13页
基于mfc的测量程序开发剖析_第3页
第3页 / 共13页
基于mfc的测量程序开发剖析_第4页
第4页 / 共13页
基于mfc的测量程序开发剖析_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《基于mfc的测量程序开发剖析》由会员分享,可在线阅读,更多相关《基于mfc的测量程序开发剖析(13页珍藏版)》请在金锄头文库上搜索。

1、基于MFC的测量程序开发摘要:关键词:1 界面设计以坐标转换系统(包括高斯平面坐标、大地空间坐标、空间直角坐标之间的转换)为例,界面设计如下:对于此类简单的测绘程序设计,在我看来,运用对话框进行编程,已经足够了,如果没有特殊的要求,不建议使用单文档以及多文档。对于对话框程序的界面设计主要包括:对话框大小、对话框标题、对话框控件的大小与位置设计等3个方面。其中控件的大小与位置设计最为关键,其美观程度也在此体现,一个美观的程序界面能给人耳目一新的感觉,我认为界面设计是很有必要的。对话框大小的设计我一般是采用黄金矩形比例即1:0.618,如有特殊的要求可适当的加宽或者加长。对话框的标题可直接在对话框

2、属性中的Caption一栏进行修改。常用控件类型分为:GroupBox、ComboBox、Radio、Edit、Button以及ListControl,其中GroupBox控件起到Radio控件分组与包裹其他类型控件的美观作用,ComboBox起到转换方式选择和坐标系选择的作用,不要使用默认大小,要用鼠标进行绘制,其横向长度要能保证大于最长string的长度,其纵向宽度适宜就行,不做特别要求,Radio、Edit和Button控件的大小也是适宜就行,不做特别要求,ListControl控件的长度很重要,必需要能表示所有的列(包括其中的数据),不能存在空间不够而省略表示的现象,如实在是由于对话框

3、大小有限,长度不够,还能在控件初始化时对控件字体大小进行修改,后面会做介绍。2 初始化整个程序的初始化是为后面文件读写、计算、绘图等操作的代码编写做铺垫,是构建一个大的框架,之后再编写每一个部分,在编写的过程中,我们可能会发现很多框架所存在的问题,逐渐修改、逐步完善就可以了,就完成了程序的编写。初始化并不是必要的,就算不初始化,也可以逐步完成程序的编写,但初始化后的程序,在接下来的编写过程中,将会更加的流畅,也能加深自己对于整个程序的理解。程序的初始化主要包括两个部分,变量的初始化和控件的初始化,它们是有一定的联系的,应交叉进行,不可分开处理,下面主要介绍各类控件的初始化。ComboBox控件

4、初始化:首先建立一个ComboBox控件变量,然后在InitDialog函数调用Addsting函数添加string字段,调用SetCursel函数参数设为0是为了在打开对话框时ComboBox控件上默认选择第1条字段,然后调用ComboBox控件的响应函数,响应函数里首先要调用GetCursel函数获取当前索引,然后判断索引值,完成ComboBox控件相对应的操作。Radio控件初始化:直接在InitDialog函数里创建一个CButton的变量指针获取Radio控件的窗口句柄,然后调用SetCheck函数并将参数设为1,即在打开对话框时选中此Radio按钮,然后调用Radio控件的响应函数

5、,完成相应操作。需要注意的一点就是,要将包围1组Radio控件的Group控件属性栏里边的Group设置为True,否则将造成整个对话框的所有Radio控件为一组,不能同时选取2个Radio控件的情况。List Control控件初始化:List Control控件,我又称之为表格控件,主要利用表格进行数据的显示,直接明了。表格控件的初始化直接在InitDialog函数里进行,首先获取表格的大小即Rect,主要是为了接下来每一列宽度的设置做准备,然后进行风格、字体大小、字体颜色的设定,最后依次插入每一列的列名。3 数据输入数据的输入有两种形式,一种是文件读入数据,一种是手动输入数据。3.1 文

6、件读入数据并显示到ListCtrl中数据文件类型一般常用的是.txt(文本文件)和.xls(表格文件),下面分别对两种类型数据文件的读取进行介绍。3.1.1 .txt文本文件数据读取在文本文件中,单个数据之间通常用空格或者逗号来隔开,或者进行换行处理,以下简称为空格类文本文件和逗号类文本文件。空格类文本文件用C+的fstream来进行读取是非常方便的,但是逗号类文本文件用流来进行读取就显得力不从心了,所以综合空格类文本文件和逗号类文本文件的特点,我们采取一种新的文件读取方式即用MFC中的CStdioFile类来进行文件读取操作,下面介绍具体操作。双击打开文件Button,创建其响应函数。在响应

7、函数中创建打开对话框获取文件地址并对文件地址进行判定。文件地址存储在csFileAddress中,文件地址非空判定为空,则弹出提示消息”文件地址错误”,判定为非空则继续往下运行,进行数据的读取操作。如要读取下一行数据,在再进行一次sf.Readstring()操作即可,最后进行文件的关闭操作。CStdioFile类读取大多数类型的文本文件都挺方便的,fstream只对于空格类文本文件读取较为方便,标准C的文件读取方式对一切文本文件都可以实现,但较为繁琐,只对于标准文件读取较为方便,如图像文件。3.1.2 .xls表格文件数据读取C+读取.xls文件,有各种各样的方法,我在这里向大家介绍一种比较

8、简单快捷的方法,采用OLE的方式读取.xls文件。首先点击项目-类向导-添加类-类型库中的MFC类,然后从注册表中选取Excel或者直接从文件中选取(这需要电脑上已经安装了Excel),成功后,从接口中选取6个类添加到生成的类,分别是CApplication、CRang、CWorkbook、CWorkbooks、CWorksheet、CWorksheets,在对话框类头文件中引用这6个类,并定义变量分别为app、range、book、books、sheet、sheets。接着是创建打开文件Button的响应函数并构建打开对话框获取文件地址,在读取.txt文件中已经详细介绍了,这里就不再重复介绍

9、了。接下来就是对.xls文件的操作部分了。读取.xls文件的原理就是先要获取数据的在表格中的位置,在上图中65代表第A列(依据ASCII码),1代表第1行,然后再获取其内容,最后关闭excel。3.1.3 将数据显示到ListCtrl中从文件读取数据后并存储,可以将数据显示到ListCtrl中,这可以增加程序的交互性,让用户使用程序更加方便,更能对读入数据的正确性进行简单判断,具体操作如下。以高斯正算为例,需要将原本char、double类型的变量转换为CString类型,以便在ListCtrl中显示。3.2 手动输入数据我们想要实现这样一种手动输入数据的方式,即鼠标左键单击ListCtrl控

10、件中某一单元格,在同一单元格处弹出一个Edit编辑框,大小与此单元格完全一致,然后在Edit编辑框中中输入数据,点击其他区域,即完成数据的输入,并将数据显示到当前单元格。具体操作如下。打开类向导,找到命令中的IDC_LIST即ListCtrl控件ID,然后找到其响应消息NM_CLICK,点击添加处理程序,点击确定,在其响应函数进行下列操作。首先要获取我们鼠标点击ListCtrl控件的单元格的行列,iItem与iSubItem是在.h文件中定义的,然后获取客户区坐标即ListCtrl控件的坐标,并将坐标原点转移到ListCtrl控件的左上角,获取编辑框的坐标,它的坐标为客户区坐标加上它在List

11、Ctrl控件中的坐标。接着进行对Edit编辑框的操作,如果此处单元格原本就有数据,那么我们需要将它的原始数据显示到编辑框中,然后移动、显示编辑框,并对编辑框实现编辑,编辑完成后,点击其它区域,结束对编辑框的操作,编辑框的结束操作也有对应的响应函数,以建立ListCtrl单击响应函数相同的方法建立Edit的响应函数EN_KILLFOCUS。KILLFOCUS主要的功能就是起到一个数据传递的作用,即将编辑框中的数据显示到ListCtrl中。到此,手动输入数据就介绍完了,如何运用ListCtrl中的数据将在计算中进行讲解。4 计算以坐标转换为例,计算主要包括,计算辅助函数的编写,坐标系与坐标转换方式

12、的选择,如选择手动输入数据,还需输入未知点个数与确定分度带,并读取ListCtrl中的数据,还有最重要的主体计算。4.1 计算辅助函数的编写编写辅助函数要新建一个C_AssistFucntion类,将辅助函数写在这个类里面。常用的计算辅助函数有:(1)、度分秒-度Dms2Deg;(2)、度-弧度Deg2Rad;(3)、度分秒-弧度Dms2Rad;(4)、弧度-度分秒Rad2Dms;(5)、弧度-度Rad2Deg;(6)、度数之和SumofDms(含相减);(7)、求边长 CalDistance;(8)、求方位角CalAzimuthAngle;(9)、方位角传递TransAzimuth(小于18

13、0,加上180;大于180,减去180);4.2 坐标系与坐标转换方式的选择在ComboBox下拉框中选择了坐标系和坐标转换的方式后,要有相应的响应操作。双击坐标系选择ComboBox控件,建立其响应函数,进行下列操作。 首先要获取其索引,即所选坐标系的排列位数,按从上到下进行排列,然后进行相应的操作。坐标转换方式的选择就比较简单了,在.h文件中定义一个int型变量m_iflag记录其索引值就行了,在下面的计算中针对不同的索引进行不同的计算。4.3 文件输入计算双击文件输入Radio,创建其响应函数,进行下列操作。m_bHand和m_bFile是在.h文件中定义的bool型变量,m_bHand

14、代表手动输入,m_bFile代表文件输入,true代表选择。当选择文件输入时,将未知点个数的Edit编辑框与确定Button设置为不可编辑,将打开文件Button设置为可编辑,在打开文件读取数据后,对未知点个数进行更新,并在对话框上显示,但不可编辑。4.4 手动输入计算双击手动输入Radio,创建其响应函数,其操作与文件输入刚好相反。文件输入的数据在打开文件时就已经存储在里容器中,直接使用即可。手动输入的数据包括未知点个数,ListCtrl表格控件上的数据,高斯正反算还包括分度带的选取,这些问题需要一一进行处理。4.4.1 未知点个数输入给未知点个数Edit控件绑定一个int型变量m_N,双击

15、确定Button,创建其响应函数,进行下列操作。UpdataDate(TRUE)表示更新变量,将Edit框输入的数赋值给其绑定的变量m_N,然后在ListCtrl控件上添加m_N行空行,这是为了后面在在ListCtrl控件上输入数据做准备,因为ListCtrl控件上无数据,鼠标左键单击响应函数是不会执行的,所以必须添加m_N行空白数据。4.4.2 高斯正反算分度带的选取分度带的选取就是选择不同的Radio,执行不同的操作,需要创建不同的响应函数,在.h文件中定义m_iFdd,如选择6度带,则在其对应的响应函数中给m_iFdd赋值为6,选择3度带进行相同操作给m_iFdd赋值为3,在后面的主体计算中对m_iFdd值进行判断即可。4.4.3 ListCtrl控件上数据的读取手动在ListCtrl控件上输入数据后,数据是显示在ListCtrl控件上的,并不是存储在容器中的,我们需要把数据从ListCtrl控件上读取下来,存放到容器中,方便使用。在计算Button响应函数的开头进行下列操作。首先要对输入方式进行判定,确定选择了手动输出Radio才进行其余操作,主要函数GetItemTex(i,j)这个函数实现了对

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号