資源描述:
《用VC++制作_模擬時鐘應(yīng)用程序.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、(3)時針、分針和秒針形象美觀,即使各指針重合也可辨認(rèn)。(4)各指針運(yùn)動規(guī)律正確。為便于演示,時鐘速度應(yīng)比實(shí)際時間快20倍,即1小時相當(dāng)于3分鐘。(5)數(shù)字式時鐘的時間顯示與指針式時鐘顯示一致。(6)按下設(shè)置時間按鈕或菜單項可彈出一對話框,用于設(shè)置當(dāng)前的時間和日期。(7)按下秒表控制按鈕后,秒表顯示窗中顯示從0開始的時間,單位為百分之一秒。再次按下秒表控制按鈕后計時停止,該窗口顯示累計時間。2?問題分析本題主要涉及到的知識點(diǎn)有:時鐘指針運(yùn)動算法、屏幕重繪方法、定時器消息、鼠標(biāo)消息、菜單命令、對話框、畫筆/畫刷、顯示文字等。指針運(yùn)動算法和屏幕重繪方法是本程序主要難點(diǎn)所在。不論何種指
2、針,每次轉(zhuǎn)動均以π/30弧度(一秒的角度)為基本單位,且都以表盤中心為轉(zhuǎn)動圓心。計算指針端點(diǎn)(x,y)的公式如下:x=圓心x坐標(biāo)+指針長度*cos(指針方向角)y=圓心y坐標(biāo)+指針長度*sin(指針方向角)注意,指針長度是指自圓心至指針一個端點(diǎn)的長度(是整個指針的一部分),由于指針可能跨越圓心,因此一個指針需要計算兩個端點(diǎn)。三個指針的運(yùn)動是相關(guān)聯(lián)的,秒針轉(zhuǎn)一圈引起分針運(yùn)動一格,分針轉(zhuǎn)一圈引起時針運(yùn)動一格,因此應(yīng)該使用一個定時器消息來處理指針的運(yùn)動。若用三個定時器消息分別處理時針、分針和秒針的運(yùn)動,就會使問題復(fù)雜化且不易實(shí)現(xiàn)三個指針聯(lián)動的正確規(guī)律。采用一個定時器消息可以很容易實(shí)現(xiàn)指
3、針聯(lián)動算法。由于屏幕的重繪速度很快(50ms一次),如果采用全屏刪除式重繪則閃爍十分明顯,顯示效果不佳。本程序采用非刪除式重繪,假定指針將要移動一格,則先采用背景色(這里是白色)重繪原來指針以刪除原來位置的指針,再采用指針的顏色在當(dāng)前位置繪制指針;如果指針沒有動,則直接繪制指針。另外,秒表需要采用單獨(dú)的定時器消息控制。4?程序清單按以下步驟向視圖類(CClockView)添加下列數(shù)據(jù)成員及成員函數(shù)。(1)添加表示年、月、日、時、分、秒的變量。intyear;intmonth;intday;inthour;intminute;intsecond;(2)添加秒表的計數(shù)變量。intwa
4、tch;(3)添加時鐘的畫筆及畫刷變量。CPenm_HouPen,m_MinPen,m_SecPen;//各種針的畫筆CBrushm_MarkBrush;//表盤標(biāo)記的畫刷(4)添加時鐘控制變量。CPointm_Center;//表的中心doublem_Radius;//表的半徑CPointm_Hour[2],m_OldHour[2];//時針當(dāng)前及前一次位置CPointm_Minute[2],m_OldMin[2];//分針當(dāng)前及前一次位置CPointm_Second[2],m_OldSec[2];//秒針當(dāng)前及前一次位置(5)添加秒表的兩個按鈕位置變量。CRectm_Watc
5、hStart;CRectm_WatchStop;(6)添加兩個函數(shù),計算時鐘各指針位置。voidSetClock(inthour,intminute,intsecond);CPointGetPoint(intnLenth,intnValue);(7)在視圖類構(gòu)造函數(shù)中增加初始化語句:CClockView::~CClockView(){//設(shè)定時間year=2010;month=11;day=22;hour=0;minute=0;second=0;?//設(shè)定畫筆畫刷m_HouPen.CreatePen(PS_SOLID,5,RGB(255,0,0));//時針畫筆m_MinPen.
6、CreatePen(PS_SOLID,3,RGB(0,0,250));//分針畫筆m_SecPen.CreatePen(PS_SOLID,1,RGB(0,0,0));//秒針畫筆m_MarkBrush.CreateSolidBrush(RGB(250,250,0));//設(shè)定表芯位置m_Center.x=222;m_Center.y=222;?//設(shè)定時鐘半徑m_Radius=222;//計算指針位置SetClock(hour,minute,second);//設(shè)定秒表計數(shù)器及按鈕位置watch=0;m_WatchStart=CRect(480,310,560,340);//啟動
7、按鈕m_WatchStop=CRect(590,310,670,340);//停止按鈕}?編寫指針位置函數(shù)SetClock和GETpOINT。首先在ClockView.cpp文件頭部下添加下面兩行代碼,以便進(jìn)行數(shù)學(xué)計算。#definePI3.14159265258#include"math.h"然后添加下列代碼:?//計算個指針位置的函數(shù)voidCClockView::SetClock(inthour,intminute,intsecond){hour=hour*5;hour=h