button - tablacus/TablacusDark GitHub Wiki
BUTTON(ボタン、チェックボックス、グループボックス等) のダークモード対応
通常のボタンとデフォルトのボタン
通常のボタンとデフォルトのボタンは標準のダークテーマを持っているので、SetWindowTheme で設定します。
::SetWindowTheme(hwnd1, g_bDarkMode ? L"darkmode_explorer" : L"explorer", NULL);
※g_bDarkMode にはダークモードの際にTRUEが格納されています。
ボタンの枠が太いのを直すには WM_CTLCOLORBTN を STATICと同じ様に処理します。
case WM_CTLCOLORBTN:
case WM_CTLCOLORSTATIC:
SetTextColor((HDC)wParam, TECL_DARKTEXT);
SetBkColor((HDC)wParam, TECL_DARKBG);
return (LRESULT)g_hbrDarkBackground;
チェックボックス、グループボックス等
チェックボックス、グループボックス等は標準のダークテーマを持っていないので文字が黒くなって非常に見にくくなります。
BS_DEFPUSHBUTTON
< 見にくくなるチェックボックス等 < BS_OWNERDRAW
対策方法1
テキストを画像化
テキストをビットマップ化してボタンのウインドウスタイルをBS_BITMAPにしてビットマップ画像を送ります。
ビットマップ画像はウインドウを閉じるときに解放してください。
::SetWindowLong(hwnd1, GWL_STYLE, (dwStyle | BS_BITMAP));
::SendMessage(hwnd1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBM);
対策方法2
テーマを効かなくする
テーマを効かなくすると STATIC と同じ処理で文字の色を変えることができるようになります。
::SetWindowTheme(hwnd1, L"", L"");
対策方法3
サブクラス化して自前で実装
以上3つの方法があります。