ColorComboBoxライブラリは、MFC(Microsoft Foudation Class)拡張ライブラリであり、CComboBoxから派生した、色を選択するコンボボックスコントロールである。このライブラリは、コンボボックス内にテキストではなく様々な色見本を登録し選択する機能を提供している。また色見本にない色を選べるように、「その他...」も登録可能であり、これにより色の設定コモンダイアログが開き任意の色を設定可能である。
ColorComboBoxライブラリはC++言語で書かれており、ソースコードのほか、ダイナミックリンクライブラリ(*.dll)の形で提供される。オープンソースで、ライセンスはオープンソースのLGPL又はMPLのデュアルライセンスである。

▲デフォルトの見え方

▲コンボボックスを展開いたときの様子

▲その他...を選ぶと、Windows標準の色の設定パレットへ。
CColorComboBoxは、MFCの拡張クラスであり、CComboBoxより派生する。
CObject └CWnd └CComboBox └CColorComboBox
主にダイアログボックス内にコンボボックス同様に配置して使う。ただし、リソーススクリプト上では配置できないので、CDialog::OnCreateで手動で作成し、CDialog::OnInitDialogで手動で位置合わせする。ここではリソーススクリプト上でダミーのStaticを配置し、そこに手動でCColorComboBoxを重ねる方法を示す。また、AddSampleColor関数を使い色見本をコンボボックスに追加できる。
class CColorComboBox143TestDlg : public CDialog {
...
CColorComboBox m_theColorComboBox;
...
};
int CColorComboBox143TestDlg::OnCreate (LPCREATESTRUCT lpCreateStruct) {
if (CDialog::OnCreate(lpCreateStruct) == -1) {
return -1;
}
// カラーコンボボックスの作成
m_theColorComboBox.Create (
WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_VSCROLL,
CRect (10, 10, 300, 300), this, IDC_COLOR_COMBO_BOX);
// サンプルカラーの追加
m_theColorComboBox.AddSampleColor (RGB (0, 0, 0));
m_theColorComboBox.AddSampleColor (RGB (255, 0, 0));
m_theColorComboBox.AddSampleColor (RGB (0, 255, 0));
m_theColorComboBox.AddSampleColor (RGB (0, 0, 255));
m_theColorComboBox.AddSampleColor (RGB (255, 255, 0));
m_theColorComboBox.AddSampleColor (RGB (0, 255, 255));
m_theColorComboBox.AddSampleColor (RGB (255, 255, 255));
m_theColorComboBox.AddSampleColor (COLORCOMBOBOX_OTHER);
return 0;
}
BOOL CColorComboBox143TestDlg::OnInitDialog () {
CDialog::OnInitDialog();
...
// カラーコンボボックスの位置とサイズ調整
CRect rcStaticDummy;
CWnd* pStaticDummy = GetDlgItem (IDC_STATIC_DUMMY);
pStaticDummy->GetWindowRect (&rcStaticDummy);
this->ScreenToClient (&rcStaticDummy);
m_theColorComboBox.MoveWindow (&rcStaticDummy);
pStaticDummy->DestroyWindow ();
return TRUE;
}
オペレーションを参照。
上記の場合、m_theComboBoxは親ウィンドウの破棄と同時に自動で行われるので、何もしなくてよい。
ソースコードで、Windows及びMFC関係のものを#includeしてから、#include "ColorComboBox.h"をすること。ファイル名だけでなくヘッダーファイルのパスを通してくこと。
プロジェクトの設定-詳細で、「共有DLLでMFCを使う」「Unicode文字セットを使用する」を選択すること。
プロジェクトの設定-C/C++-プリプロセッサ-プリプロセッサの定義で、_UNICODE, UNICODEを有効にすること。
プロジェクトの設定-リンカ-入力-追加の依存ファイルで、"ColorComboBox(d).lib"を追加すること。ファイル名だけでなく、パスを通しておくこと。
Visual Stuido 2015以降では、MFCはデフォルトのC/C++デスクトップ開発に付属しておりません。MFCをインストールしていない場合は、Visual Studio Intallerで、MFCのオプションを追加インストールする必要があります。
このライブラリを使った最小限のCComboBox143Testも別途配布しておりますので参考にしてください。
| 変数定義 | 解説 |
|---|---|
| COLORREF m_clrCurColor; | 現在アクティブな色をRGB値で保持する。protectedなので直接操作できない。 |
| 関数定義 | 引数 | 戻り値 | 解説 |
|---|---|---|---|
| COLORREF GetCurColor () const; | なし | RGB値 | 現在アクティブな色を取得する。 |
| BOOL SetCurColor (COLORREF clr); | clr:RGB値 | 正常終了:TRUE 異常終了:FALSE |
現在アクティブな色を設定する。さらに、その色が色見本に登録されていれば、その項目をアクティブにし、登録されていなければ、どの項目もディアクティブにする。 |
| void ClearSampleColor (); | なし | なし | コンボボックスに登録されている色見本をすべて削除する。 |
| BOOL AddSampleColor (COLORREF clr); | clr:RGB値 | 結果的にアクティブになったインデックス。なければCB_ERR。 | コンボボックスに色見本を追加する。さらに、その色が現在アクティブな色と一致すれば、その項目をアクティブにし、一致しなければ、どの項目もディアクティブにする。引数にCOLORCOMBOBOX_OTHERを与えた場合、「その他...」の項目が追加され、ユーザーは顧問パレットより任意の色を選択できるようになる。 |
| COLORREF CColorComboBox::GetSampleColor (int nIndex) const; | nIndex:インデックス(0オリジン) | RGB値 | nIndex番目に登録されているの色見本の色を取得する。 |
| int SetSampleColor (int nIndex, COLORREF clr); | nIndex:インデックス(0オリジン) clr:設定する色 |
結果的にアクティブになったインデックス。なければCB_ERR。 | nIndex番目に登録されているの色見本の色を設定する。さらにその色が現在アクティブな色に一致すれば、その項目をアクティブにし、一致しなければ、ディアクティブにする。 |
| ヴァージョン | 開発環境 | 特記事項 |
|---|---|---|
| ColorComboBox40 | Visual C++ 4.0 | MBCS, 32bit |
| ColorComboBox90 | Visual Studio 2008 Standard | MBCS, 32bit |
| ColorComboBox140 | Visual Studio 2015 Community | UNICODE, 64bit対応 |
| ColorComboBox143 | Visual Studio 2022 Community | UNICODE, 64bit対応 |