VC++ 制作一個簡易的控制台時鍾應用


1、下載EasyX Library for C++ (http://www.easyx.cn/)

  直接下載:EasyX_20151015(beta)

     EasyX 繪圖庫目前支持 Visual C++ 6.0 / 2008 / 2010 / 2012。下載的壓縮包解壓縮后,執行 Setup.hta 安裝即可。

  

 

     

     

2、VS建立控制台應用程序,新建cpp文件,輸入代碼: 

// 頭文件
#include <graphics.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>

// 宏定義
#define PI 3.141592654

// 函數聲明
void Draw_Dial();                                            // 繪制靜態的表盤
void Draw_Hand(int hour, int minute, int secend);            // 繪制表針

//主函數
int main( void )
{
    initgraph(640, 480);                                    // 初始化一個圖形界面 640*480
    Draw_Dial();
    setwritemode(R2_XORPEN);                                // 設置XOR繪圖模式
    SYSTEMTIME time;                                        // 定義一個時間結構體用來保存當前的時間
    while (!_kbhit())
    {
        GetLocalTime(&time);                                // 獲取當前的時間
        Draw_Hand(time.wHour,time.wMinute,time.wSecond);    // 把表針繪制出來
        Sleep(1000);                                        // 間隔1秒(1000毫秒)
        Draw_Hand(time.wHour, time.wMinute, time.wSecond);  // 把表針繪制出來
    }
    closegraph();                                            // 關閉圖形界面
    return 0;
}

// 繪制靜態的表盤
void Draw_Dial()
{
    setcolor(GREEN);                                        // 繪制邊界
    circle(320, 240, 160);                                    // 畫圓函數的參數:320 240坐標 160是圓的半徑大小
    circle(320, 240, 60);
    circle(320, 240, 2);

    // 圖形界面的輸出文本信息
     outtextxy(260, 420, _T("GOOD GOOD STUDY"));
     outtextxy(283, 440, _T("DAY DAY UP"));
    
    // 繪制圖形刻度
    setcolor(WHITE);
    int x, y;
    for (int i = 0; i < 60; i++)
    {
        x = 320 + int(145 * sin(PI * 2 * i / 60));
        y = 240 + int(145 * cos(PI * 2 * i / 60));
        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 < 60; i++)
    {
        sprintf_s(ch,"%d",i);
        x = 314 + int(125 * sin(PI * 2 * i / 60));
        y = 235 + int(125 * cos(PI * 2 * i / 60));
        if (i % 5 == 0)
        {
            switch (i)
            {
            case 0:  outtextxy(x, y, _T("6")); break;
            case 5:  outtextxy(x, y, _T("5"));  break;
            case 10: outtextxy(x, y, _T("4"));  break;
            case 15: outtextxy(x, y, _T("3"));  break;
            case 20: outtextxy(x, y, _T("2"));  break;
            case 25: outtextxy(x, y, _T("1"));  break;
            case 30: outtextxy(x, y, _T("12"));  break;
            case 35: outtextxy(x, y, _T("11"));  break;
            case 40: outtextxy(x, y, _T("10"));  break;
            case 45: outtextxy(x, y, _T("9"));  break;
            case 50: outtextxy(x, y, _T("8")); break;
            case 55: outtextxy(x, y, _T("7")); break;;
            default: break;
            }
        }
    }
}

// 繪制表針
void Draw_Hand(int hour, int minute, int second)
{
    double h_hour, h_minute, h_second;                                // 三個弧度值
    int x_hour, y_hour, x_minute, y_minute, x_second, y_second;       // 末端位置
    // 計算弧度值
    h_second = second * 2 * PI / 60;
    h_minute = minute * 2 * PI / 60 + h_second / 60;
    h_hour = hour * 2 * PI / 12 + h_minute / 12;
    // 計算末端位置
    x_second = int(120 * sin(h_second)); 
    y_second=int(120 * cos(h_second));
    x_minute = int(100 * sin(h_minute)); 
    y_minute = int(100 * cos(h_minute));
    x_hour = int(70 * sin(h_hour)); 
    y_hour = int(70 * cos(h_hour));
    // 繪制秒針
    setlinestyle(PS_SOLID, 2);                                        // PS_SOILD 實線 2像素 線條的粗細
    setcolor(RED);
    line(320 + x_second, 240 - y_second, 320 - x_second / 3, 240 + y_second / 3);
    // 繪制分針
    setlinestyle(PS_SOLID, 6);                                        // PS_SOILD 實線 2像素 線條的粗細
    setcolor(YELLOW);
    line(320 + x_minute, 240 - y_minute, 320 - x_minute / 5, 240 + y_minute/5);
    // 繪制時針
    setlinestyle(PS_SOLID, 7);                                        // PS_SOILD 實線 2像素 線條的粗細
    setcolor(GREEN);
    line(320 + x_hour, 240 - y_hour, 320 - x_hour / 5, 240 + y_hour/5);
}

3、編譯運行

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM