首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

數字時鐘替代實作:靜態控制項組合顯示法

     編輯:關於VC++

設計動機

參考 VCKBASE 上繪圖法數字時鐘(於靜態控制項上繪製七段顯示器),但該法需精確計算座標、控制項比例不當易變形。本文提出靜態控制項組合法:每個數字由 7 個獨立靜態控制項組成,透過顏色切換顯示數字,實作簡單且不易變形。

介面設計

將靜態文字控制項按七段顯示器排列(圖 a),ID 連續編號方便程式處理。每個數字佔 7 個控制項(IDC_STATIC1~7、8~14...)。背景加一矩形控制項,顏色與前景交替產生動態感。

核心類別:MyColor

class MyColor {
public:
    COLORREF c[10];  // 10 種預設顏色
    
    void PaintStatic(CWnd* dlg, COLORREF cr, CString str) {
        CClientDC dc(dlg);
        CRect rect;
        dlg->GetClientRect(&rect);
        CPen pen(PS_SOLID, 1, RGB(50, 0, 110));
        dc.SelectObject(&pen);
        CBrush brush(cr);
        dc.SelectObject(&brush);
        dc.Rectangle(rect);
        dc.SetBkMode(TRANSPARENT);
        dc.TextOut(rect.left + 10, rect.top + 5, str);
    }
};

主對話框類別 CClockDlg

成員變數

MyColor mc;  // 繪圖輔助物件

時間顯示拆解

void CClockDlg::DrawHour(int n) {
    int a = n / 10;  // 十位
    int b = n % 10;  // 個位
    DrawNumber(IDC_STATIC1, a);   // 十位起始 ID
    DrawNumber(IDC_STATIC8, b);   // 個位起始 ID
}

void CClockDlg::DrawMinute(int m) { /* 類似,IDC_STATIC15/22 */ }
void CClockDlg::DrawSecond(int s) { /* 類似,IDC_STATIC29/36 */ }

冒號閃爍

void CClockDlg::DrawDot() {
    COLORREF C = (n % 2 == 0) ? mc.c[2] : mc.c[7];  // 奇偶秒切換顏色
    for (int id = IDC_STATIC43; id <= IDC_STATIC46; id++)
        mc.PaintStatic(GetDlgItem(id), C, "");
}

核心:DrawNumber 依數字點亮對應段

void CClockDlg::DrawNumber(UINT nID, int n) {
    // 每個數字對應需點亮的段編號 (1~7)
    int segments[10][7] = {
        {1,2,3,5,6,7,0},     // 0
        {2,5,0,0,0,0,0},     // 1
        {1,3,4,5,6,0,0},     // 2
        {1,3,4,6,7,0,0},     // 3
        {2,3,4,7,0,0,0,0},   // 4
        {1,2,4,6,7,0,0},     // 5
        {1,2,4,5,6,7,0},     // 6
        {1,3,7,0,0,0,0},     // 7
        {1,2,3,4,5,6,7},     // 8
        {1,2,3,4,6,7,0}      // 9
    };
    int len[10] = {6,2,5,5,4,5,6,3,7,6};
    
    for (int j = 0; j < len[n]; j++) {
        mc.PaintStatic(GetDlgItem(nID + segments[n][j] - 1), mc.c[4], "");
    }
}

優缺點分析

優點缺點
實作簡單,邏輯直觀佔用大量控制項 ID
不易因視窗縮放變形閃爍處理需自行管理
易擴充至其他數字顯示場合非標準七段顯示器外觀

結語

此法適合快速原型開發、教學示範或對外觀要求不高的場合。經簡單擴充可應用於各類介面數字顯示需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved