⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diaclockctrl.cpp

📁 symbian中时钟的应用开发 一个动态的时钟.
💻 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 + -