📄 clock.cpp
字号:
/**
* Title CLOCK.cpp
*
* Created on 2009-3-30
* @Author ShaunChxion
* @Email shaunchyxion@163.com
* @Shaun All Rights reserved.
*
*/
/****************************************************
ClocMainFction.cpp
-----------------------------------
[文件]
(i) Clock.cpp 主程序
(ii) winbgi.cpp
(iii) source.cpp
(iv) graphics.h
(v) Clock.h
(vi) figure.cpp
(vii) figure.h
****************************************************************/
#include <cmath>
#include <ctime>
#include <iostream>
#include "graphics.h"
#include "Clock.h"
#include "figure.h"
//记录鼠标点击opinions状态
int clickOp = FALSE;
class Clock
{
public:
//构造函数
explicit Clock(int hour=0, int minute=0, int second=0)
{
this->hour = hour;
this->minute = minute;
this->second = second;
}
//得到时间
void getTime(int h, int m, int s);
//绘制时针
void DrawHourHand(void);
//绘制分针
void DrawMinuteHand(void);
//绘制秒针
void DrawSecondHand(void);
private:
int hour;
int minute;
int second;
//时针与12点方向的夹角
int hour_angle;
//分针与12点方向的夹角
int minute_angle;
//秒针与12点方向的夹角
int second_angle;
};
int main(void)
{
initwindow(800,680);
setbkcolor(LIGHTGRAY);
cleardevice();
Clock CLOCK(0,0,0);
outInfo(); //桌面信息
whiteAndBlack(); //默认白加黑模式
while(1) //时间一旦开始,便不停歇
{
//获得系统时间
time_t curtime = time(0);
tm tim = *localtime(&curtime);
//将的的时间存入时钟
CLOCK.getTime(tim.tm_hour,
tim.tm_min,
tim.tm_sec);
//刷新表盘
clearDial();
//显示时钟指针
CLOCK.DrawHourHand();
CLOCK.DrawMinuteHand();
CLOCK.DrawSecondHand();
if (mousedown())
{
int x = mouseclickx();
int y = mouseclicky();
clearmouse();
//点击opinions
if (clickOpinions(x, y))
{
displayMenu(); //展示选项菜单
clickOp = TRUE;
}
//点击菜单选项
/**
* @要求:
* 先点击opinions,
* 并且点击范围在菜单内,
*
*/
if (clickOp == TRUE &&
clickBranch(x, y))
{
//将纵坐标转换成选项号
//其中(OY+35)为菜单上底纵坐标
//30是选项框高
int grade = (y - (OY + 35))/30;
displayMenu(); //刷新选项框
clickResult(grade); //造成选项点击效果
}
}
delay(500);
}
getch();
closegraph();
return 0;
}
//获得时间
void Clock::getTime(int hour, int minute, int second)
{
//将新时间存入时钟
this->hour = hour;
this->minute = minute;
this->second = second;
//改变指针的角度
hour_angle = 30 * (hour % 12) + (minute / 12) * 6;
minute_angle = 6 * minute;
second_angle = 6 * second;
}
//绘制时针
void Clock::DrawHourHand(void)
{
int h_x = centrex + hour_radius * sin(hour_angle * pi / 180);
int h_y = centrey - hour_radius * cos(hour_angle * pi / 180);
setcolor(DARKGRAY);
setlinestyle(1,0,3);
line(centrex, centrey, h_x, h_y);
}
//绘制分针
void Clock::DrawMinuteHand(void)
{
int m_x = centrex + minute_radius * sin(minute_angle * pi / 180);
int m_y = centrey - minute_radius * cos(minute_angle * pi / 180);
setcolor(YELLOW);
setlinestyle(0,0,2);
line(centrex, centrey, m_x, m_y);
}
//绘制秒针
void Clock::DrawSecondHand(void)
{
//指针顶点坐标
int s_x = centrex + second_radius * sin(second_angle * pi / 180);
int s_y = centrey - second_radius * cos(second_angle * pi / 180);
setlinestyle(0, 4, 1);
setcolor(LIGHTRED);
line(centrex, centrey, s_x, s_y);
setcolor(DARKGRAY);
circle(centrex, centrey,15);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -