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

MFC 繪製禁用狀態粗體文字特效 (DrawState 實作)

     編輯:VC 教學

前言

在 About 對話框或啟動畫面顯示帶有藝術感的「禁用狀態」粗體文字,能提升軟體專業形象。關鍵在於使用 CDC::DrawState 搭配 DSS_DISABLED 旗標,系統會自動產生立體陰影灰化效果。本文示範完整實作流程。

實作步驟

1. 類別成員變數宣告

class CDisableFontDlg : public CDialog
{
    CFont m_font;                // 字體物件
    static const TCHAR* DISPLAYSTR; // 顯示字串
    // ...
};

定義字串常數:#define DISPLAYSTR _T("Sailmer Agent")

2. 字體建立輔助函式

void CDisableFontDlg::SetFont(CString strFace, int nHeight = -16,
    int nWeight = FW_BOLD, BYTE bItalic = TRUE, BYTE bUnderline = FALSE)
{
    if (m_font.m_hObject) m_font.Detach(); // 釋放舊字體

    m_font.CreateFont(nHeight, 0, 0, 0, nWeight, bItalic, bUnderline,
        0, 0, 0, 0, 0, 0, strFace);
}

參數對應 LOGFONT 結構:高度、寬度、傾角、方向、粗細、斜體、底線、字元集等。

3. 初始化字體 (OnInitDialog)

BOOL CDisableFontDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    SetFont(_T("Verdana"), -25); // 25 點大小,粗體、斜體
    return TRUE;
}

4. 繪製禁用文字 (OnPaint)

void CDisableFontDlg::OnPaint()
{
    CPaintDC dc(this);

    CRect rect;
    GetWindowRect(&rect);
    ScreenToClient(&rect);

    CFont* pOldFont = dc.SelectObject(&m_font);

    // 計算文字範圍以置中
    CSize szText = dc.GetTextExtent(DISPLAYSTR, _tcslen(DISPLAYSTR));
    CPoint ptStart((rect.Width() - szText.cx) / 2, 10);

    // 核心:使用 DrawState 繪製禁用狀態文字
    dc.DrawState(ptStart, rect.Size(), DISPLAYSTR,
        DSS_DISABLED, // 禁用狀態:系統自動產生灰化立體效果
        TRUE, 0, (CBrush*)NULL);

    dc.SelectObject(pOldFont);
}

關鍵技術解析

API/旗標作用
CDC::DrawState高階繪圖函式,支援圖示、位圖、文字的多種狀態繪製 (正常、禁用、連結、熱點等)。
DSS_DISABLED指示繪製「禁用」視覺效果:灰色系、立體浮雕感,模擬系統禁用控制項外觀。
CFont::CreateFont建立邏輯字體,參數豐富控制字型外觀。
Detach將 HFONT 從 CFont 分離,避免重複建立時資源洩漏。

效果展示

禁用粗體文字效果圖

文字呈現灰白立體浮雕感,如同系統禁用按鈕文字,極具視覺張力。

擴展應用

  • 搭配 DSS_UNION、DSS_MONO 實現單色/聯合繪製模式。
  • 動態切換 DSS_NORMAL / DSS_DISABLED 回應使用者互動 (如授權狀態)。
  • 結合 AlphaBlend 實現半透明禁用效果 (需分層視窗支援)。

環境驗證

  • 作業系統:Windows XP
  • 編譯環境:Visual Studio .NET 2003 (VC7.1)
  • MFC 版本:7.1

結語

DrawState 是 GDI 中被低估的寶藏函式。善用 DSS_DISABLED 旗標,幾行程式碼即可產生專業級禁用文字特效,無需手工計算陰影像素,極大簡化介面美化工作量。

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