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

C++ Builder 3.0 製作桌面動畫精靈:不規則視窗 + 定時器幀動畫

     編輯:關於C++

桌面寵物/動畫精靈 (如追蹤滑鼠的貓咪) 實現原理極其簡單:準備連續幀圖片,建立不規則形狀視窗 (SetWindowRgn),以 Timer 驅動視窗移動與幀切換。本文以 BCB 3.0 為例,示範一個向上飄動的圓形動畫精靈。

核心 API

  • SetWindowRgn(HWND, HRGN, TRUE):設定視窗可見區域為指定區域 (如圓形、多邊形),實現不規則視窗。
  • CreateEllipticRgn(x1, y1, x2, y2):建立橢圓/圓形區域。
  • Timer 元件:定時觸發移動與重繪。

完整實作步驟

1. 專案設置

  • 新建標準專案。
  • 表單放置 Timer1,Enabled=false、Interval=150 (約 6.7 FPS)。
  • Unit1.h 引入:#include <winuser.h>、#include <wingdi.h>。

2. FormCreate:建立圓形視窗

void __fastcall TForm1::FormCreate(TObject *Sender) {
    BorderStyle = bsNone;           // 無邊框
    Timer1->Enabled = false;
    Timer1->Interval = 150;
    // 建立 80x80 圓形區域並套用至視窗
    SetWindowRgn(Handle, CreateEllipticRgn(0, 0, 80, 80), TRUE);
}

3. FormPaint:繪製圓形圖形

void __fastcall TForm1::FormPaint(TObject *Sender) {
    Canvas->Pen->Width = 1;
    Canvas->Pen->Style = psSolid;
    Canvas->Pen->Color = clRed;
    Canvas->Brush->Color = clRed;
    Canvas->Ellipse(0, 0, 79, 79); // 在客戶區繪製滿視窗圓形
}

4. FormMouseDown:滑鼠控制啟動/結束

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
    TShiftState Shift, int X, int Y) {
    if (Button == mbLeft)  Timer1->Enabled = true;  // 左鍵開始
    if (Button == mbRight) Close();                 // 右鍵退出
}

5. Timer1Timer:向上移動視窗

void __fastcall TForm1::Timer1Timer(TObject *Sender) {
    if (Top > 1) Top -= 2;      // 每幀向上 2 像素
    else Timer1->Enabled = false; // 到達頂部停止
}

編譯測試

  1. 儲存專案並編譯 (F9)。
  2. 執行程式,桌面出現紅色圓形。
  3. 左鍵點擊圓形,它開始向上飄動;右鍵點擊退出。

進階擴充方向

關鍵技術總結

  1. 不規則視窗:SetWindowRgn 是核心,區域可為任意形狀組合。
  2. 幀動畫:Timer 驅動,簡單易懂;高幀率需求可用 timeSetEvent (參考文章 7869) 或多媒體計時器。
  3. 桌面級顯示:BorderStyle=bsNone + FormStyle=fsStayOnTop 確保永遠在最上層。
  4. 資源管理:動畫幀圖片建議編譯為資源 (.res) 內嵌 EXE,避免外部檔案依賴。

此範例雖簡單,但包含了桌面動畫精靈的所有核心要素。開發者可在此基礎上豐富美術資源、邏輯行為,打造生動有趣的桌面伴侶應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
功能實現要點
多幀動畫 (走路、飛行)準備連續幀 BMP/PNG,Timer 事件中切換 Image->Picture 或 Canvas->Draw 不同幀。
追蹤滑鼠游標Timer 中讀取 Mouse->CursorPos,計算向量逐步移動視窗 Left/Top。
不規則形狀 (角色外型)用透明色 BMP 建立區域:CreatePolygonRgn 或掃描位圖透明像素生成矩形區域組合 (參考文章 7924)。
互動行為 (點擊反應、對話)滑鼠事件中切換狀態機,播放對應動畫序列。
多精靈同時運行每個精靈一個 Form 實例,或單 Form 內管理多個圖層位置與區域。
透明背景與 Alpha 混合Win2000+ 使用 WS_EX_LAYERED + PNG Alpha 通道;Win9x 需手工合成 (參考文章 7922)。