编程实习心得 来公司实习已一个多月了,在这段时间里,我主要学习EVC下的MFC编程,下面主要谈谈学习的经验以及心得体会。 在编程过程中遇到了较多的问题,解决问题的过程是漫长而艰苦的,然而在问题得到解决的一刹那是很快乐的。在此举出数个例子与大家分享: 1. 音乐播放—>滚动条的绘制 在开始绘制滚动条的时候,为了简便以及缩短开发时间,我打算直接从VC默认的标准滚动条CScrollBar派生,然后对其进行所有者自绘(Owrner Draw),将图片贴上去,然而CScrollBar并不如CButton般好绘制,在经过近一天的尝试后始终无果,很是烦躁,后来在听从陈曦老师的建议后,决定还是从CStatic派生自绘,然后再加上一些鼠标、键盘的相应消息响应处理函数以实现滚动条的功能。 在确定这一思路后,我便开始着手代码的实现:首先实现了一个图片绘制函数LoadBitmapToScroll(),用于将滚动条的滑块、上下箭头以及滚动条底色画到确定的区域。由于滑块的位置会不断的发生变化,因此将不能简单地将滚动条底色先画好,然后将滑块放到某一固定位置,因此我定义了一个类成员变量nThumbTop用于确定滑块顶部到滚动条顶部的距离并截取了一小块滚动条底色将其填充到滑块到两侧箭头的所有区域以实现滚动条的变化。然后捕获WM_PAINT消息调用LoadBitmapToScroll()使对窗口进行重绘时将滚动条显示出来。这样当创建一个滚动条对象的时候,便能够将其简单地显示出来了。 要响应用户的外部输入,则只需要捕获消息即可,比如WM_LBUTTONDOWN便可以判断是否有鼠标左键按下并可通过鼠标位置判断点击的是向上的箭头、向下的箭头还是滑块。另外由于滚动条是不独立存在的,它一般会与一个窗口做伴,比如列表以控制其显示内容或区域。因此,我在滚动条类中定义了一个pList指针变量指向滚动条要控制的窗口对象,在鼠标点击滚动条的上下箭头时,通过向pList指向的对象发送WM_VSCROLL消息以控制窗口区域的上翻或下翻。 如此,一个具有美观界面及基本功能的滚动条大体上已经实现了。整个滚动条的绘制耗费了将近两天时间,尽管时间较长,但还是受益匪浅,整个绘制过程让我明白了:“一切皆有可能”,没有什么是不能实现的,只要它在现实生活中存在,很多东西表面上看起来很复杂,就象这个自定义的滚动条,只要将其功能进行分解然后一步步实现便可以了。 2. 透明文字的实现 由于嵌入式系统的特殊性,EVC并不具备VC的所有功能,透明文字的输出就是其中一例。VC下只要简单地通过SetBkmode(TRANSPARENT),然后在控件窗口区域内获取设备上下文DC,通过该DC调用DrawText()即可将想要显示的文字在给定位置显示,然而EVC在CStatic、CListBox等一般控件下设置背景为透明色是不可行的,在纠缠了数个小时后,发现EVC虽然不能简单地设置背景模式为透明,却可以设置背景颜色为一给定的颜色,最后还是采用“先截取背景颜色,然后绘制文字,最后以原背景色设置为背景色”的方式解决。即: dc.SetBkColor( COLORREF ); //设置背景颜色 dc.SetTextColor(COLORREF ); //设置字体颜色 dc.DrawText( … ); // 绘制文字 3. 模块功能的设计 在软件设计的过程中,我深刻地体会到:一个模块对扩展是开放的,对修改是关闭的。在刚开始编程的时候,只是简单地将一些应该实现的功能予以实现,以致于后来在得知UI有所变化时又得重新编写代码浪费了较多时间,因此在进行软件设计的时候必须考虑到软件需求是一直在变更的。同时应当优先使用聚合,而不是继承,否则就会出现类层次很深的问题,从而造成所谓的类爆炸。比如:在我进行各类自定义控件的设计过程中,将一些类剥离开来,在使用的时候直接定义各个类对象便可,从而避免了类层次过深的现象。 总而言之,来公司的这个月,是我最充实的一个月,在这里学会的不仅仅是EVC的MFC编程技能,更重要的是我学会了如何学习,体会到了一个产品应有的严谨(界面美观、功能强大以及差错率较小等)以及产品开发过程中问题考虑的周到充分。 在这里我要感谢大家一个月对我无微不至的关怀与帮助!再次感谢! (责任编辑:我爱实习报告) |