今からでも間に合う

技術を学ぶのは今からでも遅くない

タイトルバーをダークテーマにする

DWM(デスクトップウィンドウマネージャー)を使ってみた

タイトルバーのスタイルを変えるだけなら簡単だったけど、それ以外のコントロールに同処理を使っても反応がない。
これもいろいろ調べてたけどいいやり方は見つかってなさそう。

public class DarkForm : Form
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        int value = 1;
        _ = NativeMethods.DwmSetWindowAttribute(Handle, NativeMethods.DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE, ref value, (uint)Marshal.SizeOf(typeof(int)));
    }

    private static class NativeMethods
    {
        [DllImport("dwmapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern int DwmSetWindowAttribute(IntPtr hwnd, DWMWINDOWATTRIBUTE attribute, ref int pvAttribute, uint cbAttribute);

        public enum DWMWINDOWATTRIBUTE
        {
            DWMWA_USE_IMMERSIVE_DARK_MODE = 20,
            DWMWA_WINDOW_CORNER_PREFERENCE = 33,
            DWMWA_MICA_EFFECT = 1029,
            DWMWA_LAST
        }
    }
}


色変えてみた

Enabled=falseだとこうなった

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    int value = 1;
    _ = NativeMethods.DwmSetWindowAttribute(Handle, NativeMethods.DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE, ref value, (uint)Marshal.SizeOf(typeof(int)));

    if (DesignMode) return;

    SuspendLayout();
    ToDarkMode(this);
    ResumeLayout();
}

private static void ToDarkMode(Control ctrl)
{
    ctrl.ForeColor = Color.White;
    ctrl.BackColor = Color.FromArgb(56, 56, 56);

    foreach (Control child in ctrl.Controls)
    {
        if (child == null) continue;
        ToDarkMode(child);
    }
}

色を管理するクラスを作ったり、細かい微調整がいりそうなので対応コストに見合ったやり方ではないでしょう。

プライバシーポリシー


d払いポイントGETモール