【C++/Win32】C# の SystemColors クラスを C++ でも利用する

C++
この記事は約16分で読めます。

C++ でシステムカラーを取得するクラスってどっかに無いかなぁって思ってたんですが、見つかりませんでした。そこで C# 感覚で使えるように C# の SystemColors クラスを C++ へ移植しました。

対応表

C# のプロパティが C++ のどの値を参照しているかの対応表です。なんでこんなことになってるのかは分からないのですが、 C# も C++ も同じ色を別名で複数定義していますね。

C#C++内容HTML
ActiveBorderCOLOR_ACTIVEBORDERアクティブなウィンドウの境界線の色であるカラー#B4B4B4
(180,180,180)
ActiveCaptionCOLOR_ACTIVECAPTION
CTLCOLOR_LISTBOX
アクティブなウィンドウのタイトル バーの背景の色を表すカラー#99B4D1
(153,180,209)
ActiveCaptionTextCOLOR_CAPTIONTEXTアクティブなウィンドウのタイトル バーのテキストの色であるカラー#000000
(0,0,0)
AppWorkspaceCOLOR_APPWORKSPACEアプリケーション ワークスペースの色であるカラー#ABABAB
(171,171,171)
ButtonFace
Control
COLOR_3DFACE
COLOR_BTNFACE
3D 要素の表面の色を表すカラー#F0F0F0
(240,240,240)
ButtonHighlightCOLOR_3DHILIGHT
COLOR_3DHIGHLIGHT
COLOR_BTNHILIGHT
COLOR_BTNHIGHLIGHT
3D 要素の影の色を表すカラー#FFFFFF
(0,0,0)
ButtonShadow
ControlDark
COLOR_3DSHADOW
COLOR_BTNSHADOW
3D 要素の暗い影の色を表すカラー#A0A0A0
(160,160,160)
ControlLightLightCOLOR_3DHILIGHT
COLOR_3DHIGHLIGHT
COLOR_BTNHILIGHT
COLOR_BTNHIGHLIGHT
3D 要素の影の色を表すカラー#FFFFFF
(0,0,0)
ControlDarkDarkCOLOR_3DDKSHADOW3D 要素の明るい色を表すカラー#696969
(105,105,105)
ControlLightCOLOR_3DLIGHT3D 要素の強調表示カラーを表すカラー#FFFFFF
(255,255,255)
ControlTextCOLOR_BTNTEXT3D 要素のテキストの色を表すカラー#000000
(0,0,0)
DesktopCOLOR_BACKGROUND
COLOR_DESKTOP
CTLCOLOR_EDIT
デスクトップの色であるカラー#000000
(0,0,0)
GradientActiveCaptionCOLOR_GRADIENTACTIVECAPTIONアクティブなウィンドウのタイトル バーに適用される色のグラデーションにおいて最も明るい色を表すカラー#B9D1EA
(185,209,234)
GradientInactiveCaptionCOLOR_GRADIENTINACTIVECAPTIONアクティブでないウィンドウのタイトル バーに適用される色のグラデーションにおいて最も明るい色を表すカラー#D7E4F2
(215,228,242)
GrayTextCOLOR_GRAYTEXT淡色表示になっているテキストの色を表すカラー#6D6D6D
(109,109,109)
HighlightCOLOR_HIGHLIGHT選択した項目の背景の色を表すカラー#0078D7
(8,120,215)
HighlightTextCOLOR_HIGHLIGHTTEXT選択した項目のテキストの色であるカラー#FFFFFF
(255,255,255)
HotTrackCOLOR_HOTLIGHTホット トラッキング項目の指定に使用する色を表すカラー#0066CC
(0,102,204)
InactiveBorderCOLOR_INACTIVEBORDER非アクティブなウィンドウの境界線の色であるカラー#F4F7FC
(244,247,252)
InactiveCaptionCOLOR_INACTIVECAPTION
CTLCOLOR_BTN
アクティブでないウィンドウのタイトル バーの背景の色を表すカラー#D7E4F2
(215,228,242)
InactiveCaptionTextCOLOR_INACTIVECAPTIONTEXTアクティブでないウィンドウのタイトル バーのテキストの色を表すカラー#000000
(0,0,0)
InfoCOLOR_INFOBKToolTip の背景の色を表すカラー#FFFFE1
(255,255,225)
InfoTextCOLOR_INFOTEXTToolTip のテキストの色を表すカラー#000000
(0,0,0)
MenuCOLOR_MENU
CTLCOLOR_DLG
メニューの背景色であるカラー#F0F0F0
(240,240,240)
MenuBarCOLOR_MENUBARメニュー バーの背景の色を表すカラー#F0F0F0
(240,240,240
MenuHighlightCOLOR_MENUHILIGHTメニューをフラット メニューとして表示するときにメニュー項目の強調表示に使用される色を表すカラー#0078D7
(0,120,215)
MenuTextCOLOR_MENUTEXT
CTLCOLOR_MAX
メニューのテキストの色であるカラー#000000
(0,0,0)
ScrollBarCOLOR_SCROLLBAR
CTLCOLOR_MSGBOX
スクロール バーの背景の色を表すカラー#C8C8C8
(200,200,200)
WindowCOLOR_WINDOW
CTLCOLOR_SCROLLBAR
ウィンドウのクライアント領域の背景の色を表すカラー#FFFFFF
(255,255,255)
WindowFrameCOLOR_WINDOWFRAME
CTLCOLOR_STATIC
ウィンドウ フレームの色を示すカラー#646464
(100,100,100)
WindowTextCOLOR_WINDOWTEXTウィンドウのクライアント領域のテキスト色であるカラー#000000
(0,0,0)

ソースコード

C++ でも C# の SystemColors クラスのプロパティ名と同じ名前でシステムカラーが取得できます。

#pragma once

class OTZSystemColors {

public:
    /// <summary>
    /// アクティブなウィンドウの境界線の色であるカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ActiveBorder() { return ::GetSysColor(COLOR_ACTIVEBORDER); }

    /// <summary>
    /// アクティブなウィンドウのタイトル バーの背景の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ActiveCaption() { return ::GetSysColor(COLOR_ACTIVECAPTION); }

    /// <summary>
    /// アクティブなウィンドウのタイトル バーのテキストの色であるカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ActiveCaptionText() { return ::GetSysColor(COLOR_CAPTIONTEXT); }

    /// <summary>
    /// アプリケーション ワークスペースの色であるカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD AppWorkspace() { return ::GetSysColor(COLOR_APPWORKSPACE); }

    /// <summary>
    /// 3D 要素の表面の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ButtonFace() { return ::GetSysColor(COLOR_BTNFACE); }

    /// <summary>
    /// 3D 要素の影の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ButtonHighlight() { return ::GetSysColor(COLOR_BTNHILIGHT); }

    /// <summary>
    /// 3D 要素の暗い影の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ButtonShadow() { return ::GetSysColor(COLOR_BTNSHADOW); }

    /// <summary>
    /// 3D 要素の表面の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD Control() { return ::GetSysColor(COLOR_BTNFACE); }

    /// <summary>
    /// 3D 要素の暗い影の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ControlDark() { return ::GetSysColor(COLOR_BTNSHADOW); }

    /// <summary>
    /// 3D 要素の明るい色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ControlDarkDark() { return ::GetSysColor(COLOR_3DDKSHADOW); }

    /// <summary>
    /// 3D 要素の強調表示カラーを表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ControlLight() { return ::GetSysColor(COLOR_3DLIGHT); }

    /// <summary>
    /// 3D 要素の影の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ControlLightLight() { return ::GetSysColor(COLOR_BTNHILIGHT); }

    /// <summary>
    /// 3D 要素のテキストの色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ControlText() { return ::GetSysColor(COLOR_BTNTEXT); }

    /// <summary>
    /// デスクトップの色であるカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD Desktop() { return ::GetSysColor(COLOR_DESKTOP); }

    /// <summary>
    /// アクティブなウィンドウのタイトル バーに適用される色のグラデーションにおいて最も明るい色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD GradientActiveCaption() { return ::GetSysColor(COLOR_GRADIENTACTIVECAPTION); }

    /// <summary>
    /// アクティブでないウィンドウのタイトル バーに適用される色のグラデーションにおいて最も明るい色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD GradientInactiveCaption() { return ::GetSysColor(COLOR_GRADIENTINACTIVECAPTION); }

    /// <summary>
    /// 淡色表示になっているテキストの色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD GrayText() { return ::GetSysColor(COLOR_GRAYTEXT); }

    /// <summary>
    /// 選択した項目の背景の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD Highlight() { return ::GetSysColor(COLOR_HIGHLIGHT); }

    /// <summary>
    /// 選択した項目のテキストの色であるカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD HighlightText() { return ::GetSysColor(COLOR_HIGHLIGHTTEXT); }

    /// <summary>
    /// ホット トラッキング項目の指定に使用する色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD HotTrack() { return ::GetSysColor(COLOR_HOTLIGHT); }

    /// <summary>
    /// 非アクティブなウィンドウの境界線の色であるカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD InactiveBorder() { return ::GetSysColor(COLOR_INACTIVEBORDER); }

    /// <summary>
    /// アクティブでないウィンドウのタイトル バーの背景の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD InactiveCaption() { return ::GetSysColor(COLOR_INACTIVECAPTION); }

    /// <summary>
    /// アクティブでないウィンドウのタイトル バーのテキストの色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD InactiveCaptionText() { return ::GetSysColor(COLOR_INACTIVECAPTIONTEXT); }

    /// <summary>
    /// ToolTip の背景の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD Info() { return ::GetSysColor(COLOR_INFOBK); }

    /// <summary>
    /// ToolTip のテキストの色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD InfoText() { return ::GetSysColor(COLOR_INFOTEXT); }

    /// <summary>
    /// メニューの背景色であるカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD Menu() { return ::GetSysColor(COLOR_MENU); }

    /// <summary>
    /// メニュー バーの背景の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD MenuBar() { return ::GetSysColor(COLOR_MENUBAR); }

    /// <summary>
    /// メニューをフラット メニューとして表示するときにメニュー項目の強調表示に使用される色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD MenuHighlight() { return ::GetSysColor(COLOR_MENUHILIGHT); }

    /// <summary>
    /// メニューのテキストの色であるカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD MenuText() { return ::GetSysColor(COLOR_MENUTEXT); }

    /// <summary>
    /// スクロール バーの背景の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD ScrollBar() { return ::GetSysColor(COLOR_SCROLLBAR); }

    /// <summary>
    /// ウィンドウのクライアント領域の背景の色を表すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD Window() { return ::GetSysColor(COLOR_WINDOW); }

    /// <summary>
    /// ウィンドウ フレームの色を示すカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD WindowFrame() { return ::GetSysColor(COLOR_WINDOWFRAME); }

    /// <summary>
    /// ウィンドウのクライアント領域のテキスト色であるカラー
    /// </summary>
    /// <returns></returns>
    static inline DWORD WindowText() { return ::GetSysColor(COLOR_WINDOWTEXT); }
};

コメント

タイトルとURLをコピーしました