📄 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 + -