ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6주차 C# 아날로그 시계(1)
    비주얼 프로그래밍 2024. 4. 17. 00:30
    더보기

    # 아날로그 시계만들기

    도구 상자에서

    컨테이너 -> Panel 1개

    메뉴 및 도구 모음 -> MenuStrip 1개

    배치 합니다

    private 중심점, 반지름, 시치의 길이, 분침, 초침을 필드로 만들어 냅니다.

    또한 클라이언트, 시계 사이즈를 선언 합니다.

     public partial class Form1 : Form
     {
         // 필드<맴버 변수>
         Graphics g;
         bool aClock_Flag = true; //아날로그 시계
         private Point center; //중심점
         private int radius; //반지름
         private int hourHand; // 시침의 길이
         private int minHand; // 분침의 길이
         private int secHand; //초침의 길이
    
         private const int clientSize = 300; //client의 크기
         private const int clockSize = 200; // 시계의 크기

     

    this.text로 Form의 이름을 정해주고
    바탕색을 설정해 줍니다

    //생성자 함수
    public Form1()
    {
        InitializeComponent();
    
        this.ClientSize = new Size(clientSize, clientSize + menuStrip1.Height);
        this.Text = "My Form CLock";
    
        //panel 지정
        panel1.BackColor = Color.WhiteSmoke;
        panel1.Width = clientSize +1;
        panel1.Height = clientSize +1;
        panel1.Location = new Point(
            clientSize / 2 - clockSize / 2,
            clientSize / 2 - clockSize / 2 + menuStrip1.Height);
    
        g = panel1.CreateGraphics(); // panel1에 그려주는 그래픽 객체
    
        aClockSetting();  // 아날로그 시계 세팅
        dClockSetting();  // 디지털 시계 세팅
        TimerSetting();   // 타이머 세팅
    }

     

    aClockSetting()

    center와 radius 먼저 설정을 하고

    hourhand, minhand, sechand 얼마큼 움직일 것인지 설정해줍니다.

    private void aClockSetting() // 아날로그 시계 세팅
    {
        center = new Point(clientSize / 2, clockSize / 2);
        radius = clientSize / 2;
    
        hourHand = (int)(radius * 0.45);
        minHand = (int)(radius * 0.55);
        secHand = (int)(radius * 0.65);
    }

     

     TimerSetting()

    1초에 한 번씩 시계를 그려 주기 위해 T_Tick() 함수를 생성합니다.

    private void TimerSetting() //타이머 세팅
    {
       Timer t = new Timer();
        t.Enabled = true;
        t.Interval = 1000;
        t.Tick += T_Tick;
    }
     private void T_Tick(object sender, EventArgs e)
     {
         throw new NotImplementedException();
     }

     

    위의 form 코드에 아래의 코드를 추가해 줍니다

    private Font fDate;
      private Font tFont;
      private Brush bDate;
      private Brush bTime;
    
      private Point panelCenter;

     

    위의 코드에서 panel을 지정해 줍니다

    //panel 지정
    panel1.BackColor = Color.WhiteSmoke;
    panel1.Width = clientSize +1;
    panel1.Height = clientSize +1;
    panel1.Location = new Point(
        clientSize / 2 - clockSize / 2,
        clientSize / 2 - clockSize / 2 + menuStrip1.Height);

     

    # 디지털 시계

     private void T_Tick(object sender, EventArgs e)
     {
         DateTime c = DateTime.Now; // 현재 시간
    else // 디지털 시계
     {
         string date = DateTime.Today.ToString("D");
         string time = String.Format("{0:D2};{1:D2}:{2:D3}", c.Hour, c.Minute, c.Second);
    
         g.DrawString(date, fDate, bDate, new Point(10, 80));
         g.DrawString(time, fTime, bTime, new Point(10, 120));
     }

     

    #아날로그 시계

    if (aClockFlag == true) // 아날로그 시계 ( 시작할때 true로 설정해줌)
     {
         DrawClockFace();
    
         //시계바늘 각도
         double radHr = (c.Hour % 12 + c.Minute / 60.0) * 30 * Math.PI / 180;
         double radMin = (c.Minute + c.Second / 60.0) * 6 * Math.PI / 180;
         double radSec = c.Second * 6 * Math.PI / 180;
    
         DrawHands(radHr, radMin, radSec);

     

    DrawClockFace와 DrawHands의 메서드를 생성

    //DrawClockFace 코드
    private void DrawClockFace()
    {
        const int penWidth = 30;
    
        Pen p = new Pen(Brushes.LightGray, penWidth);
        g.DrawEllipse(p, penWidth/2, penWidth / 2,
             clockSize - penWidth , clockSize-penWidth); // (사각형 지정)
    }
    
     public partial class Form1 : Form // this
      {
          // 필드(멤버변수)
          private Graphics g;
          private bool aClockFlag = true; // 아날로그 시계 (false- 디지털 시계)

     

     

    # 지금까지 한 코드 정리

        public partial class Form1 : Form
        {
            // 필드<맴버 변수>
            Graphics g;
            bool aClock_Flag = true; //아날로그 시계
            private Point center; //중심점
            private int radius; //반지름
            private int hourHand; // 시침의 길이
            private int minHand; // 분침의 길이
            private int secHand; //초침의 길이
    
            private const int clientSize = 300; //client의 크기
            private const int clockSize = 200; // 시계의 크기
    
            private Font fDate;
            private Font fTime;
            private Brush bDate;
            private Brush bTime;
    
            private Point panelCenter;
    
            //생성자 함수
            public Form1()
            {
                InitializeComponent();
    
                this.ClientSize = new Size(clientSize, clientSize + menuStrip1.Height);
                this.Text = "My Form CLock";
    
                //panel 지정
                panel1.BackColor = Color.WhiteSmoke;
                panel1.Width = clientSize +1;
                panel1.Height = clientSize +1;
                panel1.Location = new Point(
                    clientSize / 2 - clockSize / 2,
                    clientSize / 2 - clockSize / 2 + menuStrip1.Height);
    
                g = panel1.CreateGraphics(); // panel1에 그려주는 그래픽 객체
    
                aClockSetting();  // 아날로그 시계 세팅
                dClockSetting();  // 디지털 시계 세팅
                TimerSetting();   // 타이머 세팅
            }
    
            private void aClockSetting()
            {
                center = new Point(clientSize / 2, clockSize / 2);
                radius = clientSize / 2;
    
                hourHand = (int)(radius * 0.45);
                minHand = (int)(radius * 0.55);
                secHand = (int)(radius * 0.65);
            }
    
            private void dClockSetting()
            {
                Font fDate = new Font("맑은 고딕", 12, FontStyle.Bold);
                Font fTime = new Font("맑은 고딕", 32,
                FontStyle.Bold | FontStyle.Italic);
                Brush bDate = Brushes.SkyBlue;
                Brush bTime = Brushes.SteelBlue;
    
            }
    
            private void TimerSetting()
            {
               Timer t = new Timer();
                t.Enabled = true;
                t.Interval = 1000;
                t.Tick += T_Tick;
            }
    
            private void T_Tick(object sender, EventArgs e)
            {
                DateTime c = DateTime.Now; //현재시간
    
                panel1.Refresh();//패널을 지운다
    
                if (aClock_Flag == true) // 아날로그
                {
                    DrawClockFace();
    
                    //시계 바늘 각도
                    double radHr = (c.Hour % 12 + c.Minute / 60.0) * 30 * Math.PI / 180;
                    double radMin = (c.Minute + c.Second / 60.0) * 6 * Math.PI / 180;
                    double radSec = c.Second * 6 * Math.PI / 180;
    
                    DrawHands(radHr, radMin, radSec);
                }
                else // 디지털 시계
                {
                    string date = DateTime.Today.ToString("D");
                    string time = string.Format("{0:D2}:{1:D2}:{2:D2}",
                        c.Hour, c.Minute, c.Second);
    
                    g.DrawString(date, fDate, bDate, new Point(5, 70));
                    g.DrawString(time, fTime, bTime, new Point(5, 100));
                }
            }
    
            private void DrawClockFace()
            {
                const int penWidth = 30;
    
                Pen p = new Pen(Brushes.Blue, penWidth);
                g.DrawEllipse(p, penWidth/2, penWidth/3,
                   clockSize - penWidth, clockSize - penWidth);
            }
            private void DrawHands(double radHr, double radMin, double radSec)
            {
                
            }
    
            
        }
    }
Designed by Tistory.