首頁>技術>

/*

功能:顯示時間

文中有註釋

編譯器以及環境:VS2013/WINDOWS7

完整程式碼如下:

*/

#include<graphics.h>

#include<time.h>

#include<math.h>

#include<conio.h>

#include<stdio.h>

#define PI 3.141592653589793

//畫時鐘盤

void draw();

//畫表針

void drawHand(int hour, int minute, int second, int Milliseconds);

//顯示年月日 星期

void showDate(int year, int month, int date, int day);

int main()

{

//建立視窗

initgraph(600, 600);

setwritemode(R2_XORPEN);

//畫時鐘盤

draw();

//畫表針

//drawHand();

//定義時間變數儲存時間

SYSTEMTIME ti;

while(1)

{

//獲取當前時間

GetLocalTime(&ti);

//動態畫時鐘指標

drawHand(ti.wHour, ti.wMinute, ti.wSecond, ti.wMilliseconds);

//顯示上午AM 或下午PM

setbkmode(TRANSPARENT);

if (ti.wHour>0 && ti.wHour<12)

{

outtextxy(75, 70, _T("AM."));

}

else

{

outtextxy(75, 70, _T("PM."));

}

//顯示年月日 星期

showDate(ti.wYear, ti.wMonth,ti.wDay, ti.wDayOfWeek);

//每隔1毫秒重畫時鐘指標

Sleep(999);

drawHand(ti.wHour, ti.wMinute, ti.wSecond, ti.wMilliseconds);

}

/*

typedef struct _SYSTEMTIME {

WORD wYear;

WORD wMonth;

WORD wDayOfWeek;

WORD wDay;

WORD wHour;

WORD wMinute;

WORD wSecond;

WORD wMilliseconds;

} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

*/

closegraph();

return 0;

}

//繪製錶針

void drawHand(int hour, int minute, int second,int Milliseconds)

{

//對應錶盤偏轉弧度制 12點位置定了0度 h m s分別表示時/分/秒對應弧度

double h, m, s;

//以中心為起點針的繪製的結束點位置座標

double xh, yh, xm, ym, xs, ys;

//每毫秒所有針轉過弧度值

double a = PI / 30000.0;

//錶盤中最小刻度弧度值

double b = PI/30.0;

//設定座標原點

setorigin(300, 300);

//設定分針長180 / 時針長155 / 秒針長190

//利用三角函式求出針所在位置

//y軸正方向朝下

s = second*1000.0 * a;

m = minute*b+second*50/3*a;

h = hour*b*5+minute*b/12;

xh = 155.0 * sin(h);

yh = 155.0 * cos(h);

xm = 180.0 * sin(m);

ym = 180.0 * cos(m);

xs = 190.0 * sin(s);

ys = 190.0 * cos(s);

//繪製秒針

setlinestyle(PS_SOLID | PS_JOIN_ROUND | PS_ENDCAP_ROUND, 3);

setlinecolor(RED);

line(0, 0, xs, -ys);

//繪製分針

setlinestyle(PS_SOLID | PS_JOIN_ROUND | PS_ENDCAP_ROUND, 5);

setlinecolor(GREEN);

line(0, 0, xm, -ym);

//繪製時針

setlinestyle(PS_SOLID | PS_JOIN_ROUND | PS_ENDCAP_ROUND, 10);

setlinecolor(GREEN);

line(0, 0, xh, -yh);

}

//畫時鐘盤

void draw()

{

//這種視窗中心為原點

setorigin(300, 300);

//繪製外圓

circle(0, 0, 250);

//繪製內圓

circle(0, 0, 225);

//繪製針軸小圓點

circle(0, 0, 2);

//輔助圓

//circle(0, 0, 190);

//繪製刻度

int x, y,x1,y1;

for (int i = 0; i < 60;i++)//2*PI=360度 時刻度間隔弧度為2*PI/12即PI/6 ; 分刻度間隔弧度為2*PI/60

{

//設定字型

settextstyle(22, NULL, _T("楷體"));

x = 220*sin(i*PI/30);

y = 220*cos(i*PI/30);

x1 = 210 * sin(i*PI/30);

y1 = 210 * cos(i*PI/30);

//翻轉座標成數學座標

y = -1 * y;

y1 = -1 * y1;

switch(i)

{ //繪製3,6,9,12數字對應的位置

//不用使用for迴圈因為了方便微調各個數字文字座標

case 0:

outtextxy(x1-10, y1-4, _T("12"));

break;

case 15:

outtextxy(x1-8, y1-10, _T("3"));

break;

case 30:

outtextxy(x1-5, y1-15, _T("6"));

break;

case 45:

outtextxy(x1, y1-10, _T("9"));

break;

case 5:

outtextxy(x1-8 , y1-6 , _T("1"));

break;

case 10:

outtextxy(x1-8 , y1-7, _T("2"));

break;

case 20:

outtextxy(x1-7 , y1-14 , _T("4"));

break;

case 25:

outtextxy(x1-6 , y1-14 , _T("5"));

break;

case 35:

outtextxy(x1-3 , y1-13 , _T("7"));

break;

case 40:

outtextxy(x1-1 , y1-12 , _T("8"));

break;

case 50:

outtextxy(x1-2 , y1-7 , _T("10"));

break;

case 55:

outtextxy(x1-2 , y1-7 , _T("11"));

break;

default:

break;

}

if (i % 5 == 0)

{

setfillcolor(RGB(255,255,0));

fillrectangle(x - 4, y - 4, x +4, y +4);

}

else

fillcircle(x, y, 2);

}

}

//顯示年/月/日 星期幾

void showDate(int year, int month, int date ,int day)

{

setorigin(0, 0);

//struct dday

//{

wchar_t y[10];

wchar_t m[10];

wchar_t d[10];

wchar_t wd[7][10] = {_T("星期日"),_T("星期一"),_T("星期二"),_T("星期三"),_T("星期四"),_T("星期五"),_T("星期六")};

//}D;

_itow_s(year, y,10);

wcscat(y, _T("年"));

_itow_s(month, m, 10);

wcscat(m,_T("月"));

_itow_s(date, d, 10);

wcscat(d,_T("日"));

//去除文字背景色

setbkmode(TRANSPARENT);

outtextxy(205, 370, y);

outtextxy(285, 370, m);

outtextxy(320, 370, d);

switch (day)

{

case 0:

outtextxy(355, 20, wd[0]);

break;

case 1:

outtextxy(275, 400, wd[1]);

break;

case 2:

outtextxy(355, 20, wd[2]);

break;

case 3:

outtextxy(355, 20, wd[3]);

break;

case 4:

outtextxy(355, 20, wd[4]);

break;

case 5:

outtextxy(355, 20, wd[5]);

break;

case 6:

outtextxy(355, 20, wd[6]);

break;

default:

outtextxy(355, 20, wd[7]);

break;

}

}

//成品截圖,因為時鐘是動態的,圖是靜態所以圖是不會動的

//流程圖

19
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • HttpPost 呼叫 Post 的時候字符集