티스토리 뷰
[1]FormClock
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace _040_FormClock
{
public partial class Form1 : Form
{
Graphics g;
bool aClock_Flag = false;
Point center; // 시계의 중심점
double radius; // 시계의 반지름
int hourHand; // 시침의 길이
int minHand; // 분침
int secHand; // 초침
Timer t = new Timer();
public Form1()
{
InitializeComponent();
this.Text = "FormClock";
g = panel1.CreateGraphics();
aClockSetting();
TimerSetting();
}
private void TimerSetting()
{
t.Interval = 1000; // 1초
t.Tick += T_Tick;
t.Start();
}
private void T_Tick(object sender, EventArgs e)
{
DateTime c = DateTime.Now;
DrawClockFace(); // 시계판 그리기
// 시침, 분침, 초침의 각도 구하기
double degHr = (c.Hour % 12) * 30 + c.Minute * 0.5;
double degMin = c.Minute * 6 + c.Second * 0.1;
double degSec = c.Second * 6;
// 라디안으로 변화
double radHr = Math.PI * degHr / 180;
double radMin = Math.PI * degMin / 180;
double radSec = Math.PI * degSec / 180;
}
private void DrawClockFace()
{
throw new NotImplementedException();
}
private void aClockSetting()
{
center = new Point(panel1.Width / 2,
panel1.Height / 2);
radius = panel1.Height / 2;
hourHand = (int)(radius * 0.45);
minHand = (int)(radius * 0.55);
secHand = (int)(radius * 0.65);
}
}
}
Graphics g;
bool aClock_Flag = false;
Point center; // 시계의 중심점
double radius; // 시계의 반지름
int hourHand; // 시침의 길이
int minHand; // 분침
int secHand; // 초침
Timer t = new Timer();
전역변수 선언부이다.
Graphics class의 g를 선언해준다.
bool type aClock_Flag를 false로
point구조체의 center를 선언해준다.
double radius를 선언
int형으로 시침,분침,초침의 길이를 설정해준다.
마지막으로 타이머를 선언해준다.
this.Text = "FormClock";
g = panel1.CreateGraphics();
aClockSetting();
TimerSetting();
Form1의 내부이다.
title을 FormClock으로 변경해준다.
panel1에 CreateGraphics함수를 사용하여 컨트롤을 위한 그래픽을 만들어준 뒤
추후에 만들 aClockSetting 과 TimerSetting 함수를 실행해준다.
private void TimerSetting()
{
t.Interval = 1000; // 1초
t.Tick += T_Tick;
t.Start();
}
타이머는 이전 앱들과는 다르게 메인에서 설정하지 않고 함수로 설정해주었다.
interval은 1초로
Tick 이벤트 핸들러를 만들고
t를 start해준다.
private void T_Tick(object sender, EventArgs e)
{
DateTime c = DateTime.Now;
DrawClockFace(); // 시계판 그리기
// 시침, 분침, 초침의 각도 구하기
double degHr = (c.Hour % 12) * 30 + c.Minute * 0.5;
double degMin = c.Minute * 6 + c.Second * 0.1;
double degSec = c.Second * 6;
// 라디안으로 변화
double radHr = Math.PI * degHr / 180;
double radMin = Math.PI * degMin / 180;
double radSec = Math.PI * degSec / 180;
}
Tick 이벤트 함수의 내부이다.
DateTime 클래스의 c를 만들어 현재시간을 받아준다.
추후에 작성할 DrawClockFace함수로 시계판을 그려준다.
double값에 시간,분,초의 각도를 담을 것이다.
공식은 위와같고 초침을 예로들면 360도가 한바퀴고 60초이니 1초에 6도씩 움직이는 것을 공식화한 것 것이다.
[시침에도 초침의 변경되는 각도를 더해주면 더 부드러운 시계가 완성될 것 같다.]
이 값들을 참고하여 라디안값으로 변경할 예정이다.
radHr = Math.PI * degHr / 180의 공식으로 변환하면 된다!
아직 구현이 다 안됐다.
private void aClockSetting()
{
center = new Point(panel1.Width / 2,
panel1.Height / 2);
radius = panel1.Height / 2;
hourHand = (int)(radius * 0.45);
minHand = (int)(radius * 0.55);
secHand = (int)(radius * 0.65);
}
다음으로 aClockSetting함수이다.
center는 panel1의 정중앙에 오게끔 좌표를 설정하였다.
반지름은 panel1의 높이의 절반으로 딱 맞게 들어가게하려는 것 같다.
시침,분침,초침의 길이를 설정해준다.
저 비율이 보기좋다고 교수님이 말씀하셨다.
이상으로 여기까지 구현하였고 다음시간에 마저 구현할 예정이다.
'VS-02분반수업' 카테고리의 다른 글
VP(22-06-10) (0) | 2022.06.18 |
---|---|
VP(22-06-08) (0) | 2022.06.09 |
VP(22-06-02) (0) | 2022.06.08 |
VP(22-05-27) (0) | 2022.05.30 |
VP(22-05-25) (0) | 2022.05.25 |