VC环境下监控软件流程图界面的开发

上传人:痛*** 文档编号:93217181 上传时间:2022-05-20 格式:DOC 页数:4 大小:85KB
收藏 版权申诉 举报 下载
VC环境下监控软件流程图界面的开发_第1页
第1页 / 共4页
VC环境下监控软件流程图界面的开发_第2页
第2页 / 共4页
VC环境下监控软件流程图界面的开发_第3页
第3页 / 共4页
资源描述:

《VC环境下监控软件流程图界面的开发》由会员分享,可在线阅读,更多相关《VC环境下监控软件流程图界面的开发(4页珍藏版)》请在装配图网上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! VC环境下监控软件流程图界面的开发The Development of Flow Interface for Monitoring Software Based on VC史京玲 刘旺开 白 涛 SHI Jingling, LIU Wangkai, BAI Tao摘要:文章介绍了在Windows平台下,利用Visual C工具实现对位图的拖动、缩放、镜像操作,解决屏幕闪烁和透明处理问题,来开发监控软件流程图界面的过程。关键词:位图操作,屏幕闪烁,透明处理,组态中图分类号:TP39 文献标识码:AAbstract:Based on Windows

2、system, this article introduces the realization process of software flow interface for monitoring by the Visual C+. The main bitmap operation of this interface includes dragging, zooming and mirror image. The problems of transparent disposal and screen flicker are solved too.Keywords:bitmap operatio

3、n,screen flicker, transparence disposal,configuration目前,计算机测控系统在工业领域中的应用越来越广泛。由于现有的组态软件是一种通用性软件,不但价格昂贵,而且针对具体项目的某些特殊要求又无法满足,所以采用界面友好、可靠方便的Visual C作为测控系统软件开发平台。开发测控系统软件在完成工业过程实时监控任务外,配以灵活友善的人机界面,才能有更高的实用价值。监控子系统作为测控系统的用户界面部分,是与用户交互的窗口,其可视化的程度决定着软件的受欢迎程度。为了真实的显示现场的运行环境,需要把工艺流程图、实时控制状态等内容直观的显示在屏幕上。用绘图软

4、件生成具有立体效果的流程图及常用控制设备,再用程序载入编辑或操作大大简化了编程工作并节省了时间。这就必须解决位图编辑的灵活方便性、屏幕刷新闪烁、透明处理等问题。1 创建流程图界面 为了使监控系统流程图界面更生动直观,选用组态王或3Dmax绘制出有立体感的图像,之后将图像存成BMP格式作为背景位图。位置状态常需更改的控制设备如阀门等另行绘制,作为前景位图编辑。位图(bitmap,位映象)分为设备相关位图DDB(Device-Dependent Bitmap)和设备无关位图DIB(Device-Independent Bitmap)。Windows9X以后的版本支持DIB位图。DIB位图包含一个颜

5、色表,颜色用于描述像素的颜色值如何对应RGB值。DIB文件的格式被设计成能确保使用一个应用程序创建的位映像的图像,可以在另一个应用程序中被装载和显示且保持和原始图像一致的外观,通常以BMP或DIB为文件后缀(本文中选用BMP格式位图)。我们知道,向屏幕绘图前必须先获得设备环境DC(Device context)。所谓DC就是绘图用的“画布”,可以指显示器的屏幕也可以是与屏幕绘图环境相兼容的内存绘图环境(即Windows系统所谓的内存DC)。通过CreateCompatibleDC函数来创建与屏幕DC兼容的内存DC,调用SelectObject函数将背景位图选入DC,当应用程序将指向DC的句柄传

6、递给一个图形设备接口(GDI,Graphic Device Interface)的画图函数时,流程界面背景位图显示在屏幕上。这里采用可以设置指定设备环境中位图拉伸模式的函数StretchBlt,其函数原型如下:BOOL StretchBlt ( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop ); 其中参数x,y,nWidth,nHeigh t为目标矩形位置及大小,pSrcDC为资源设备环境,xSrc,ySrc,n

7、SrcWidth,nSrcHeight为资源矩形位置及大小。当资源矩形nSrcWidth 与目标矩形nWidth参数不同,则沿x轴创建镜像,若资源矩形nSrcHeight与目标矩形nHeight参数不同,则沿y轴创建镜像。 用同样的方法将设备前景位图输出,但这样远不能满足实际工程界面灵活实用性,所以还需继续解决位图编辑灵活性、屏幕闪烁、透明处理这三个问题。2 实现对前景位图操作功能如下图1所示试验段工况中,排气系统与低压系统阀门安装方位不同,为设备前景位图(阀门)经缩小并沿对角线方向镜像处理后拖移至排气系统管路上。由于现场调试可能需要变更测点个数及位置从而导致调整流程图界面上常用设备位置,所以

8、监控软件界面部分的开发必须实现对前景位图编辑的灵活操作。图1 监控软件流程图界面(低压部分)这里可以调用Windows封装的CRectTracker类。CrectTracker类无基类,它允许用户在一个视图窗口中移动或者改变矩形对象大小。该类有两个重要数据成员:m_nStyle成员决定了边框,调整大小控制柄和其他特性;m_rect成员为矩形保持设备坐标。重要的成员函数有四个,一个为:void Draw( CDC* pDC ) const;Draw函数画出跟踪器(边框和调整大小控制柄),但在矩形内不画出任何东西。一个是:BOOL Track( CWnd* pWnd, CPoint point,

9、BOOL bAllowInvert = FALSE, CWnd* pWndClipTo = NULL );这里将bAllowInvert置为true,则矩形跟踪器可以沿X轴和Y轴翻转;在WM_LBUTTONDOWN处理程序中调用这个函数Track。WM_LBUTTONDOWN消息在用户按下鼠标左键的情况下发送。还有一个即:int HitTest( CPoint point ) const;其返回值基于其成员函数TrackerHit列举的类型如下表所示: 类型返回值光标位置CRectTracker:hitNothing-1矩形框外(未选中)CRectTracker:hitTopLeft0矩形左上

10、角CRectTracker:hitTopRight1矩形右上角CRectTracker:hitBottomRight 2矩形右下角CRectTracker:hitBottomLeft3矩形左下角CRectTracker:hitTop4矩形顶部CRectTracker:hitRight5矩形右部CRectTracker:hitBottom6矩形底部CRectTracker:hitLeft7矩形左部CRectTracker:hitMiddle8矩形中部当返回值小于零(即为1)表示未选中状态,返回值大于等于零表示选中状态。再有一个函数:BOOL SetCursor( CWnd* pWnd, UINT

11、 nHitTest ) const;我们在视图的WM_SETCURSOR处理程序中调用此函数,确保光标在跟踪期间发生变化。如果SetCursor返回FALSE,调用基本类中的OnSetCursor函数,其原型为afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message )。为了使应用程序整体框架合理,新建MyRect类继承CRectTracker类,声明一个SetSelect函数设置选中状态;再声明一个DrawRect(CDC *pDC)函数,用同创建流程图界面相似的方法调用StretchBlt函数在屏幕上绘出前景设备位图

12、。 因为在背景图中需绘出状态不同的同一个前景设备位图,所以在CDocument中定义一个类模板结构CArray m_Array,指定在此结构中存储CMyRect类的对象;每调用一次CArray类的成员函数ADD(其函数原型为int Add( ARG_TYPE newElement ),就会在背景位图中添加前景设备位图。具体要做的是在工具栏中添加一个阀门图标,其ID为:IDD_ADDFAMEN,通过ClassWizard添加消息映射函数afx_msg void OnAddFamen()来调用CArray的函数Add;每点击一次工具栏的阀门图标就增加一个阀门。新增加所有图形修改完毕后重新组合,即可

13、实现流程图界面的组态功能。3解决屏幕闪烁 但是当对设备前景位图作拖动、缩放、镜像处理时,会不断的刷新屏幕,由于直接在屏幕上绘制图形需要一定的时间,如此频繁的更新屏幕,产生了严重的闪烁现象。这是在动画显示时也常遇到的难题。产生屏幕闪烁的原因是:每次用户需要刷新屏幕时,一般是强制调用Invalidate函数,致使Windows产生两个消息,一个是WM_ERASEBKGND消息,另一个是WM_PAINT消息。窗口收到WM_ERASEBKGND消息后,利用窗口背景刷子对窗口的失效区域进行填充;收到WM_PAINT消息后,调用视图类的消息处理函数OnPaint,而在OnPaint内部调用OnDraw函数

14、,进行绘图操作,完成视图的刷新。在不断更新窗口过程中,系统反复发送这两个消息,窗口背景反复被擦除和绘制,这正是产生闪烁现象的根源。解决屏幕闪烁的方法最常用的有两种,一种是在屏幕刷新的时候尽可能减小失效区域的大小,即先确定需要刷新区域的大小,然后调用InvalidateRect函数代替Invalidate函数使每次只更新需要更新的部分,这样可以降低屏幕闪烁带来的影响,但这并不能从根本上解决屏幕闪烁。另一种方法是利用双缓冲技术,即先将GDI(Windows的图形设备接口)的绘图操作绘制到内存中的一幅位图里,然后将此位图由内存复制到显示设备上进行显示,并且截获WMERASEBKGND消息,不让其进行

15、背景擦除操作,而是利用位图背景刷子填充背景,这种方法可以完全消除屏幕闪烁现象。根据双缓冲技术的原理,为简化操作过程将其封装成一个内存DC类CMemDC,在此类的构造函数中加入创建兼容内存DC和兼容位图的代码,并确定失效区的大小,而在其析构函数中加入将位图拷贝到显示DC进行显示的操作,这样便能自动实现上述操作。4透明处理Windows的位图都是规则的矩形,然而,实际的设备图形或流向线却大多是不规则的,这就引出一个问题:当把这幅位图往背景图中贴入的时候,使这幅规则的矩形位图中除了所需显示的图形外其余地方都显示为透明色,从而使之融入背景。对图形进行透明化处理主要有三种方法,一种是逐点绘图法,二为直接

16、写屏法,三是光栅操作。由于逐点绘图法效率较低,直接写屏法编程较复杂,所以采用简单易操作的光栅处理。这里使用可以对指定的源设备描述表中的矩形区域内像素的颜色数据进行位块转换并将结果值置于目标设备描述表中的TransparentBlt函数,其原型如下:BOOL TransparentBlt( HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest,int hHeightDest,HDC hdcSrc, int nXOriginSrc,int nYOriginSrc,int nWidthSrc, int nHeightSrc,

17、UINT crTransparent );HdcDest为指向目标设备环境的句柄,nXOriginDest,nYOriginDest,nWidthDest,nHeightDest分别为目标矩形的左上角X、Y轴坐标,宽度,高度;hdcsrc为指向源设备环境的句柄;nXOriginSrc,nYOriginSrc,nWidthSrc,nHeight为指定源矩形的左上角的X,Y轴坐标,宽度及高度;crTransparent将源位图RGB值当作透明色。文中设备位图背景色为白色,RGB值(255,255,255)。TransparentBlt函数支持源位图的所有格式。如果源矩形和目标矩形大小不一致,将对源

18、位图进行拉伸使之与目标矩形匹配。但源位图或者目标位图的宽度或高度为负值时函数TransparentBlt将不对位图进行镜像操作,为此需修正MyRect类的成员函数DrawRect中的光栅操作函数StretchBlt的坐标值。这里进行一个判断,当宽度或高度小于零时调整目标矩形坐标使nWidth与nHeight为正值从而使TransparentBlt函数支持镜像操作的透明显示。5结束语本文采用VC6.0成功实现了监控软件流程图界面的组态功能,解决了屏幕刷新时遇到的屏幕闪烁问题并给出对图像进行透明处理的简单易实现的光栅操作法。本文中采用的方法已经在实际工程中应用,取到了较好的效果。参考文献:1 Da

19、vid Iseminger. Microsoft Win32 Developers Reference LibraryM.前导工作室译.北京:机械工业出版社,20012 D J.Kruglinski, S. Wingo, G.Shepherd等著. Visual C+6.0 技术内幕M.希望图书创作室译.北京:北京希望电子出版社,20003 张旭明, 徐滨士, 董世运等. 同一窗口中文本与位图动态显示的VC+实现方法. 计算机应用.第23卷第二期作者简介:史京玲,(1975-),女,山西省阳泉人,在读硕士,主要从事计算机过程控制方面的研究。刘旺开,男,湖南省茶陵县人,教授,主要从事控制理论与控制工程方面的研究。 白 涛,男,北京市人,工程师,主要从事测量及计算机控制方面的研究。联系电话:010-82317525, 13693043070 Email:universeshi(100083 北京航空航天大学 航空科学与工程学院 流体所) 刘旺开 (100083, BeiHang University, Aeronautics Science and Engineering School, LiutiSuo) Liu Wangkai4 / 4

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!