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

VC++ 打造 Office 風格扁平化下拉式方塊:CXTFlatComboBox 類別完整應用指南

     編輯:關於VC++

簡介

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

扁平化下拉式方塊範例程式執行畫面

快速上手三步驟

  1. 將 XTFlatComboBox.h 與 XTFlatComboBox.cpp 加入專案。
  2. 在需使用的檔案包含標頭檔:#include "XTFlatComboBox.h"
  3. 使用類別精靈新增 CComboBox 成員變數,再手動將型別改為 CXTFlatComboBox。

範例程式架構說明

本範例為典型對話方塊應用程式,包含兩個扁平化下拉式方塊:

  • Dropdown 樣式 (IDC_DROPDOWN_COMBO):可編輯輸入,支援自動完成功能。
  • Droplist 樣式 (IDC_DROPLIST_COMBO):僅能選取清單項目,不可編輯。

每個方塊搭配一個核取方塊控制啟用/停用狀態。

對話方塊標頭檔資料成員宣告

//{{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

DoDataExchange 控制項繫結

//{{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()

關鍵技術點:WM_CTLCOLOR 處理與已知限制

OnCtlColor 用於自訂子控制項 (按鈕、編輯框、下拉式方塊等) 的文字與背景顏色。但在實測中發現 Dropdown 樣式的下拉式方塊顏色變更無效,原因在於其內部編輯控制項為獨立視窗,訊息傳遞機制不同。若有解決方案歡迎分享交流。

總結

CXTFlatComboBox 以最小代價實現 Office 風格扁平化外觀,適合需快速美化介面的 MFC 專案。範例完整展示了兩種樣式的建立、資料交換、狀態控制與自訂繪製處理,可直接套用至實際開發中。

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