編程實(shí)習心得
編程實(shí)習心得

來(lái)公司實(shí)習已一個(gè)多月了,在這段時(shí)間里,我主要學(xué)習EVC下的MFC編程,下面主要談?wù)剬W(xué)習的經(jīng)驗以及心得體會(huì )。
在編程過(guò)程中遇到了較多的問(wèn)題,解決問(wèn)題的過(guò)程是漫長(cháng)而艱苦的,然而在問(wèn)題得到解決的一剎那是很快樂(lè )的。在此舉出數個(gè)例子與大家分享:
1. 音樂(lè )播放—>滾動(dòng)條的繪制
在開(kāi)始繪制滾動(dòng)條的時(shí)候,為了簡(jiǎn)便以及縮短開(kāi)發(fā)時(shí)間,我打算直接從VC默認的標準滾動(dòng)條CScrollBar派生,然后對其進(jìn)行所有者自繪(Owrner Draw),將圖片貼上去,然而CScrollBar并不如CButton般好繪制,在經(jīng)過(guò)近一天的嘗試后始終無(wú)果,很是煩躁,后來(lái)在聽(tīng)從陳曦老師的建議后,決定還是從CStatic派生自繪,然后再加上一些鼠標、鍵盤(pán)的相應消息響應處理函數以實(shí)現滾動(dòng)條的功能。
在確定這一思路后,我便開(kāi)始著(zhù)手代碼的實(shí)現:首先實(shí)現了一個(gè)圖片繪制函數LoadBitmapToScroll(),用于將滾動(dòng)條的滑塊、上下箭頭以及滾動(dòng)條底色畫(huà)到確定的區域。由于滑塊的位置會(huì )不斷的發(fā)生變化,因此將不能簡(jiǎn)單地將滾動(dòng)條底色先畫(huà)好,然后將滑塊放到某一固定位置,因此我定義了一個(gè)類(lèi)成員變量nThumbTop用于確定滑塊頂部到滾動(dòng)條頂部的距離并截取了一小塊滾動(dòng)條底色將其填充到滑塊到兩側箭頭的所有區域以實(shí)現滾動(dòng)條的變化。然后捕獲WM_PAINT消息調用LoadBitmapToScroll()使對窗口進(jìn)行重繪時(shí)將滾動(dòng)條顯示出來(lái)。這樣當創(chuàng )建一個(gè)滾動(dòng)條對象的時(shí)候,便能夠將其簡(jiǎn)單地顯示出來(lái)了。
要響應用戶(hù)的外部輸入,則只需要捕獲消息即可,比如WM_LBUTTONDOWN便可以判斷是否有鼠標左鍵按下并可通過(guò)鼠標位置判斷點(diǎn)擊的是向上的箭頭、向下的箭頭還是滑塊。另外由于滾動(dòng)條是不獨立存在的,它一般會(huì )與一個(gè)窗口做伴,比如列表以控制其顯示內容或區域。因此,我在滾動(dòng)條類(lèi)中定義了一個(gè)pList指針變量指向滾動(dòng)條要控制的窗口對象,在鼠標點(diǎn)擊滾動(dòng)條的上下箭頭時(shí),通過(guò)向pList指向的對象發(fā)送WM_VSCROLL消息以控制窗口區域的上翻或下翻。
如此,一個(gè)具有美觀(guān)界面及基本功能的滾動(dòng)條大體上已經(jīng)實(shí)現了。整個(gè)滾動(dòng)條的繪制耗費了將近兩天時(shí)間,盡管時(shí)間較長(cháng),但還是受益匪淺,整個(gè)繪制過(guò)程讓我明白了:“一切皆有可能”,沒(méi)有什么是不能實(shí)現的,只要它在現實(shí)生活中存在,很多東西表面上看起來(lái)很復雜,就象這個(gè)自定義的滾動(dòng)條,只要將其功能進(jìn)行分解然后一步步實(shí)現便可以了。
2. 透明文字的實(shí)現
由于嵌入式系統的特殊性,EVC并不具備VC的所有功能,透明文字的輸出就是其中一例。VC下只要簡(jiǎn)單地通過(guò)SetBkmode(TRANSPARENT),然后在控件窗口區域內獲取設備上下文DC,通過(guò)該DC調用DrawText()即可將想要顯示的文字在給定位置顯示,然而EVC在CStatic、CListBox等一般控件下設置背景為透明色是不可行的,在糾纏了數個(gè)小時(shí)后,發(fā)現EVC雖然不能簡(jiǎn)單地設置背景模式為透明,卻可以設置背景顏色為一給定的顏色,最后還是采用“先截取背景顏色,然后繪制文字,最后以原背景色設置為背景色”的方式解決。即:
dc.SetBkColor( COLORREF ); //設置背景顏色
dc.SetTextColor(COLORREF ); //設置字體顏色
dc.DrawText( … ); // 繪制文字
3. 模塊功能的設計
在軟件設計的過(guò)程中,我深刻地體會(huì )到:一個(gè)模塊對擴展是開(kāi)放的,對修改是關(guān)閉的。在剛開(kāi)始編程的時(shí)候,只是簡(jiǎn)單地將一些應該實(shí)現的功能予以實(shí)現,以致于后來(lái)在得知UI有所變化時(shí)又得重新編寫(xiě)代碼浪費了較多時(shí)間,因此在進(jìn)行軟件設計的時(shí)候必須考慮到軟件需求是一直在變更的。同時(shí)應當優(yōu)先使用聚合,而不是繼承,否則就會(huì )出現類(lèi)層次很深的問(wèn)題,從而造成所謂的類(lèi)爆炸。比如:在我進(jìn)行各類(lèi)自定義控件的設計過(guò)程中,將一些類(lèi)剝離開(kāi)來(lái),在使用的時(shí)候直接定義各個(gè)類(lèi)對象便可,從而避免了類(lèi)層次過(guò)深的現象。
總而言之,來(lái)公司的這個(gè)月,是我最充實(shí)的一個(gè)月,在這里學(xué)會(huì )的不僅僅是EVC的MFC編程技能,更重要的是我學(xué)會(huì )了如何學(xué)習,體會(huì )到了一個(gè)產(chǎn)品應有的嚴謹(界面美觀(guān)、功能強大以及差錯率較小等)以及產(chǎn)品開(kāi)發(fā)過(guò)程中問(wèn)題考慮的周到充分。
在這里我要感謝大家一個(gè)月對我無(wú)微不至的關(guān)懷與幫助!再次感謝!
【編程實(shí)習心得】相關(guān)文章:
編程崗位的實(shí)習心得范文09-21
編程實(shí)習心得體會(huì )08-14
軟件編程實(shí)習周記08-21
數控編程的實(shí)習報告參考08-02
編程培訓心得體會(huì )02-10
計算機編程實(shí)習報告范文03-14
編程簡(jiǎn)歷09-20