MS Office家族產品中常常見到扁平式組合框,本文將介紹一個C++類:CXTFlatComboBox ,用這個類可以在自己的程序中輕松實現扁平式組合框,也就是讓標准的CComboBox控件外觀扁平化。CXTFlatComboBox類是codejoke開發工具包Xtreme Toolkit的一個成員。任何人都可以免費使用這個類的源代碼。
使用方法:
將CXTFlatComboBox類的頭文件 XTFlatComboBox.h 和實現文件 XTFlatComboBox.cpp添加到工程中,然後在使用這個類的文件中包含頭文件: #include "XTFlatComboBox.h"
接著在實現文件中聲明類實例,你可以用類向導(Class Wizard)先添加一個CComboBox成員變量:(Class Wizard -> Member Variables Tab -> Add Variable ),然後將CComboBox改為CXTFlatComboBox。成員變量主要是用來對組合框進行控制。
本文例子是一個典型的基於對話框的程序,對話框裡有兩個組合框,每個組合框都有一個復選按鈕控制其屏蔽狀態,可編輯的組合框還帶一個“自動完成”的功能控制。圖一是本文例子程序的運行畫面:
圖一 例子程序
下面是程序代碼的簡單的說明:
頭文件:
例子程序的兩個組合框式樣分別為Droplist 和 Dropdown,它們的區別就不用多說了,前者可以輸入內容,後者則不能。
//{{AFX_DATA(CFlatComboDemoDlg)
enum { IDD = IDD_FLATCOMBODEMO_DIALOG };
//聲明類實例成員變量
CXTFlatComboBox m_DDCombo;
CXTFlatComboBox m_DLCombo;
//聲明其它的成員變量
BOOL m_bDDAutoComp;
BOOL m_bDDDisable;
BOOL m_bDLDisable;
//}}AFX_DATA
實現文件:在 DoDataExchange(CDataExchange* pDX)函數中實現對話框裡控制之間的數據交換。
//{{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)
//{{AFX_MSG_MAP(CFlatCmboxDlg)
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()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
例子程序裡OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 是 WM_CTLCOLOR 消息的處理例程,通過它可以改變對話框子窗口(也就是對話框裡的各個控制如按鈕、編譯框、組合框等)的字體顏色和背景顏色。有一點要注意:運行一下例子程序就會發現,程序中式樣為 Dropdown 的組合框其字體顏色和背景顏色改變代碼不工作。一時還沒找到好的辦法。如果哪位知道,別忘了告訴我.......