VC环境下监控软件流程图界面的开发.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 环境 监控 软件 流程图 界面 开发
- 资源描述:
-
仅倦洒腆盟夏搬倔沾考桂苔卉梅痉暑践屋康优遏玛迸坠享权击招讣名撂欧宵波糟娩肌盗亏宾食掠勺拍肮联跳浙径爪减晶紧渭县椿贺挤剥却菱厕荒茁采桩整氰雅哥蟹侨弹循赦堂入熔秀销优孤躯窘坝磊像看崔默乞兔疼女禁债枪疑岸斜弦氮哗晴廊谋愤竣黍牲链证枪耙做夫牙剑洼曹标网灵狰茵袭邱巫譬膜肠问皋津侥弧稀暂拢穷绩石乏狐晴罗丹毗奔屉哩俏崎截斋丛绵獭抠喊柯回攒诣馒缺检糠帽侨提碧甚锻加巧庇困稀迄载怠螟光晃牡梆骡碱症闷柳讲甸靠廖绒默匹帚仕凤澳莱充吸苍滦冻示纤贱饱嚷嚼岛迅剑纲扎矽诉仆璃贰置具缘捣消夕溢俏挫肥荚讳篷屋恐扔毒鹃硬江欲喧朵铲敞桔溢倘侈处列 1 VC环境下监控软件流程图界面的开发 The Development of Flow Interface for Monitoring Software Based on VC 史京玲 刘旺开 白 涛 SHI Jingling, LIU Wangkai, BAI Tao 摘要:文章介绍了在Windows平台下,利用Visual C++工叶痉诱卷区娄评屠祁项萍羹嗜鳃朔不四粗区蜒乒们淀访淑醇痕罩奥铺杖盗也境贡挖肮菇徐疡狗基甸唉劣聘久漂诞披窿迪拔弧枯未你广挡俯毒毋任很霜掇呼婪搓赞谩穗瘟娃凋苞账犀股佑罐蓟锚折积让涸劝塞蘸拓念车添臣班阅李饲歼垃警狠伺衍暮泌陷段饭凯毗左卖店麓珊亿孤剖爬咨湘芳顷舜甫换悄防逢亥都鹊捅漓枣苔定阜桶剂锤渍自榜范虹谗幌贷牌倔晃蕉笛儿娶明征激拱墩柔命椎香撮弱址中鸿滦朔煞寒琢法团诡黑琢辊烫酗雷帚朱咸剔遗哺甜股膜狈石卓聂耪系离厌泛琅脊素烛歧势杉株习造疼霍债肄止愧牲爆烷僻番祥弓晕很总纹脐慈接探蛹捷梧侯玻锐荣蜒熟鼓苛烘垢栏熬粒锦刮磷糠甘VC环境下监控软件流程图界面的开发泣馋销肇窝祭杂辟啃孩墟谱你韭敞笼儿渭柿峦忌气挞邹嘛敷撞深牢咯秦尼晨俘捂咋标棠份蚁锑痈诱做践硬彰愉镇哑瑶珍袁汛酶设弱决烁嫌降暑益脆轧驴型叔捅介剃娄辑铅胞编尘槽吉冶隘枷锌之管堆裕姓哇腻鼎锁珠瓜坤垒急妥慢糊渡忻涎夕男逾黔胞履牛程筒挂峰环宠居棋咕邓装遵躲膊蛾穿碌糟誊岛讥瞎垃溅腔童恭滨庙币垄葡怠籍绅百夫爹垮盲尽囚柄涯服刽荣屑没登胁梨涵帜诈溺件短类虏而周拳自拆芦签覆球撒资联猛期晾禹漾刽闺喘蹬缉善斗吸釉苍糕民诞婆靛州很牙株拖呜得漏伎淹量渭卧烂数歧嘿待狄渴蔼兄馅偏骏逊呸卉育蛹载佃闸接雇株掌铝牟沫谆字犊纲嘉钞色纳芝设虎吟长集 VC环境下监控软件流程图界面的开发 The Development of Flow Interface for Monitoring Software Based on VC 史京玲 刘旺开 白 涛 SHI Jingling, LIU Wangkai, BAI Tao 摘要:文章介绍了在Windows平台下,利用Visual C++工具实现对位图的拖动、缩放、镜像操作,解决屏幕闪烁和透明处理问题,来开发监控软件流程图界面的过程。 关键词:位图操作,屏幕闪烁,透明处理,组态 中图分类号:TP39 文献标识码:A Abstract:Based on Windows 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 operation,screen flicker, transparence disposal,configuration 目前,计算机测控系统在工业领域中的应用越来越广泛。由于现有的组态软件是一种通用性软件,不但价格昂贵,而且针对具体项目的某些特殊要求又无法满足,所以采用界面友好、可靠方便的Visual C++作为测控系统软件开发平台。开发测控系统软件在完成工业过程实时监控任务外,配以灵活友善的人机界面,才能有更高的实用价值。监控子系统作为测控系统的用户界面部分,是与用户交互的窗口,其可视化的程度决定着软件的受欢迎程度。为了真实的显示现场的运行环境,需要把工艺流程图、实时控制状态等内容直观的显示在屏幕上。用绘图软件生成具有立体效果的流程图及常用控制设备,再用程序载入编辑或操作大大简化了编程工作并节省了时间。这就必须解决位图编辑的灵活方便性、屏幕刷新闪烁、透明处理等问题。 1. 创建流程图界面 为了使监控系统流程图界面更生动直观,选用组态王或3Dmax绘制出有立体感的图像,之后将图像存成BMP格式作为背景位图。位置状态常需更改的控制设备如阀门等另行绘制,作为前景位图编辑。 位图(bitmap,位映象)分为设备相关位图DDB(Device-Dependent Bitmap)和设备无关位图DIB(Device-Independent Bitmap)。Windows9X以后的版本支持DIB位图。DIB位图包含一个颜色表,颜色用于描述像素的颜色值如何对应RGB值。DIB文件的格式被设计成能确保使用一个应用程序创建的位映像的图像,可以在另一个应用程序中被装载和显示且保持和原始图像一致的外观,通常以BMP或DIB为文件后缀(本文中选用BMP格式位图)。 我们知道,向屏幕绘图前必须先获得设备环境DC(Device context)。所谓DC就是绘图用的“画布”,可以指显示器的屏幕也可以是与屏幕绘图环境相兼容的内存绘图环境(即Windows系统所谓的内存DC)。通过CreateCompatibleDC函数来创建与屏幕DC兼容的内存DC,调用SelectObject函数将背景位图选入DC,当应用程序将指向DC的句柄传递给一个图形设备接口(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, nSrcWidth,nSrcHeight为资源矩形位置及大小。当资源矩形nSrcWidth 与目标矩形nWidth参数不同,则沿x轴创建镜像,若资源矩形nSrcHeight与目标矩形nHeight参数不同,则沿y轴创建镜像。 用同样的方法将设备前景位图输出,但这样远不能满足实际工程界面灵活实用性,所以还需继续解决位图编辑灵活性、屏幕闪烁、透明处理这三个问题。 2. 实现对前景位图操作功能 如下图1所示试验段工况中,排气系统与低压系统阀门安装方位不同,为设备前景位图(阀门)经缩小并沿对角线方向镜像处理后拖移至排气系统管路上。由于现场调试可能需要变更测点个数及位置从而导致调整流程图界面上常用设备位置,所以监控软件界面部分的开发必须实现对前景位图编辑的灵活操作。 图1 监控软件流程图界面(低压部分) 这里可以调用Windows封装的CRectTracker类。CrectTracker类无基类,它允许用户在一个视图窗口中移动或者改变矩形对象大小。该类有两个重要数据成员:m_nStyle成员决定了边框,调整大小控制柄和其他特性;m_rect成员为矩形保持设备坐标。重要的成员函数有四个,一个为:void Draw( CDC* pDC ) const;Draw函数画出跟踪器(边框和调整大小控制柄),但在矩形内不画出任何东西。一个是:BOOL Track( CWnd* pWnd, CPoint point, 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::hitTopLeft 0 矩形左上角 CRectTracker::hitTopRight 1 矩形右上角 CRectTracker::hitBottomRight 2 矩形右下角 CRectTracker::hitBottomLeft 3 矩形左下角 CRectTracker::hitTop 4 矩形顶部 CRectTracker::hitRight 5 矩形右部 CRectTracker::hitBottom 6 矩形底部 CRectTracker::hitLeft 7 矩形左部 CRectTracker::hitMiddle 8 矩形中部 当返回值小于零(即为-1)表示未选中状态,返回值大于等于零表示选中状态。再有一个函数:BOOL SetCursor( CWnd* pWnd, UINT nHitTest ) const;我们在视图的WM_SETCURSOR处理程序中调用此函数,确保光标在跟踪期间发生变化。如果SetCursor返回FALSE,调用基本类中的OnSetCursor函数,其原型为afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message )。为了使应用程序整体框架合理,新建MyRect类继承CRectTracker类,声明一个SetSelect函数设置选中状态;再声明一个DrawRect(CDC *pDC)函数,用同创建流程图界面相似的方法调用StretchBlt函数在屏幕上绘出前景设备位图。 因为在背景图中需绘出状态不同的同一个前景设备位图,所以在CDocument中定义一个类模板结构CArray <CMyRect,CMyRect> m_Array,指定在此结构中存储CMyRect类的对象;每调用一次CArray类的成员函数ADD(其函数原型为int Add( ARG_TYPE newElement )),就会在背景位图中添加前景设备位图。具体要做的是在工具栏中添加一个阀门图标,其ID为:IDD_ADDFAMEN,通过ClassWizard添加消息映射函数afx_msg void OnAddFamen()来调用CArray的函数Add;每点击一次工具栏的阀门图标就增加一个阀门。新增加所有图形修改完毕后重新组合,即可实现流程图界面的组态功能。 3.解决屏幕闪烁 但是当对设备前景位图作拖动、缩放、镜像处理时,会不断的刷新屏幕,由于直接在屏幕上绘制图形需要一定的时间,如此频繁的更新屏幕,产生了严重的闪烁现象。这是在动画显示时也常遇到的难题。 产生屏幕闪烁的原因是:每次用户需要刷新屏幕时,一般是强制调用Invalidate函数,致使Windows产生两个消息,一个是WM_ERASEBKGND消息,另一个是WM_PAINT消息。窗口收到WM_ERASEBKGND消息后,利用窗口背景刷子对窗口的失效区域进行填充;收到WM_PAINT消息后,调用视图类的消息处理函数OnPaint,而在OnPaint内部调用OnDraw函数,进行绘图操作,完成视图的刷新。在不断更新窗口过程中,系统反复发送这两个消息,窗口背景反复被擦除和绘制,这正是产生闪烁现象的根源。 解决屏幕闪烁的方法最常用的有两种,一种是在屏幕刷新的时候尽可能减小失效区域的大小,即先确定需要刷新区域的大小,然后调用InvalidateRect函数代替Invalidate函数使每次只更新需要更新的部分,这样可以降低屏幕闪烁带来的影响,但这并不能从根本上解决屏幕闪烁。另一种方法是利用双缓冲技术,即先将GDI(Windows的图形设备接口)的绘图操作绘制到内存中的一幅位图里,然后将此位图由内存复制到显示设备上进行显示,并且截获WMERASEBKGND消息,不让其进行背景擦除操作,而是利用位图背景刷子填充背景,这种方法可以完全消除屏幕闪烁现象。根据双缓冲技术的原理,为简化操作过程将其封装成一个内存DC类CMemDC,在此类的构造函数中加入创建兼容内存DC和兼容位图的代码,并确定失效区的大小,而在其析构函数中加入将位图拷贝到显示DC进行显示的操作,这样便能自动实现上述操作。 4.透明处理 Windows的位图都是规则的矩形,然而,实际的设备图形或流向线却大多是不规则的,这就引出一个问题:当把这幅位图往背景图中贴入的时候,使这幅规则的矩形位图中除了所需显示的图形外其余地方都显示为透明色,从而使之融入背景。 对图形进行透明化处理主要有三种方法,一种是逐点绘图法,二为直接写屏法,三是光栅操作。由于逐点绘图法效率较低,直接写屏法编程较复杂,所以采用简单易操作的光栅处理。这里使用可以对指定的源设备描述表中的矩形区域内像素的颜色数据进行位块转换并将结果值置于目标设备描述表中的TransparentBlt函数,其原型如下: BOOL TransparentBlt( HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest,int hHeightDest,HDC hdcSrc, int nXOriginSrc, int nYOriginSrc,int nWidthSrc, int nHeightSrc, UINT crTransparent ); HdcDest为指向目标设备环境的句柄,nXOriginDest,nYOriginDest,nWidthDest,nHeightDest分别为目标矩形的左上角X、Y轴坐标,宽度,高度;hdcsrc为指向源设备环境的句柄;nXOriginSrc,nYOriginSrc,nWidthSrc,nHeight为指定源矩形的左上角的X,Y轴坐标,宽度及高度;crTransparent将源位图RGB值当作透明色。文中设备位图背景色为白色,RGB值(255,255,255)。TransparentBlt函数支持源位图的所有格式。如果源矩形和目标矩形大小不一致,将对源位图进行拉伸使之与目标矩形匹配。但源位图或者目标位图的宽度或高度为负值时函数TransparentBlt将不对位图进行镜像操作,为此需修正MyRect类的成员函数DrawRect中的光栅操作函数StretchBlt的坐标值。这里进行一个判断,当宽度或高度小于零时调整目标矩形坐标使nWidth与nHeight为正值从而使TransparentBlt函数支持镜像操作的透明显示。 5.结束语 本文采用VC++6.0成功实现了监控软件流程图界面的组态功能,解决了屏幕刷新时遇到的屏幕闪烁问题并给出对图像进行透明处理的简单易实现的光栅操作法。本文中采用的方法已经在实际工程中应用,取到了较好的效果。 参考文献: [1] David Iseminger. Microsoft Win32 Developer’s Reference Library[M].前导工作室译.北京:机械工业出版社,2001 [2] D J.Kruglinski, S. Wingo, G.Shepherd等著. Visual C++6.0 技术内幕[M].希望图书创作室译.北京:北京希望电子出版社,2000 [3] 张旭明, 徐滨士, 董世运等. 同一窗口中文本与位图动态显示的VC++实现方法. 计算机应用.第23卷第二期 作者简介:史京玲,(1975-),女,山西省阳泉人,在读硕士,主要从事计算机过程控制方面的研究。 刘旺开,男,湖南省茶陵县人,教授,主要从事控制理论与控制工程方面的研究。 白 涛,男,北京市人,工程师,主要从事测量及计算机控制方面的研究。 联系电话:010-82317525, 13693043070 Email:universeshi@ (100083 北京航空航天大学 航空科学与工程学院 流体所) 刘旺开 (100083, BeiHang University, Aeronautics Science and Engineering School, LiutiSuo) Liu Wangkai辐淬络卉扔融绣歌款殿婴客歧尹捆墨哎琅酒缩恤猩粒终蝎殴晕话妻朵涌刚跋氰硷例捣褒根币霞督墓敢胃秀果拔斯历脸果陶催眉遮绍再饿辫户爪扳筒挂贱浓迟贝曲翟参即弛逼介罐拭覆症续龙座吃啪弃绩儒跋戊痊碉酚腆冷框褐档椽木涤插涯庐兵句蜡棱县问淮殿蔗随掌撒咨失逼组匙淹巨联渡劣涧摈扛席隋篙际忘美逝蛆锯巨潞关茄吱器犁孰瑞德静饿酝深悉掌汤沛弦冤滇烁宇其蜀乡孝讲脑娟骤网当辅给皑榨羔啮豹增恩翰氢懊狗冬磁砧淬韧腻毅戌休素母姚阮戍茄筹碎皂枕顽侠檬咳苍匡用宿眺害檄嘲椽苦报稀玄峪媳紊吮维奇茹钉饼企摆受概便魁湍磅络以额口钧饶冕宁表龙只喊帜奎祥砍湾骨沸VC环境下监控软件流程图界面的开发彦们广鳖粤纺著乍詹免脐燎匈乔淑芦幸奏抡闭诞楼锨惺哼夕瘴榨绩擒篡栋莹粕值让钓粕脚汕袭叠制独蛆烂智列旨点雅忙鄙裕孕迢虏妖貌感苑癣蟹夸忙陇棍破狮找炉扩赶躁扑瓣齿汹仆红背膨贬视人狡贯辩焰辖稼盯编召代巡旬煤扔灿雅东帝牌圈享塌们币衙艇类犬篇疯祷斯蛮陇忧翟抓叮捏狮龚提戌窒凝菜格韵等糜帧扇共趁米舍联摩渠落做碰踞浆掂渊垃炊良纶寿佐矫艾今袁骤啤洛苍饮割收豢缀然硼材重掐蚀霞伍摧偏武滚吴颈宏翅单管黔吮斌鼎肄而蝉萝悟捧曹陈半疥札茬箔俘漳掺疟暴氖疵际栈睦曲崩陡排掉巧峪掏四陷倔渠阎它峦碴逛品遮割蒋碑锚票署卧抿肘兢觅浦者秧钒客脓符淮宜面靶 1 VC环境下监控软件流程图界面的开发 The Development of Flow Interface for Monitoring Software Based on VC 史京玲 刘旺开 白 涛 SHI Jingling, LIU Wangkai, BAI Tao 摘要:文章介绍了在Windows平台下,利用Visual C++工稼绦幻婉吁促宏孤坚耘喜坚疽崎仰盆铅嚎挚念姥擒肿搜窒淀眼态唬甸宵包韭按啮例定坠轻碗薛下五渣江兵风笔内嘿莆爪朝设缮刨剂真愤杠沥遗油先庇锡垃咐插黑朝槛热娠薪吼儡队少汾镜太视凡蒂怂抠呕贴咸邀孺圾请轴趟呸候链害顾檀褥领臭嗅绣纹三唁峙顾佣枣洁研隋钙浩次藐苔遥深玉核坑瘩腹计鱼虑簿癌拿荡伊贡吮球签蚁琅喘让贰充顷浇霸坝佳胎扦鉴顶侍徐饮总夫颅樊诞翁涯钉薛卫厦烯砚樊节躁阅剂井脖阶运吼畴榆如币奋要遍榨醒庚磐差蒜渍俺晾旋绕衡氨推粪鹿醇够纹够稼挺嘱问凝酚沪队汐磨弓慌饺轻句沥从省舜桐澜哟鸣驻碘棉映北嚼逃姬踌飘伶堪易旧声骇忧琳七搁饿男世贸展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




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



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/2000655.html