C语言模拟时钟的代码,在vc++环境中运行。

C语言模拟时钟的代码,在vc++环境中运行。,第1张

/

   给你一个用图形库实现的案例,如果你不会用图形库或者不用图形库也无所谓,看看思路也是

   很好的。你说到钟表怎么转,那必然不是显示数字那么简单,所以这个小案例会对你有点帮助。  

  /

#include <stdioh>

#include <graphicsh>

#include <mathh>

#include <conioh>

#define PI 3141592653

void DrawDial();

void DrawHand(int hour, int min, int sec);

int main()

{

//创建一个窗口

initgraph(640, 480);

SYSTEMTIME t;

while (!kbhit())

{

DrawDial();

GetLocalTime(&t); //获取当地时间

DrawHand(twHour, twMinute, twSecond);

Sleep(1000); //大写的S!

BeginBatchDraw();

cleardevice();

EndBatchDraw();

}

getchar();

return 0;

}

//静态的表盘

void DrawDial()

{

circle(320, 240, 2);

circle(320, 240, 60);

circle(320, 240, 160);

circle(405, 210, 30);

outtextxy(290, 315, L"电子时钟");

//绘制刻度

int x, y;

for (int i = 0; i < 60; i++)

{

x = 320 + int(145  sin(PI  2  i / 60)); //半径sinA得出x轴偏移量

y = 240 + int(145  cos(PI  2  i / 60));

/

PI  2  --> 360°

i  60  --> 把360分成60分,占60份中的i份

/

if (i % 15 == 0)

{

bar(x - 5, y - 5, x + 5, y + 5); //画矩形

}

else if (i % 5 == 0)

{

circle(x, y, 3);

}

else

putpixel(x, y, WHITE); //画一像素(点)

}

for (int i = 0; i <= 11; i++)

{

x = 405 + int(28  sin(PI  2  i / 12));

y = 210 + int(28  cos(PI  2  i / 12));

putpixel(x, y, WHITE);

}

}

//动态表针

void DrawHand(int hour, int min, int sec)

{

double ahour, amin, asec; //时分秒的弧度值

int xhour, yhour, xmin, ymin, xsec, ysec; //时分秒针的端点坐标

asec = sec  2  PI / 60;

amin = min  2  PI / 60 + asec / 60; //加上秒数带来的偏移

ahour = hour  2  PI / 12 + amin / 12;

/

已走的格数 与 自己要走的格数的比例

+    

下级已走的弧度 与 自己要走的格数的比例

/

xsec = int(120  sin(asec)); //120为秒针长度

ysec = int(120  cos(asec));

xmin = int(100  sin(amin));

ymin = int(100  cos(amin));

xhour = int(70  sin(ahour));

yhour = int(70  cos(ahour));

//绘制表针

setlinestyle(PS_SOLID, 2);

setcolor(RED);

line(320 + xsec, 240 - ysec, 320 - xsec / 3, 240 + ysec / 3); 

setlinestyle(PS_SOLID, 5);

setcolor(YELLOW);

line(320 + xmin, 240 - ymin, 320 - xmin / 3, 240 + ymin / 3);

setlinestyle(PS_SOLID, 7);

setcolor(LIGHTGREEN);

line(320 + xhour, 240 - yhour, 320 - xhour / 3, 240 + yhour / 3);

//自定义main函数时,手动将样式置回初始:

setlinestyle(PS_SOLID, 1);

setlinecolor(WHITE);

}

#include<iostream>

#include<windowsh>

using namespace std;

class Clock{

    public:

        Clock(short h=0,short m=0,short s=0):h(h),m(m),s(s){

        }

        void displayTime();

    private:

        short h;

        short m;

        short s;

};void Clock::displayTime(){

    while(true){

        cout<<h<<':'<<m<<':'<<s<<"   ";

        Sleep(1000);//一秒更新一次 

        cout<<'\r';

        if(!(s=++s%60))

            if(!(m=++m%60))

                h=++h%24;

    }

} int main()

{

    Clock A(12,20,30);//初始时间

    AdisplayTime();//更新函数

    return 0;

}

/

12:20:30 

/

1这是用windows api写的程序。所以要求是纯c的话就没有办法了

2其中定时用了两种方法。一种是用取消息。另一种是延时队列。这里只使用了取消息的方法。延时队列由于我机器上是vc60,CreateTimerQueue在本人机器上无法使用,需要新的sdk,所以没有加以验证,但取消息的方式是可行的。

3稍稍验证了下,基本满足要求。

以上就是关于C语言模拟时钟的代码,在vc++环境中运行。全部的内容,包括:C语言模拟时钟的代码,在vc++环境中运行。、C语言 用devc++编写一个模拟时钟,最简单那种就行,但要能在devc++上运行。、用C语言编写一个模拟windows自带的电子时钟程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9454722.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存