VC环境下监控软件流程图界面的开发TheDevelopmentofFlowInterfaceforMonitoringSoftwareBasedonVC史京玲刘旺开白涛SHI激ngling,LIUWangkai,BAITao摘要:文章介绍了在Windows平台下,利用VisualC++工具实现对位图的拖动、缩放、镜像操作,解决屏幕闪烁和透明处理问题,来开发监控软件流程图界面的过程。关键词:位图操作,屏幕闪烁,透明处理,组态:TP39文献标识码:AAbstract:BasedonWindowssystem,thisintroducestherealizationprocessofsoftwareflowinterfaceformonitoringbytheVisualC++.Themainbitmapoperationofthisinterfaceincludesdragging,zoomingandmirrorimage.Theproblemsoftransparentdisposalandscreenflickeraresolvedtoo.Keywords:bitmapoperation,screenflicker,transparencedisposal,configuration目前,计算机测控系统在工业领域中的应用越来越广泛。由于现有的组态软件是一种通用性软件,不但价格昂贵,而且针对具体项目的某些特殊要求又无法满足,所以采用界面友好、可靠方便的VisualC++作为测控系统软件开发平台。开发测控系统软件在完成工业过程实时监控任务外,配以灵活友善的人机界面,才能有更高的实用价值。监控子系统作为测控系统的用户界面部分,是与用户交互的窗口,其可视化的程度决定着软件的受欢迎程度。为了真实的显示现场的运行环境,需要把工艺流程图、实时控制状态等内容直观的显示在屏幕上。用绘图软件生成具有立体效果的流程图及常用控制设备,再用程序载入编辑或操作大大简化了编程工作并节省了时间。这就必须解决位图编辑的灵活方便性、屏幕刷新闪烁、透明处理等问题。1.创建流程图界面为了使监控系统流程图界面更生动直观,选用组态王或3Dmax绘制出有立体感的图像,之后将图像存成BMP格式作为背景位图。位置状态常需更改的控制设备如阀门等另行绘制,作为前景位图编辑。位图(bitmap,位映象)分为设备相关位图DDB(Device-DependentBitmap)和设备无关位图DIB(Device-IndependentBitmap)。Windows9X以后的版本支持DIB位图。DIB位图包含一个颜色表,颜色用于描述像素的颜色值如何对应RGB值。DIB文件的格式被设计成能确保使用一个应用程序创建的位映像的图像,可以在另一个应用程序中被装载和显示且保持和原始图像一致的外观,通常以BMP或DIB为文件后缀(本文中选用BMP格式位图)。我们知道,向屏幕绘图前必须先获得设备环境DC(Devicecontext)。所谓DC就是绘图用的“画布”,可以指显示器的屏幕也可以是与屏幕绘图环境相兼容的内存绘图环境(即Windows系统所谓的内存DC)。通过CreateCompatibleDC函数来创建与屏幕DC兼容的内存DC,调用SelectObject函数将背景位图选入DC,当应用程序将指向DC的句柄传递给一个图形设备接口(GDI,GraphicDeviceInterface)的画图函数时,流程界面背景位图显示在屏幕上。这里采用可以设置指定设备环境中位图拉伸模式的函数StretchBlt,其函数原型如下:BOOLStretchBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,intnSrcWidth,intnSrcHeight,DWORDdwRop);其中参数x,y,nWidth,nHeight为目标矩形位置及大小,pSrcDC为资源设备环境,xSrc,ySrc,nSrcWidth,nSrcHeight为资源矩形位置及大小。当资源矩形nSrcWidth与目标矩形nWidth参数不同,则沿x轴创建镜像,若资源矩形nSrcHeight与目标矩形nHeight参数不同,则沿y轴创建镜像。用同样的方法将设备前景位图输出,但这样远不能满足实际工程界面灵活实用性,所以还需继续解决位图编辑灵活性、屏幕闪烁、透明处理这三个问题。2.实现对前景位图操作功能如下图1所示试验段工况中,排气系统与低压系统阀门安装方位不同,为设备前景位图(阀门)经缩小并沿对角线方向镜像处理后拖移至排气系统管路上。由于现场调试可能需要变更测点个数及位置从而导致调整流程图界面上常用设备位置,所以监控软件界面部分的开发必须实现对前景位图编辑的灵活操作。图1监控软件流程图界面(低压部分)这里可以调用Windows封装的CRectTracker类。CrectTracker类无基类,它允许用户在一个视图窗口中移动或者改变矩形对象大小。该类有两个重要数据成员:m_nStyle成员决定...