支持 MFC 对话框应用程序的暗模式(DwmSetWindowAttribute)

问题描述 投票:0回答:2

我可能完全错了,但我偶然发现了这篇文章:

在 Win32 应用程序中支持深色和浅色主题

我按照以下步骤操作:

1/

#include <dwmapi.h>

2/

#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE
#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
#endif

3/

致电

InitInstance

BOOL value = TRUE;
::DwmSetWindowAttribute(m_pMainWnd->GetSafeHwnd(),
                        DWMWA_USE_IMMERSIVE_DARK_MODE, 
                        &value, sizeof(value));

如您所见,我正在使用基于

CDialog
的应用程序。

4/我添加了

Dwmapi.lib

它编译得很好。但是当我运行我的应用程序时,标题栏是not黑暗的。为什么?

一个相关的问题是文章中指出:

本文提供了检测系统主题更改以及为 Win32 应用程序窗口请求浅色或深色标题栏的方法示例。 它不涵盖如何使用深色模式颜色集重新绘制和渲染应用程序 UI 的细节。

那么对于 MFC 对话框应用程序我们该如何处理呢?

请注意,我的 Windows 11 电脑正在深色模式下运行。

winapi visual-c++ mfc dialog darkmode
2个回答
0
投票
理论上对于对话框等常用控件是可以实现的。

它将使用主题文件。

[视觉样式]部分显示高对比度黑色主题的视觉样式部分。

这个

线程已经实现了它。可能会有帮助。


0
投票
m_pMainWnd->GetSafeHwnd()

中运行,则

NULL
 返回 
InitInstance
,因为窗口尚未创建。尝试
OnInitDialog
,它会起作用的。

© www.soinside.com 2019 - 2024. All rights reserved.