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

VC++ 介面繪製 3D 立體文字效果:SetTextColor 與像素錯位技巧

     編輯:VC 教學

實作原理

3D 文字效果透過 高光 與 陰影 兩層文字疊加產生:

  1. 先以系統高光色 (COLOR_3DHILIGHT) 繪製文字,座標向右下偏移 1 像素。
  2. 再以系統陰影色 (COLOR_3DSHADOW) 繪製相同文字,座標為原位置。
  3. 背景設為透明模式 (TRANSPARENT),兩層文字重疊形成凸起立體感。

完整 OnPaint 實作

void CMy3DTextDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this);
        SendMessage(WM_ICONERASEBKGND, (WPARAM)dc.GetSafeHdc(), 0);
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CPaintDC dc(this);
        CString str = _T("電腦報,我們的學習報");

        // 建立字型
        CFont font;
        font.CreateFont(44, 0, 0, 0, 550, FALSE, FALSE, 0,
                        DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
                        CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
                        DEFAULT_PITCH | FF_SWISS, _T("Arial"));

        dc.SetBkMode(TRANSPARENT);
        CRect rectText;
        GetClientRect(&rectText);
        CFont* pOldFont = dc.SelectObject(&font);

        // 1. 繪製高光層(右下偏移 1 像素)
        COLORREF oldColor = dc.SetTextColor(::GetSysColor(COLOR_3DHILIGHT));
        dc.DrawText(str, rectText + CPoint(1, 1),
                    DT_SINGLELINE | DT_CENTER | DT_VCENTER);

        // 2. 繪製陰影層(原位置)
        dc.SetTextColor(::GetSysColor(COLOR_3DSHADOW));
        dc.DrawText(str, rectText,
                    DT_SINGLELINE | DT_CENTER | DT_VCENTER);

        // 還原
        dc.SetTextColor(oldColor);
        dc.SelectObject(pOldFont);
    }
}

關鍵 API 與參數

函數/常數用途
CreateFont建立邏輯字型,高度 44、寬度 0(自動)、字重 550 (Bold)、字體 Arial
SetBkMode(TRANSPARENT)文字背景透明,避免矩形塊遮蓋
GetSysColor(COLOR_3DHILIGHT)系統 3D 高光色(通常近白)
GetSysColor(COLOR_3DSHADOW)系統 3D 陰影色(通常深灰)
DrawText + DT_CENTER | DT_VCENTER文字在矩形區域水平垂直置中
rectText + CPoint(1,1)利用 CRect 運算子多載產生偏移矩形

進階擴充

  • 動畫淡入/淡出:在 OnTimer 中漸變 SetTextColor 的 Alpha 值(需搭配 AlphaBlend 或 GDI+)。
  • 自訂顏色:替換 GetSysColor 為 RGB(255,255,200) (高光) / RGB(80,80,80) (陰影) 等。
  • 多行文字:移除 DT_SINGLELINE,調整 rectText 高度與 DT_WORDBREAK。
  • GDI+ 版本:使用 Graphics::DrawString 搭配 LinearGradientBrush 可得更平滑、可縮放的 3D 效果。

應用場景

  • 應用程式標題列、啟動畫面品牌文字。
  • 儀表板關鍵數值強調顯示。
  • 遊戲分數、倒數計時視覺強化。

只需 20 行核心代碼,即可為 MFC 對話框或視圖增添專業級 3D 文字效果,提升介面質感與品牌辨識度。

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