button - tablacus/TablacusDark GitHub Wiki

BUTTON(ボタン、チェックボックス、グループボックス等) のダークモード対応

通常のボタンとデフォルトのボタン

image

通常のボタンとデフォルトのボタンは標準のダークテーマを持っているので、SetWindowTheme で設定します。

::SetWindowTheme(hwnd1, g_bDarkMode ? L"darkmode_explorer" : L"explorer", NULL);

※g_bDarkMode にはダークモードの際にTRUEが格納されています。

image

ボタンの枠が太いのを直すには WM_CTLCOLORBTN を STATICと同じ様に処理します。

case WM_CTLCOLORBTN:
case WM_CTLCOLORSTATIC:
	SetTextColor((HDC)wParam, TECL_DARKTEXT);
	SetBkColor((HDC)wParam, TECL_DARKBG);
	return (LRESULT)g_hbrDarkBackground;

image

チェックボックス、グループボックス等

チェックボックス、グループボックス等は標準のダークテーマを持っていないので文字が黒くなって非常に見にくくなります。

BS_DEFPUSHBUTTON < 見にくくなるチェックボックス等 < BS_OWNERDRAW

image

対策方法1

テキストを画像化

テキストをビットマップ化してボタンのウインドウスタイルをBS_BITMAPにしてビットマップ画像を送ります。

ビットマップ画像はウインドウを閉じるときに解放してください。

::SetWindowLong(hwnd1, GWL_STYLE, (dwStyle | BS_BITMAP));
::SendMessage(hwnd1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBM); 

image

対策方法2

テーマを効かなくする

テーマを効かなくすると STATIC と同じ処理で文字の色を変えることができるようになります。

::SetWindowTheme(hwnd1, L"", L"");

image

対策方法3

サブクラス化して自前で実装

以上3つの方法があります。