//此文件为整个程序的关键文件,主要的事情都在此文件中实现
#include "CWndClock.h"
MyClock::MyClock() //初始化指针数据
{
//定位表盘中心位置
center.x = GetSystemMetrics(SM_CXSCREEN)/2;
center.y = GetSystemMetrics(SM_CYSCREEN)/2;
//表盘半径
radius = center.x > center.y ? center.y : center.x;
radius = radius - 40;
//获取当前系统时间从而初始化各表针的位置
GetLocalTime(&s_Time);
angle = (double)(s_Time.wSecond * 6 * 2 * PI/360);
//初始化秒针针柄坐标
second[0].x = center.x + (int)((radius/8) * sin(angle+PI));
second[0].y = center.y - (int)((radius/8) * cos(angle+PI));
//初始化秒针针尖坐标
second[1].x = center.x + (int)((radius-20) * sin(angle));
second[1].y = center.y - (int)((radius-20) * cos(angle));
//初始化秒针前一个位置
oldSecond[0].x = second[0].x;
oldSecond[0].y = second[0].y;
oldSecond[1].x = second[1].x;
oldSecond[1].y = second[1].y;
angle = (double)(s_Time.wMinute * 6 * 2 * PI/360) + ((double)s_Time.wSecond/(double)60) * 6 *2 * PI/360;
//初始化分针针柄坐标需考虑秒针的影响
minute[0].x = center.x + (int)((radius/10) * sin(angle+PI));
minute[0].y = center.y - (int)((radius/10) * cos(angle+PI));
//初始化分针针尖坐标
minute[1].x = center.x + (int)((radius-60) * sin(angle));
minute[1].y = center.y - (int)((radius-60) * cos(angle));
//初始化分针前一个位置
oldMinute[0].x = minute[0].x;
oldMinute[0].y = minute[0].y;
oldMinute[1].x = minute[1].x;
oldMinute[1].y = minute[1].y;
angle = (double)((s_Time.wHour%12) * 30 * 2 * PI/360) + ((double)s_Time.wMinute/(double)60) * 30 * 2 * PI/360;
//初始化时针针柄坐标需考虑分针的影响忽略掉秒针的影响
hour[0].x = center.x + (int)((radius/12) * sin(angle+PI));
hour[0].y = center.y - (int)((radius/12) * cos(angle+PI));
//初始化时针针尖坐标
hour[1].x = center.x + (int)((radius-100) * sin(angle));
hour[1].y = center.y - (int)((radius-100) * cos(angle));
//初始化时针前一个位置
oldHour[0].x = hour[0].x;
oldHour[0].y = hour[0].y;
oldHour[1].x = hour[1].x;
oldHour[1].y = hour[1].y;
}
void MyClock::Draw(HDC hdc) //绘制表盘刻度只调用一次
{
int i;
HPEN pen1,pen2;
pen1 = CreatePen(PS_SOLID,5,RGB(255,255,0));
SelectObject(hdc,pen1);
Ellipse(hdc,center.x-5,center.y-5,center.x+5,center.y+5); //绘制表盘中心点
//绘制刻度
for(i=0;i<60;i++)
{
if(i%5 == 0)
continue;
angle = (double)(i * 6 * 2 *PI/360);
mark.x = center.x + (int)(radius * sin(angle));
mark.y = center.y - (int)(radius * cos(angle));
Ellipse(hdc,mark.x-5,mark.y-5,mark.x+5,mark.y+5);
}
//以矩形绘制整点刻度
pen2 = CreatePen(PS_SOLID,5,RGB(0,128,255));
SelectObject(hdc,pen2);
for(i=0;i<12;i++)
{
angle = (double)(i * 30 * 2 *PI/360);
mark.x = center.x + (int)(radius * sin(angle));
mark.y = center.y - (int)(radius * cos(angle));
Rectangle(hdc,mark.x-5,mark.y-5,mark.x+5,mark.y+5);
}
//释放画笔
DeleteObject(pen1);
DeleteObject(pen2);
}
void MyClock::RunClock(HDC hdc,int r_Hour,int r_Minute,int r_Second) //运行时钟
{
HPEN secondPen; //用于绘制当前位置秒针的画笔
HPEN minutePen; //用于绘制当前位置分针的画笔
HPEN hourPen; //用于绘制当前位置时针的画笔
HPEN oldPen,clearPen; //用于擦除前一位置表针的画笔
HPEN centerPen; //用于绘制表盘中心点
//记录各表针的前一个位置
oldHour[0].x = hour[0].x;
oldHour[0].y = hour[0].y;
oldHour[1].x = hour[1].x;
oldHour[1].y = hour[1].y;
oldMinute[0].x = minute[0].x;
oldMinute[0].y = minute[0].y;
oldMinute[1].x = minute[1].x;
oldMinute[1].y = minute[1].y;
oldSecond[0].x = second[0].x;
oldSecond[0].y = second[0].y;
oldSecond[1].x = second[1].x;
oldSecond[1].y = second[1].y;
//定位当前各表针的位置
angle = (double)(r_Second * 6 * 2 * PI/360);
second[0].x = center.x + (int)((radius/8) * sin(angle+PI));
second[0].y = center.y - (int)((radius/8) * cos(angle+PI));
second[1].x = center.x + (int)((radius-20) * sin(angle));
second[1].y = center.y - (int)((radius-20) * cos(angle));
angle = (double)(r_Minute * 6 * 2 * PI/360) + ((double)r_Second/(double)60) * 6 *2 * PI/360;
minute[0].x = center.x + (int)((radius/10) * sin(angle+PI));
minute[0].y = center.y - (int)((radius/10) * cos(angle+PI));
minute[1].x = center.x + (int)((radius-60) * sin(angle));
minute[1].y = center.y - (int)((radius-60) * cos(angle));
angle = (double)((r_Hour%12) * 30 * 2 * PI/360) + ((double)r_Minute/(double)60) * 30 * 2 * PI/360;
hour[0].x = center.x + (int)((radius/12) * sin(angle+PI));
hour[0].y = center.y - (int)((radius/12) * cos(angle+PI));
hour[1].x = center.x + (int)((radius-100) * sin(angle));
hour[1].y = center.y - (int)((radius-100) * cos(angle));
//擦除前一位置指针
clearPen = CreatePen(PS_SOLID,2,RGB(0,0,0));
oldPen = (HPEN)SelectObject(hdc,clearPen);
MoveToEx(hdc,oldSecond[0].x,oldSecond[0].y,NULL);
LineTo(hdc,oldSecond[1].x,oldSecond[1].y);
MoveToEx(hdc,oldMinute[0].x,oldMinute[0].y,NULL);
LineTo(hdc,oldMinute[1].x,oldMinute[1].y);
MoveToEx(hdc,oldHour[0].x,oldHour[0].y,NULL);
LineTo(hdc,oldHour[1].x,oldHour[1].y);
//绘制表盘中心点
centerPen = CreatePen(PS_SOLID,5,RGB(255,255,0));
SelectObject(hdc,centerPen);
Ellipse(hdc,center.x-5,center.y-5,center.x+5,center.y+5);
//绘制当前位置指针
hourPen = CreatePen(PS_SOLID,2,RGB(0,0,255));
SelectObject(hdc,hourPen);
MoveToEx(hdc,hour[0].x,hour[0].y,NULL);
LineTo(hdc,hour[1].x,hour[1].y);
minutePen = CreatePen(PS_SOLID,2,RGB(0,255,0));
SelectObject(hdc,minutePen);
MoveToEx(hdc,minute[0].x,minute[0].y,NULL);
LineTo(hdc,minute[1].x,minute[1].y);
secondPen = CreatePen(PS_SOLID,2,RGB(255,0,0));
SelectObject(hdc,secondPen);
MoveToEx(hdc,second[0].x,second[0].y,NULL);
LineTo(hdc,second[1].x,second[1].y);
//释放画笔对象
SelectObject(hdc,oldPen);
DeleteObject(clearPen);
DeleteObject(centerPen);
DeleteObject(hourPen);
DeleteObject(minutePen);
DeleteObject(secondPen);
}
没有合适的资源?快使用搜索试试~ 我知道了~
VC windows SDK 时钟界面屏幕保护程序
共21个文件
cpp:4个
obj:4个
h:2个
需积分: 3 14 下载量 78 浏览量
2011-07-31
12:01:27
上传
评论
收藏 1.18MB RAR 举报
温馨提示
基于windows SDK的标准模式开发,有详细的注释,适合初学者。。。
资源推荐
资源详情
资源评论
收起资源包目录
screenprotect.rar (21个子文件)
screenprotect
screenprotect.opt 49KB
WndProc.cpp 621B
screenprotect.dsp 4KB
screen.h 94B
screenprotect.dsw 534B
ScreenMainFun.cpp 2KB
CWndClock.cpp 6KB
Debug
screenprotect.exe 204KB
vc60.pdb 76KB
WndProc.obj 11KB
screenprotect.ilk 273KB
vc60.idb 145KB
screenprotect.pch 3.4MB
ScreenMainFun.obj 13KB
CWndClock.obj 19KB
screenprotect.pdb 489KB
InitFile.obj 12KB
screenprotect.plg 1KB
CWndClock.h 753B
screenprotect.ncb 57KB
InitFile.cpp 2KB
共 21 条
- 1
资源评论
zcm_xh2008
- 粉丝: 3
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功