Microsoft Office 系列應用程式廣泛採用扁平化風格的下拉式方塊。本文介紹 CXTFlatComboBox 類別,它是 Codejock Xtreme Toolkit 的元件之一,可輕鬆將標準 CComboBox 控制項外觀扁平化。原始碼免費開放使用。

XTFlatComboBox.h 與 XTFlatComboBox.cpp 加入專案。#include "XTFlatComboBox.h"CComboBox 成員變數,再手動將型別改為 CXTFlatComboBox。本範例為典型對話方塊應用程式,包含兩個扁平化下拉式方塊:
每個方塊搭配一個核取方塊控制啟用/停用狀態。
//{{AFX_DATA(CFlatComboDemoDlg)
enum { IDD = IDD_FLATCOMBODEMO_DIALOG };
CXTFlatComboBox m_DDCombo; // Dropdown 樣式
CXTFlatComboBox m_DLCombo; // Droplist 樣式
BOOL m_bDDAutoComp; // 自動完成核取方塊
BOOL m_bDDDisable; // Dropdown 停用核取方塊
BOOL m_bDLDisable; // Droplist 停用核取方塊
//}}AFX_DATA
//{{AFX_DATA_MAP(CFlatComboDemoDlg)
DDX_Control(pDX, IDC_DROPDOWN_COMBO, m_DDCombo);
DDX_Control(pDX, IDC_DROPLIST_COMBO, m_DLCombo);
DDX_Check(pDX, IDC_DROPDOWN_AUTOCOMP, m_bDDAutoComp);
DDX_Check(pDX, IDC_DROPDOWN_DISABLE, m_bDDDisable);
DDX_Check(pDX, IDC_DROPLIST_DISABLE, m_bDLDisable);
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CFlatCmboxDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_BN_CLICKED(ID_APP_ABOUT, OnAbout)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_DROPDOWN_DISABLE, OnDropdownDisable)
ON_BN_CLICKED(IDC_DROPLIST_DISABLE, OnDroplistDisable)
ON_BN_CLICKED(IDC_DROPDOWN_AUTOCOMP, OnDropdownAutocomp)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
OnCtlColor 用於自訂子控制項 (按鈕、編輯框、下拉式方塊等) 的文字與背景顏色。但在實測中發現 Dropdown 樣式的下拉式方塊顏色變更無效,原因在於其內部編輯控制項為獨立視窗,訊息傳遞機制不同。若有解決方案歡迎分享交流。
CXTFlatComboBox 以最小代價實現 Office 風格扁平化外觀,適合需快速美化介面的 MFC 專案。範例完整展示了兩種樣式的建立、資料交換、狀態控制與自訂繪製處理,可直接套用至實際開發中。