在視窗繪圖中,文字陰影效果能增強可讀性與視覺層次。關鍵在於將背景模式設為透明 (TRANSPARENT),使後繪製的文字不會被不透明背景遮蓋。本文示範以紅色文字疊加黑色陰影的簡單實作。
void CShadowTextView::OnDraw(CDC* pDC)
{
CRect rcView;
GetClientRect(&rcView);
CString str(_T("Awesome Shadow Text..."));
// 設定背景模式為透明
pDC->SetBkMode(TRANSPARENT);
// 1. 繪製黑色陰影文字 (偏移 1,1)
rcView.OffsetRect(1, 1);
pDC->SetTextColor(RGB(0, 0, 0));
pDC->DrawText(str, str.GetLength(), &rcView,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
// 2. 繪製紅色主文字 (回到原位置)
rcView.OffsetRect(-1, -1);
pDC->SetTextColor(RGB(255, 0, 0));
pDC->DrawText(str, str.GetLength(), &rcView,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
| 步驟 | 說明 |
|---|---|
SetBkMode(TRANSPARENT) | 關鍵:讓文字背景透明,後繪文字不會蓋掉先繪文字。 |
OffsetRect(1,1) | 建立陰影偏移量,視覺上形成立體感。 |
| 先畫陰影後畫主文字 | 繪製順序決定層疊關係。 |
DT_SINGLELINE | DT_CENTER | DT_VCENTER | 單行置中對齊,自動處理換行與垂直置中。 |
OffsetRect(2,2)) 可改變陰影深度。GetTextExtentPoint32 計算文字範圍,精確控制繪製區域。SetTextAlign 實現不同對齊方式。GradientFill 或 Alpha Blending 產生漸層/半透明陰影。透明背景模式是 GDI 文字特效的基石。僅需幾行程式碼即可實現專業級陰影文字,廣泛應用於標題列、按鈕、狀態列等介面元素。