第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Windows 10 上的 WinForms 深色標(biāo)題欄

Windows 10 上的 WinForms 深色標(biāo)題欄

C#
12345678_0001 2023-07-09 10:01:30
我有一個(gè) WinForms 應(yīng)用程序,它會自動(dòng)調(diào)整為 Windows 10 上的深色/淺色主題。我的問題是,無論用戶選擇哪個(gè)主題,窗口的標(biāo)題欄始終保持白色。頂部是當(dāng)前的,底部是我想要的(用 Photoshop 模擬)參見explorer例如。這不是 UWP 應(yīng)用程序,但它在 Windows 1903 及更高版本上使用深色標(biāo)題欄(當(dāng)選擇深色主題時(shí))。我怎樣才能實(shí)現(xiàn)同樣的目標(biāo)?我不想使用任何自定義標(biāo)題欄,因?yàn)槲蚁M麘?yīng)用程序的外觀和行為也像舊 Windows 版本上的任何本機(jī)應(yīng)用程序一樣。
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊

因此,經(jīng)過長時(shí)間的搜索,我終于找到了這個(gè)問題的答案。技巧是使用dwmapi.dll'sDwmSetWindowAttribute并將未記錄的常量傳遞DWMWA_USE_IMMERSIVE_DARK_MODE到函數(shù)中。在 C# 中,其代碼看起來有點(diǎn)像這樣(適用于 WinForms 和 WPF):


/*

using System.Runtime.InteropServices;

*/


[DllImport("dwmapi.dll")]

private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize);


private const int DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19;

private const int DWMWA_USE_IMMERSIVE_DARK_MODE = 20;


private static bool UseImmersiveDarkMode(IntPtr handle, bool enabled)

{

    if (IsWindows10OrGreater(17763))

    {

        var attribute = DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1;

        if (IsWindows10OrGreater(18985))

        {

            attribute = DWMWA_USE_IMMERSIVE_DARK_MODE;

        }


        int useImmersiveDarkMode = enabled ? 1 : 0;

        return DwmSetWindowAttribute(handle, (int)attribute, ref useImmersiveDarkMode, sizeof(int)) == 0;

    }


    return false;

}


private static bool IsWindows10OrGreater(int build = -1)

{

    return Environment.OSVersion.Version.Major >= 10 && Environment.OSVersion.Version.Build >= build;

}


查看完整回答
反對 回復(fù) 2023-07-09
?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊

最快的方法:


[DllImport("DwmApi")] //System.Runtime.InteropServices

private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);


protected override void OnHandleCreated(EventArgs e)

{

    if (DwmSetWindowAttribute(Handle, 19, new[] { 1 }, 4) != 0)

        DwmSetWindowAttribute(Handle, 20, new[] { 1 }, 4);

}


查看完整回答
反對 回復(fù) 2023-07-09
?
精慕HU

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊

請記住,對于 .net fw 4.8.1 及之前版本,返回的版本不好,在 .Net6 中修復(fù),這里是一個(gè)片段(.Net 5 不受管理):


? ? private static bool IsWindows10OrGreater(int build = -1)

? ? {

? ? ? ? return WindowsVersion() >= 10 && WindowsBuildNumber() >= build;

? ? }


? ? public static int WindowsVersion()

? ? {

? ? ?//for .Net4.8 and Minor

? ? ?#if NETFRAMEWORK

? ? ? ? int result = 10;

? ? ? ? var reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");

? ? ? ? string[] productName = reg.GetValue("ProductName").ToString().Split((char)32);

? ? ? ? int.TryParse(productName[1], out result);

? ? ? ? return result;

? ? ?#else

? ? ? ? //fixed in .Net6

? ? ? ? return System.Environment.OSVersion.Version.Major;

? ? ?#endif

? ? }


? ? public static int WindowsBuildNumber()

? ? {

? ? ? ? //for .Net4.8 and Minor

? ? #if NETFRAMEWORK

? ? ? ? int result = 22000;

? ? ? ? var reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");

? ? ? ? string buildNumber = reg.GetValue("CurrentBuildNumber").ToString();

? ? ? ? int.TryParse(buildNumber, out result);

? ? ? ? return result;

? ? #endif


? ? #if NET

? ? ? ? //fixed in .Net6

? ? ? ? return System.Environment.OSVersion.Version.Build;

? ? #endif

? ? }


查看完整回答
反對 回復(fù) 2023-07-09
  • 3 回答
  • 0 關(guān)注
  • 286 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號