唐小勇
摘要:任務驅動是一種有效的教學方法,在計算機程序設計類課程教學中具有廣泛應用。本文將通過實例方式介紹任務驅動式教學法在Windows應用程序設計課程中的應用。論文首先提出隨鼠標移動的動態(tài)多彩文字程序設計任務特性,以此為驅動介紹鼠標事件、鼠標位置、文字動態(tài)與彩色效果等Windows 程序實現(xiàn)機制及技巧,最終編程實現(xiàn)此任務。實際教學效果表明此法能有效提高學生的應用程序設計能力。
關鍵詞:任務驅動教學法;Windows API函數(shù);事件處理
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2018)17-0173-02
任務驅動教學法是一種開放式、互動式、目的性與針對性強的教學形式[1]。為實現(xiàn)相應任務,要求學生充分發(fā)揮個體主觀能動性和創(chuàng)造性,使學生在主體認知和獲取知識過程中自然融入教學主導者創(chuàng)立的教學環(huán)境中,從而達到知識的主動獲取、理解與消化[2]。本文將從Windows應用程序設計課程教學為研究對象,探討隨鼠標移動的動態(tài)多彩文字程序設計任務的特性、教學知識點和難點。以此任務為驅動,介紹鼠標事件、鼠標位置、文字動態(tài)與彩色效果實現(xiàn)的Windows 程序實現(xiàn)機制及技巧。以期提高學生的應用程序設計能力。
1 動態(tài)多彩文字任務
本課任務是利用Windows API函數(shù)實現(xiàn)隨鼠標移動的動態(tài)多彩文字,其效果如圖1。程序設計任務要求在Windows Visual Studio集成開發(fā)環(huán)境中利用WIN 32項目來實現(xiàn),其標題為動態(tài)多彩文字。主要效果為鼠標在Windows窗口中隨意移動,文字也跟著移動,文字顏色要求動態(tài)變化。
2 主要知識點介紹
1)鼠標事件及鼠標位置。本任務中涉及使用鼠標,因而要求學生掌握鼠標事,主要包括WM_LBUTTONDOWN:產(chǎn)生單擊鼠標左鍵的消息;WM_LBUTTONUP:放開鼠標左鍵時產(chǎn)生;WM_RBUTTONDOWN:單擊鼠標右鍵時產(chǎn)生;WM_RBUTTONUP:放開鼠標右鍵時產(chǎn)生;WM_LBUTTONDBLCLK:雙擊鼠標左鍵時產(chǎn)生;WM_RBUTTONDBLCLK:雙擊鼠標右鍵時產(chǎn)生;WM_MOUSEMOVE:鼠標移動等。
其次,本程序的文字隨鼠標移動而移動,因而必須確定鼠標位置。一種方法是利用鼠標事件,其中參數(shù)lParam低字節(jié)包含當前光標的X坐標值,用LOWORD(lParam)實現(xiàn);高字節(jié)包含當前光標的Y坐標值,用HIWORD(lParam)編程。鼠標事件wParam包含整數(shù)值以標識鼠標鍵的按鍵狀態(tài),其中MK_LBUTTON為按下鼠標左鍵;MK_MBUTTON鼠標中鍵;MK_RBUTTON為鼠標右鍵。鼠標位置的第二種方法是利用Windows API函數(shù)BOOL GetCursorPos(LPPOINT lpPoint),其中l(wèi)pPoint為包含X軸和Y軸坐標值的結構體指針。此函數(shù)獲取光標的位置通常以屏幕坐標形式給出,但不受包含該光標所在窗口映射模式所造成的影響。
2)文字動態(tài)效果。這里需要定時器進行動態(tài)顯示,因而課程教學需要講解定時器程序設計基本方法,如圖2所示。應用程序首先在WM_CREATE消息事件中利用Windows API函數(shù)UINT_PTR SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT nElapse, TIMERPROC lpTimerFunc)設置時間間隔為nElapse毫秒的定時器。如nElapse=200,即定時器每隔0.2秒發(fā)出一條WM_TIMER消息事件。WM_TIMER事件處理主要調用InvalidateRect API函數(shù)發(fā)出WM_PAINT消息事件,要求系統(tǒng)重新刷新用戶區(qū),從而實現(xiàn)文字的動態(tài)顯示效果。
3)文字彩色效果。Windows應用程序使用宏RGB定義繪圖顏色,其形式為RGB(nRed, nGreen,nBlue)。如藍色值,RGB(0,0,255)。本程序為實現(xiàn)各種動態(tài)色彩,聲明顏色數(shù)組int color[11],并使用文本前景色設置API函數(shù)COLORREF SetTextColor( _In_ HDC hdc,_In_ COLORREF crColor)。本程序具體多彩文字效果用SetTextColor(hdc,RGB(255-color[i],color[i],255))實現(xiàn)。
3 編程實現(xiàn)
本任務效果主要在WM_PAINT消息事件處理中實現(xiàn)。程序首先利用API函數(shù)GetCursorPos(&pt;)獲得當前光標位置,利用for(i=0;i<11;i++){x[i]=pt.x+(i-1)*40;y[i]=pt.y;}循環(huán)實現(xiàn)每個文字初始顯示位置的設定。動態(tài)顯示過程中各文字的相互關系是前顯示文字位置變?yōu)楹罄m(xù)顯示文字位置,主要實現(xiàn)技術是如下所示的for循環(huán)for(i=10;i>1;i--){x[i]=x[i-1]+40; y[i]=y[i-1];}。最終文字顯示的關鍵代碼為for(i=1;i<11;i++){SetTextColor(hdc,RGB(255-color[i],color[i],255));TextOut(hdc,x[i],y[i],&str;[i],1);}。以此實現(xiàn)本文所提出的動態(tài)多彩文字。
4 小結
本文通過動態(tài)多彩文字Windows應用程序設計任務介紹任務驅動教學的任務設計、教學內容和教學方法,實際教學效果比填鴨式的講授法有明顯進步,學生實際反映教學效果較好。
參考文獻:
[1] 劉紅梅.任務驅動式案例教學法的構建與應用[J].江蘇高教,2016 (4):71-73.
[2] 賀桂英.基于任務驅動和MOOC學習的開放大學教師研修模式探索與研究[J]. 高教探索,2016 (1):120-123.