程式設計實習心得

才智咖 人氣:2.95W

程式設計實習心得

程式設計實習心得

來公司實習已一個多月了,在這段時間裡,我主要學習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雖然不能簡單地設定背景模式為透明,卻可以設定背景顏色為一給定的顏色,最後還是採用“先擷取背景顏色,然後繪製文字,最後以原背景色設定為背景色”的方式解決。即:

kColor( COLORREF );         //設定背景顏色

extColor(COLORREF );        //設定字型顏色

Text( … );                 // 繪製文字

3.       模組功能的設計

在軟體設計的過程中,我深刻地體會到:一個模組對擴充套件是開放的,對修改是關閉的。在剛開始程式設計的時候,只是簡單地將一些應該實現的功能予以實現,以致於後來在得知UI有所變化時又得重新編寫程式碼浪費了較多時間,因此在進行軟體設計的時候必須考慮到軟體需求是一直在變更的。同時應當優先使用聚合,而不是繼承,否則就會出現類層次很深的問題,從而造成所謂的類爆炸。比如:在我進行各類自定義控制元件的設計過程中,將一些類剝離開來,在使用的時候直接定義各個類物件便可,從而避免了類層次過深的現象。

總而言之,來公司的這個月,是我最充實的一個月,在這裡學會的不僅僅是EVC的MFC程式設計技能,更重要的是我學會了如何學習,體會到了一個產品應有的嚴謹(介面美觀、功能強大以及差錯率較小等)以及產品開發過程中問題考慮的周到充分。

在這裡我要感謝大家一個月對我無微不至的關懷與幫助!再次感謝!