在Windows控制台里画一个时钟
来源:互联网 发布:对胡和温的评价知乎 编辑:程序博客网 时间:2024/05/16 13:39
没事学一下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);}
- 在Windows控制台里画一个时钟
- 怎样在一个项目里用logger在控制台打印信息
- 关于一些控制台命令——在一个程序里调用另一个程序
- 在一个程序里调用另一个程序——关于一些控制台命令
- 在Windows中巧用控制台命令
- getch 在windows平台下从控制台无回显地取一个字符,在linux下是有回显的。
- 在图形界面程序里使用控制台窗口
- 在控制台里打印controller的层级
- 在控制台打印一个圆
- 绘制一个坦克在控制台
- 在控制台打印一个圆
- 在控制台输出一个九九乘法表
- C#画一个时钟
- 控制台显示时钟
- 控制台模拟电子时钟
- c# 彩色控制台时钟
- 控制台彩色时钟源码
- C++控制台时钟
- D兔提供伤感日志_不要随便牵手,更不要随便放手
- 结构
- 一个写log的函数 log_func.c .
- VMware安装RedHat Linux 9.0上网详细设置
- MySQL主从复制与读写分离
- 在Windows控制台里画一个时钟
- Flex Ant脚本模板
- 做不成情侣,也别做朋友:陈思念原创伤感日志
- javascript模板添加nodejs支持
- ORA-12516: TNS:listener could not find available handler with matching protocol stack
- CentOS 下安装php zookeeper扩展
- 类型生命周期(一)
- sphinx+mysql+中文分词安装
- linux下安装配置intel的tbb