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

Visual C++ MFC 控制項樣式與 CStatic 靜態標籤完整定制指南

     編輯:關於VC++

MFC 控制項體系概覽

Windows 使用者介面由標準控制項構成:CStatic、CButton、CEdit、CListBox、CComboBox、CScrollBar 等六大基礎類別,另加 Windows 95 引入的 15 種增強控制項。掌握控制項的外觀樣式與行為回應是開發專業級應用程式的基石。

CStatic 靜態標籤深度定制

建立基礎流程

CStatic* pStatic = new CStatic();
pStatic->Create(_T("Hello World"), 
                WS_CHILD | WS_VISIBLE | WS_BORDER | SS_CENTER,
                CRect(50, 80, 150, 150), 
                this,  // 父視窗
                IDC_STATIC);  // ID (靜態控制項通常用 -1 或 IDC_STATIC)

Create 參數詳解

參數說明
lpszText顯示文字內容
dwStyle樣式旗標組合 (WS_* + SS_*)
rect位置與大小 (相對父視窗客戶區)
pParentWnd父視窗指標
nID控制項識別碼

樣式旗標完整分類

繼承自 CWnd (WS_*)

樣式必要性功能
WS_CHILD必要子視窗,必須有父視窗
WS_VISIBLE必要可見,否則建立後隱藏
WS_DISABLED選用停用 (靜態標籤不接收輸入,通常不需)
WS_BORDER選用細線邊框

CStatic 專屬 (SS_*)

樣式顯示效果備註
SS_LEFT靠左對齊,自動換行預設
SS_CENTER置中對齊,自動換行常用
SS_RIGHT靠右對齊,自動換行
SS_LEFTNOWORDWRAP靠左,超寬截斷不換行單行標籤適用
SS_SIMPLE單行簡單顯示,忽略 CTLCOLOR效能最佳
SS_NOPREFIX& 字元不作為熱鍵前綴顯示 & 符號本身
SS_BLACKFRAME黑色矩形框 (視窗框架色)忽略文字
SS_GRAYFRAME灰色矩形框 (桌面色)忽略文字
SS_WHITEFRAME白色矩形框 (視窗背景色)忽略文字
SS_BLACKRECT實心黑色矩形忽略文字
SS_GRAYRECT實心灰色矩形忽略文字
SS_WHITERECT實心白色矩形忽略文字
SS_ICON顯示圖示 (文字為資源名稱)rect 僅定位置
SS_USERITEM使用者自繪需處理 WM_DRAWITEM

文字對齊與換行行為實測

  • SS_CENTER + 長文字:在矩形區域內逐行置中,超高則截斷
  • SS_LEFT + 長文字:靠左換行,同樣受限於矩形高度
  • SS_LEFTNOWORDWRAP:單行截斷,適合固定高度標籤
  • 矩形過小時:文字被裁切 (不會自動縮放字體)

矩形/框架顯示模式應用

// 分組框架效果
pStatic->Create(_T(""), WS_CHILD|WS_VISIBLE|SS_BLACKFRAME, r, this, IDC_GROUP_FRAME);
// 視覺分隔線
pStatic->Create(_T(""), WS_CHILD|WS_VISIBLE|SS_ETCHEDHORZ, r, this, IDC_SEPARATOR); // 需 Common Controls 6.0
// 背景塊
pStatic->Create(_T(""), WS_CHILD|WS_VISIBLE|SS_GRAYRECT, r, this, IDC_BG_BLOCK);

此模式下文字參數被忽略,習慣傳空字串。顏色跟隨系統配色方案 (控制台面板可調)。

字體定制:CFont 應用

建立與套用字體

// 類別成員變數
CFont m_fontTitle;

// 建構函數或 OnCreate 中
m_fontTitle.CreateFont(
    36,        // nHeight: 36 points (負值為邏輯單位,正值為裝置單位)
    0,         // nWidth: 0 = 自動依比例
    0,         // nEscapement: 文字基線角度 (0.1 度)
    0,         // nOrientation: 字元格角度
    FW_BOLD,   // nWeight: FW_NORMAL(400) / FW_BOLD(700) / 1-1000
    FALSE,     // bItalic: 斜體
    FALSE,     // bUnderline: 底線
    FALSE,     // cStrikeOut: 刪除線
    ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
    DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
    _T("Arial")  // 字型名稱
);

// 套用至控制項
pStatic->SetFont(&m_fontTitle);

// 重要:字體物件生命週期必須長於控制項使用期間
// 通常宣告為視窗類別成員,隨視窗銷毀自動釋放

CreateFont 關鍵參數

參數建議值/說明
nHeight負值 = 邏輯單位 (點數),如 -36 為 36 點;正值 = 像素高度
nWeightFW_DONTCARE(0), FW_NORMAL(400), FW_BOLD(700), FW_HEAVY(900)
字型名稱系統保證存在:Arial, Courier New, Times New Roman, Symbol, Wingdings
字集ANSI_CHARSET (西文), DEFAULT_CHARSET (系統預設), CHINESEBIG5_CHARSET (繁中)

常見字體陷阱

  • 區域變數 CFont:函數結束析構 → 控制項持有無效 HFONT → 顯示異常
  • 未指定字集:中文環境用 ANSI_CHARSET 會顯示亂碼,須用 CHINESEBIG5_CHARSET
  • 字型不存在:系統自動替換預設字型 (通常是 MS Shell Dlg)

CWnd 繼承的 Set 系列函數擴展

CStatic 繼承自 CWnd,可用以下函數進階定制:

函數用途
SetWindowText / GetWindowText執行期修改/取得文字
SetFont / GetFont字體設定/查詢
SetWindowPos位置、大小、Z-order 一次設定
MoveWindow移動+縮放 (內部呼叫 SetWindowPos)
ShowWindow(SW_HIDE/SW_SHOW)顯示/隱藏
EnableWindow(FALSE/TRUE)停用/啟用 (視覺變灰)
ModifyStyle / ModifyStyleEx執行期修改 WS_/WS_EX_ 樣式
SetDlgCtrlID修改控制項 ID

開發效率工具

MSDN 線上說明快速查詢

  • VC++ 6.0:F1 上下文說明、索引標籤搜尋
  • VS2005+:動態說明、物件瀏覽器 (Ctrl+Alt+J)、線上 MSDN
  • 搜尋關鍵字:CStatic::Create, SS_CENTER, CreateFont

多專案編譯策略

策略優點缺點
每專案獨立目錄隔離乾淨、並行建置佔用磁碟空間大
單一目錄切換原始檔節省空間、共用設定需手動切換、易混淆

教學階段建議獨立目錄;實務專案使用方案包含多專案結構。

最佳實踐總結

  1. 靜態標籤最少樣式:WS_CHILD | WS_VISIBLE + 對齊樣式
  2. 長文字預留足夠矩形高度,或用 SS_LEFTNOWORDWRAP 強制單行
  3. 視覺分組用 SS_*FRAME/RECT,文字傳空字串
  4. 字體物件宣告為視窗類別成員,確保生命週期
  5. 中文環境 CreateFont 必須指定 CHINESEBIG5_CHARSET (或 GB2312_CHARSET)
  6. 善用 ModifyStyle 動態切換樣式 (如錯誤訊息紅字/正常黑字)
  7. 複雜佈局改用對話框編輯器 + DDX_Control 關聯變數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved