在Windows控制台裡畫一個時鐘

來源:互聯網
上載者:User

沒事學一下C++編程.

在用一個線程,不斷重畫:


標頭檔:

#include "stdafx.h"#include <Windows.h>#include <time.h>extern "C"{WINBASEAPI HWND WINAPI GetConsoleWindow();}class TimeWatch{public:TimeWatch(int x,int y,int radius);~TimeWatch();void Start();void DrawTimeWatch();private:HWND hwnd;HDC hdc;HANDLE hThread;DWORD ThreadID;int radius;int x,y;void DrawTimeLine();void DrawTimePoint();};

代碼實現:

#include "stdafx.h"#include "intArray.hpp"#include <math.h>#include <iostream>using namespace std;TimeWatch::TimeWatch(int x,int y,int radius){this->x = x;this->y = y;this->radius = radius;}TimeWatch::~TimeWatch(){}#define PAI 3.1415926#define hourLineLen 30#define MinuteLineLen 45#define SecondLineLen 50void TimeWatch::DrawTimePoint(){int count = 12;int step = 30;int px,py;double rad;hwnd = GetConsoleWindow();hdc = GetDC(hwnd);step = 30;Ellipse(hdc,x-10-radius,y-10-radius,x+10+radius,y+10+radius);int j = 1;SetPixel(hdc,x,y,255);for(int i = 0;i<360;i+=step){rad =2 * PAI * 1 * i / 360;px =(int)((cos(rad)*radius));py =(int)((sin(rad)*radius));SetPixel(hdc,x + px,y + py,255);}}void TimeWatch::DrawTimeLine(){double rad;struct tm *ltm;time_t now; int minutetime,px,py;double hourtimeLineArc,minuteLineArc,senLineArc;time(&now);//畫時鐘ltm = localtime(&now);minutetime = ltm->tm_hour % 12 * 60 + ltm->tm_min;hourtimeLineArc = minutetime * 1.0 / (12 * 60) * 360 - 90;rad = 2 * PAI * 1 * hourtimeLineArc/360;px = (int)(cos(rad)*hourLineLen);py = (int)(sin(rad)*hourLineLen);MoveToEx(hdc,x,y,NULL);LineTo(hdc,x+px,y+py);//分鐘minuteLineArc = ltm->tm_min * (360/60) - 90;rad = 2 * PAI * 1 * minuteLineArc / 360;px = (int)(cos(rad)*MinuteLineLen);py = (int)(sin(rad)*MinuteLineLen);MoveToEx(hdc,x,y,NULL);LineTo(hdc,x+px,y+py);//秒senLineArc = ltm->tm_sec * (360 / 60) - 90;rad = 2 * PAI * 1 * senLineArc / 360;px = (int)(cos(rad)*SecondLineLen);py = (int)(sin(rad)*SecondLineLen);MoveToEx(hdc,x,y,NULL);LineTo(hdc,x+px,y+py);}void ThreadFunc(TimeWatch *tw){while(1){tw->DrawTimeWatch();Sleep(1000);}}void TimeWatch::DrawTimeWatch(){DrawTimePoint();DrawTimeLine();}void TimeWatch::Start(){hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,(void *)this,0,&ThreadID);}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.