KgTheme は、ボタン、ラベル、コンボボックス等のコントロールや、 ダイアログそのものをテーマによって見た目を変更する事のできるライブラリです。
以下のような特徴を持っています。
| クラス名 | 基底クラス | 説明 |
|---|---|---|
| CThemeSet | なし | フォント、背景色、前景色、ビットマップ等のテーマリソースを管理するクラス |
| CThemeButton | CButton | テーマ化されたボタンコントロールクラス |
| CThemeCheckBox | CButton | テーマ化されたチェックボックスコントロールクラス |
| CThemeLabel | CStatic | テーマ化されたラベル(スタティックテキスト)コントロールクラス |
| CThemeGroupBox | CButton | テーマ化されたグループボックスコントロールクラス |
| CThemeProgressBar | CProgressCtl | テーマ化されたプログレスバーコントロールクラス |
| CThemeComboBox | CComboBox | テーマ化されたコンボボックスコントロールクラス |
| CThemeDialog | CDialog | テーマ化されたダイアログクラス |
このクラスは1つのTHEMESET構造体を持ち、 ボタンやチェックボックスといったテーマクラス、 ステータス毎にフォント、色、ビットマップ等の ターゲットのテーマリソースを管理します。
| テーマクラス | |
|---|---|
| TCID_DEFAULT | その他のテーマクラスにテーマリソースが割り当てられていない場合に使用される 一般的なテーマリソースを指定しておく事ができるテーマクラスです。 |
| TCID_BUTTON | CThemeButtonが参照するテーマクラスです。 |
| TCID_CHECKBOX | CThemeCheckBoxが参照するテーマクラスです。 |
| TCID_LABEL | CThemeLabelが参照するテーマクラスです。 |
| TCID_GROUPBOX | CThemeGroupBoxが参照するテーマクラスです。 |
| TCID_PROGRESSBAR | CThemeProgressBarが参照するテーマクラスです。 |
| TCID_COMBOBOX | CThemeComboBoxが参照するテーマクラスです。 |
| TCID_DIALOG | CThemeDialogが参照するテーマクラスです。 |
| TCID_END | CThemeSet::LoadThemeFromStruct() が構造体配列の最後を判断する為の値です。 |
| ターゲット | |
|---|---|
| TTID_FONT | テキスト描画用フォントを表します。 |
| TTID_BGCOLOR | 背景色を表します。 |
| TTID_FGCOLOR | 前景色を表します。 |
| TTID_BITMAP | 背景ビットマップを表します。大抵の場合、背景ビットマップが指定されると 背景色は無視されます。 |
| TTID_CHECKED | CThemeCheckBox用のチェック状態を示す ビットマップを表します。 |
| TTID_UNCHECKED | CThemeCheckBox用の非チェック状態を示す ビットマップを表します。 |
| TTID_FGBITMAP | CThemeProgressBar用の バー部分を描画する為のビットマップを表します。 |
| TTID_DROPBUTTON | CThemeComboBox用のドロップダウンボタン のビットマップを表します。 |
| TTID_BGBITMAP | CThemeDialog用の背景ビットマップ を表します。 |
| TTID_TITLEBGCOLOR | CThemeDialog用のタイトルバー背景色 を表します。 |
| TTID_TITLEFGCOLOR | CThemeDialog用のタイトルバー前景色 を表します。 |
| TTID_TITLEBITMAP | CThemeDialog用のタイトルバー背景ビットマップ を表します。 |
| TTID_CLOSEBUTTON | CThemeDialog用のタイトルバー上に配置される Close(閉じる)ボタンのビットマップを表します。 |
| TTID_MAXBUTTON | CThemeDialog用のタイトルバー上に配置される Maximize(最大化)ボタンのビットマップを表します。 |
| TTID_RESTOREBUTTON | CThemeDialog用のタイトルバー上に配置される Restore(元のサイズに戻す)ボタンのビットマップを表します。 |
| TTID_MINBUTTON | CThemeDialog用のタイトルバー上に配置される Minimize(最小化)ボタンのビットマップを表します。 |
| TTID_HELPBUTTON | CThemeDialog用のタイトルバー上に配置される Help(コンテキストヘルプ)ボタンのビットマップを表します。 |
| ステータス | |
|---|---|
| TSID_NORMAL | 通常の状態を表します。 |
| TSID_DISABLED | 無効化(グレイアウト)状態または非アクティブ状態を表します。 |
| TSID_SELECTED | 選択状態を表します。例えばマウスによってクリックされている最中などです。 |
| TSID_FOCUSED | 入力フォーカスを持っている状態を表します。 |
以下に、コントロールクラス毎の有効値の組み合わせを示します。
| コントロールクラス毎の有効値 | |||
|---|---|---|---|
| クラス名 | テーマクラス値 | ターゲット値 | ステータス値 |
| - | TCID_DEFAULT | TTID_FONT TTID_BGCOLOR TTID_FGCOLOR TTID_BITMAP |
TSID_NORMAL TSID_DISABLED TSID_SELECTED TSID_FOCUSED |
| CThemeButton | TCID_BUTTON | TTID_FONT TTID_BGCOLOR TTID_FGCOLOR TTID_BITMAP |
TSID_NORMAL TSID_DISABLED TSID_SELECTED TSID_FOCUSED |
| CThemeCheckBox | TCID_CHECKBOX | TTID_FONT TTID_BGCOLOR TTID_FGCOLOR TTID_BITMAP |
TSID_NORMAL TSID_DISABLED TSID_SELECTED TSID_FOCUSED |
| TTID_CHECKED TTID_UNCHECKED |
TSID_NORMAL | ||
| CThemeLabel | TCID_LABEL | TTID_FONT TTID_BGCOLOR TTID_FGCOLOR TTID_BITMAP |
TSID_NORMAL TSID_DISABLED TSID_SELECTED TSID_FOCUSED |
| CThemeGroupBox | TCID_GROUPBOX | TTID_FONT TTID_BGCOLOR TTID_FGCOLOR TTID_BITMAP |
TSID_NORMAL TSID_DISABLED TSID_SELECTED TSID_FOCUSED |
| CThemeProgressBar | TCID_PROGRESSBAR | TTID_FONT TTID_BGCOLOR TTID_FGCOLOR TTID_BITMAP |
TSID_NORMAL TSID_DISABLED TSID_SELECTED TSID_FOCUSED |
| TTID_FGBITMAP | TSID_NORMAL | ||
| CThemeComboBox | TCID_COMBOBOX | TTID_FONT TTID_BGCOLOR TTID_FGCOLOR TTID_BITMAP |
TSID_NORMAL TSID_DISABLED TSID_SELECTED TSID_FOCUSED |
| TTID_DROPBUTTON | TSID_NORMAL | ||
| CThemeDialog | TCID_DIALOG | TTID_BGCOLOR TTID_BGBITMAP |
TSID_NORMAL |
| TTID_TITLEBGCOLOR TTID_TITLEFGCOLOR TTID_TITLEBITMAP |
TSID_NORMAL TSID_DISABLED |
||
typedef struct {
WORD point; // フォントサイズ(ポイント単位)
LPCTSTR face_name; // フォント名("MS ゴシック" 等)
} LOADABLE_THEME_FONT; |
typedef struct {
UINT resource_id; // ビットマップリソースID
UINT resource_id_mask; // マスク用ビットマップリソースID
UINT border_width; // 左右のビットマップ固定化幅
UINT border_height; // 上下のビットマップ固定化高さ
WORD flags; // 伸縮モードフラグ
} LOADABLE_THEME_BITMAP; |

| TBF_TILE | 元画像を並べて伸縮領域を描画します。 |
|---|---|
| TBF_VSTRETCH | 元画像を縦方向に拡大縮小し、横方向には並べて伸縮領域を描画します。 |
| TBF_HSTRETCH | 元画像を横方向に拡大縮小し、縦方向には並べて伸縮領域を描画します。 |
| TBF_STRETCH | 元画像を拡大縮小して伸縮領域を描画します。 |
typedef struct {
WORD class_id;
WORD target_id;
WORD state_id;
void *data;
} LOADABLE_THEME; |
| target_id値 | dataフィールド指定値 | cast用マクロ |
|---|---|---|
| TTID_FONT | LOADABLE_THEME_FONTポインタ | THEME_DATA_FONT() |
| TTID_BITMAP TTID_FGBITMAP TTID_BGBITMAP TTID_TITLEBITMAP TTID_CHECKED TTID_UNCHECKED |
LOADABLE_THEME_BITMAPポインタ | THEME_DATA_BITMAP() |
| TTID_BGCOLOR TTID_FGCOLOR TTID_TITLEBGCOLOR TTID_TITLEFGCOLOR |
COLORREFポインタ | THEME_DATA_COLOR() |
CButton の派生クラスで、通常のプッシュボタンとして使用します。
CButton の派生クラスで、チェックボックスとして使用します。
CStatic の派生クラスで、ラベル(スタティックテキスト)として使用します。
CButton の派生クラスで、グループボックスとして使用します。
CProgressCtl の派生クラスで、プログレスバーとして使用します。
CComboBox の派生クラスで、コンボボックスとして使用します。
CDialog の派生クラスで、ダイアログとして使用します。
| SRL_FIXALL | 全ての辺を固定します。 |
|---|---|
| SRL_FIXLEFTFROMLEFT | 左辺をダイアログの左辺からの距離で固定します。 |
| SRL_FIXRIGHTFROMLEFT | 右辺をダイアログの左辺からの距離で固定します。 |
| SRL_FIXLEFTFROMRIGHT | 左辺をダイアログの右辺からの距離で固定します。 |
| SRL_FIXRIGHTFROMRIGHT | 右辺をダイアログの右辺からの距離で固定します。 |
| SRL_FIXTOPFROMTOP | 上辺をダイアログの上辺からの距離で固定します。 |
| SRL_FIXBOTTOMFROMTOP | 下辺をダイアログの上辺からの距離で固定します。 |
| SRL_FIXTOPFROMBOTTOM | 上辺をダイアログの下辺からの距離で固定します。 |
| SRL_FIXBOTTOMFROMBOTTOM | 下辺をダイアログの下辺からの距離で固定します。 |
| SRL_FIXALLFROMLEFT | 左右の辺をダイアログの左辺からの距離で固定します。 |
|---|---|
| SRL_FIXALLFROMRIGHT | 左右の辺をダイアログの右辺からの距離で固定します。 |
| SRL_FIXALLFROMTOP | 上下の辺をダイアログの上辺からの距離で固定します。 |
| SRL_FIXALLFROMBOTTOM | 上下の辺をダイアログの下辺からの距離で固定します。 |
| SRL_STRETCHWIDTH | 左右の辺をそれぞれダイアログからの左右の辺からの距離で固定して 横方向に伸縮します。 |
| SRL_STRETCHHEIGHT | 上下の辺をそれぞれダイアログからの上下の辺からの距離で固定して 縦方向に伸縮します。 |
class Cxxxxxx : public CThemeDialog
{ |
Cxxxxxx::Cxxxxxx(CWnd* pParent /*=NULL*/)
: CThemeDialog(Cxxxxxx::IDD, pParent)
{ |
プロジェクトの設定画面を開き、C/C++タブのカテゴリは プリプロセッサを選択すると次のような画面が開きます。
この例のように、KgThemeライブラリのヘッダーファイルのあるディレクトリを 指定します。
プロジェクトの設定画面を開き、リンクタブのカテゴリは 一般を選択すると次のような画面が開きます。
この例のように、KgThemeライブラリのインポートライブラリ(KgTheme.lib)のあるディレクトリを 指定します。
リソースエディタでダイアログに追加したボタン等のコントロールを KgThemeライブラリの CThemeButton 等に割り当てるには ClassWizard を使用して メンバ変数の追加を行います。 この作業を初めて行う場合は、メンバ変数のタイプ(型)のリストに目的のクラスが 存在しません。本当の所はどのようにすべきか分かりませんが、次のように .clw ファイルを再作成してやる事で、KgThemeライブラリ内のクラスが選択できる ようになします。
LOADABLE_THEME_FONT default_font = { 10, "MS 明朝" };
LOADABLE_THEME_BITMAP ltbButtonBG = { IDB_BUTTONBG, 0, 4, 4, TBF_STRETCH };
LOADABLE_THEME_BITMAP ltbButtonBGDisable = { IDB_BUTTONBG_DISABLE, 0, 4, 4, TBF_STRETCH };
LOADABLE_THEME_BITMAP ltbButtonBGFocus = { IDB_BUTTONBG_FOCUS, 0, 4, 4, TBF_STRETCH };
LOADABLE_THEME my_theme[] = {
{ TCID_DEFAULT, TTID_FONT, TSID_NORMAL, THEME_DATA_FONT(&default_font) },
{ TCID_DEFAULT, TTID_FGCOLOR, TSID_NORMAL, THEME_DATA_COLOR(RGB(255,255,255)) },
{ TCID_BUTTON, TTID_BITMAP, TSID_NORMAL, THEME_DATA_BITMAP(<bButtonBG) },
{ TCID_BUTTON, TTID_BITMAP, TSID_DISABLED, THEME_DATA_BITMAP(<bButtonBGDisable) },
{ TCID_BUTTON, TTID_BITMAP, TSID_FOCUSED, THEME_DATA_BITMAP(<bButtonBGFocus) },
{ TCID_END, 0, 0, NULL } // 終わりを示す
};
/*
* CThemeSet型のメンバ変数 m_ThemeClass にテーマをロードします。
* 引数の LOADABLE_THEME 構造体配列の最後には、TCID_END が必要です。
* 無い場合は、おそらく不正な処理が行われアプリケーションは強制終了されます。
*/
m_ThemeClass.LoadThemeFromStruct(my_theme);
/*
* CThemeButton型のボタンにロード済テーマクラス m_ThemeClass を割り当てます。
*/
m_BtnOK.SetTheme(&m_ThemeClass);
m_BtnCancel.SetTheme(&m_ThemeClass);
|
このライブラリを使用する為には VisualStudio が必要です。 その時点で自由とは言えないような気がしますが、 このライブラリ自体は GPL とさせて頂きます。 GPLについては、COPYINGファイルを参照するか、 GNUのWEBサイトを参照してください。