如果如圖所示,指針只有這8個位置,那麽最簡單的辦法就是分別制作,指針分別在8個不同位置的圖,然後響應鍵盤的方向鍵,根據方向鍵分別顯示不同的圖就可以了。
程序壹開始,先進行變量初始化,可以分別將8個圖載入內存(這樣可以加快響應速度),將圖顯示為表指針指向12點位置的圖(假設為圖序號為0),初始化當前圖的索引號為0。
當按下鍵盤左鍵、上鍵時,計算圖序號: 如果當前序號=0,圖序號 = 8-1,否則,圖序號=當前序號-1;
當按下鍵盤右鍵、下鍵時,計算圖序號: 如果當前序號=7,圖序號 = 0,否則,圖序號=當前序號+1;
計算出圖的序號後,將相應序號對應的圖顯示出來就可以了。
=====================
通常編寫時鐘的辦法,是分別制作:表盤、指針兩種圖。然後,弄個定時器,再響應定時器的事件,編寫代碼。
表盤不動,計算指針所處的位置,然後旋轉指針的圖就可以了。
以下是C++編寫的壹個時鐘的代碼關鍵代碼示例,供參考:
//獲取客戶區大小
RECT Rect;
GetClientRect(&Rect);
//計算橢圓位置
int CenterX=Rect.right/2;
int CenterY=Rect.bottom/2;
CTime Time=CTime::GetCurrentTime();
//取當前時間
CString str;
int i,x,y;
CSize size;//創建壹支黑色的筆
CPen Pen(PS_SOLID,5,RGB(0,0,0));
//選進設備表,保存原筆
CPen*Oldpen=pDC->SelectObject(&Pen);
//繪制鐘面橢圓
pDC->Ellipse(5,5,Rect.right-5,Rect.bottom-5);
//設置字體顏色為紅色
pDC->SetTextColor(RGB(255,0,0));
for(i=1;iGetTextExtent(str,str.GetLengh());
//計算時間點放置位置
Radians=(double)i*6.28/12.0;
x=CenterX-(size.cx/2)+(int)((double)(CenterX-0)*sin(Radians));
y=CenterY-(size.cy/2)-(int)((double()CenterY-20)*cos(Radians));
//繪制12個時間點(1-12)
pDC->TextOut(x,y,str);
}//計算時鐘指針的夾角
Radians=(double)Time.GetHour()+(double)Time.GetMinute()/60.0+(double)Time.GetSecond()/3600.0;
Radians*=6.28/12.0;
//創建時針指鐘畫筆
CPen HourPen(PS_SOLID,5,RGB(0,255,0));
pDC->SelectObject(&HourPen);
//繪制時鐘指針線
pDC->MoveTo(CenterX,CenterY);
pDC->LineTo(CenterX,(int)((doble)(CenterX/3)*sin(Radians)),CenterY-(int)((double)(CenterY/3)*cos(Radians)));
Radians=(double)Time.GetMinute()+(double)Time.GetSecond()/60.0;
Radians*=6.28/60.0;
//創建分鐘指針畫筆
CPen MinutePen(PS_SOLID,3,RGB(0,0,255));
pDC->SelectObject(&MinutePen);
//繪制分鐘指針線
pDC->MoveTo(CenterX,CenterY);
pDC->LineTo(CenterX+(int)((double)(CenterX*2/3)*sin(Radians)),CenterY-(int)((double)(CenterY*2/3)*cos(Radians)));
Radians=(double)Time.GetSecond();