?? diaclockctrl.cpp
字號:
// DigClockCtrl.cpp: implementation of the CDigClockCtrl class.
//
//////////////////////////////////////////////////////////////////////
#include "DiaClockCtrl.h"
#include "math.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDiaClockCtrl::CDiaClockCtrl()
{
}
CDiaClockCtrl::~CDiaClockCtrl()
{
}
void CDiaClockCtrl::ConstructL()
{
}
void CDiaClockCtrl::Draw(const TRect& /*aRect*/) const
{
// Window graphics context
CWindowGc& gc = SystemGc();
// Area in which we shall draw
TRect drawRect = Rect();
// Font used for drawing text
// Start with a clear screen
gc.Clear(drawRect);
// gc.DrawRect(drawRect);
// Draw an outline rectangle (the default pen
// and brush styles ensure this) slightly
// smaller than the drawing area.
this->DrawClock(gc,drawRect,iTime.Hour(),iTime.Minute(),iTime.Second());
}
void CDiaClockCtrl::DrawClock(CWindowGc& aGc,const TRect & aRect,TInt aHour/*<=12*/,TInt aMin,TInt aSec) const
{
if(iSelected)
aGc.SetPenColor(TRgb(255,0,0));
else
aGc.SetPenColor(TRgb(0,0,0));
//畫表盤
aGc.DrawArc(aRect,TPoint(0,0),TPoint(0,0));
TPoint pntFrom, pntTo;
TReal Pi = 3.1415926;
TReal angleInterval = Pi*2/12;
TInt dialRadio = aRect.Width()/2; //表盤半徑
TInt scaleLen = 5; //刻度長度
aGc.SetPenSize(TSize(1,1));
for(TInt i = 0; i < 12; i++){
pntFrom.iX = aRect.Center().iX + (TInt)((dialRadio - scaleLen)*cos(i*angleInterval));
pntFrom.iY = aRect.Center().iY + (TInt)((dialRadio - scaleLen)*sin(i*angleInterval));
pntTo.iX = aRect.Center().iX + (TInt)((dialRadio )*cos(i*angleInterval));
pntTo.iY = aRect.Center().iY + (TInt)((dialRadio )*sin(i*angleInterval));
aGc.DrawLine(pntFrom,pntTo);
}
//畫指針
TInt hourPointerWid = 4;
TInt hourPointerLen = dialRadio*4/7;
TInt minPointerWid = 2;
TInt minPointerLen = dialRadio*2/3;
TInt secPointerWid = 1;
TInt secPointerLen = dialRadio*4/5;
TInt pointerMargin = 3;
//畫時針
TReal pointerAngle = Pi*2*aHour/12 + (Pi*2/12)*aMin/60 - Pi/2;
pntFrom.iX = aRect.Center().iX + pointerMargin*cos(pointerAngle+Pi);
pntFrom.iY = aRect.Center().iY + pointerMargin*sin(pointerAngle+Pi);
pntTo.iX = aRect.Center().iX + hourPointerLen*cos(pointerAngle);
pntTo.iY = aRect.Center().iY + hourPointerLen*sin(pointerAngle);
aGc.SetPenSize(TSize(hourPointerWid,hourPointerWid));
aGc.DrawLine(pntFrom,pntTo);
//畫分針
pointerAngle = Pi*2*aMin/60 - Pi/2;
pntFrom.iX = aRect.Center().iX + pointerMargin*cos(pointerAngle+Pi);
pntFrom.iY = aRect.Center().iY + pointerMargin*sin(pointerAngle+Pi);
pntTo.iX = aRect.Center().iX + minPointerLen*cos(pointerAngle);
pntTo.iY = aRect.Center().iY + minPointerLen*sin(pointerAngle);
aGc.SetPenSize(TSize(minPointerWid,minPointerWid));
aGc.DrawLine(pntFrom,pntTo);
//畫秒針
pointerAngle = Pi*2*aSec/60 - Pi/2;
pntFrom.iX = aRect.Center().iX + pointerMargin*cos(pointerAngle+Pi);
pntFrom.iY = aRect.Center().iY + pointerMargin*sin(pointerAngle+Pi);
pntTo.iX = aRect.Center().iX + secPointerLen*cos(pointerAngle);
pntTo.iY = aRect.Center().iY + secPointerLen*sin(pointerAngle);
aGc.SetPenSize(TSize(secPointerWid,secPointerWid));
aGc.DrawLine(pntFrom,pntTo);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -