问题标签 [visual-styles]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
55 浏览

wpf - 在 WPF 托管的 ListView 中启用组

我在 WPF 应用程序中托管了一个旧的 Winforms 控件。控件利用了System.Windows.Forms.ListView内部,而这个 ListView 使用了 Groups 功能。

问题是当由 WPF 托管时,此控件不显示组。当 ListView 由 Winforms 应用程序和 WPF 应用程序托管时,我已经手动比较了它的属性。对于这两个 ListViewsShowGroups属性都是 true。

但是,有一个名为的属性GroupsEnabled,当控件托管在 Winforms 中时它是 true,而当它托管在 WPF 中时它是 false。我在这里找到了定义:

VirtualMode两者都为假,但ComctlSupportsVisualStylesWinforms 托管为真,WPF 应用程序为假。来自同一来源的代码
ComctlSupportsVisualStyles

我想我需要以Application.ComCtlSupportsVisualStyles某种方式在我的 WPF 代码中进行设置。
这一定是System.Windows.Forms.Application而不是System.Windows.Application
有什么办法吗?

0 投票
0 回答
216 浏览

windows - 在 Windows 上绘制主题组合框

我尝试CBS_DROPDOWNLIST使用DrawThemeBackground. 我提供了 part CP_READONLY,它显然绘制了一个主题组合框的背景:

但是,它不包含下拉箭头。所以,我尝试用以下方式自己绘制箭头:

但是上面在组合框背景上绘制了以矩形为中心的箭头,包括边框,所以我不能在组合框内没有边框(它本身已经有边框)的情况下使用它。我使用主题资源管理器来验证箭头是否始终位于带边框的背景上。

本质上,我的问题是:如何在适当的位置绘制背景箭头以模拟普通 Windows 组合框的外观?

到目前为止我发现了什么:

  • 我可以指定一个剪裁矩形来剪掉上述边框。但这提出了确定确切位置矩形和剪切矩形的问题:似乎我可以GetThemeMargins用来确定边距,但这并不能告诉我箭头整体有多大。

  • GetThemeBitmap可能有助于确定箭头的确切大小,但正如我在此处阅读并在我的机器上确认的那样,使用它TMT_GLYPHDIBDATA并不能像宣传的那样工作,如果可能的话,我希望没有任何变通方法。

0 投票
0 回答
53 浏览

.net - 检查 WinForms 应用程序是否使用 OS 视觉样式呈现

我们有一个在 .NET 1.x 时代编写的旧版 WinForms 应用程序,可能需要更改检查应用程序是否使用操作系统视觉样式呈现的代码,原因如下所述。执行此工作的当前函数如下所示:

此代码中的 NativeMethods 是一个类,其中包含所有引用的 WinAPI 函数和常量的 P-Invoke 声明。

我们希望在此代码中避免与平台无关的调用,因为它们似乎与 Mono 平台的最新版本不兼容。没有操作系统本机调用,是否有更好更短的方法来检查我们需要什么?如果我们可以仅使用本机 .NET 类来做到这一点,那就太好了。支持的 .NET 的最低版本应该是 2.0 甚至 3.5。

0 投票
1 回答
471 浏览

winapi - Windows 资源管理器悬停和选择的视觉样式

Windows 的最后三个版本都在 Windows Explorer 列表视图中具有半透明的高亮和悬停效果:

在此处输入图像描述

使用主题资源管理器,我看到 ListItem 没有与我在 Windows 中看到的状态相匹配的状态:

在此处输入图像描述

有没有:

  • 班级
  • 部分
  • 状态

代表Windows中的ListView?

0 投票
0 回答
191 浏览

c# - C# WinForms 中的视觉样式

我在 C# WinForms 应用程序中遇到 VisualStyles 问题。我已使用 Application.EnableVisualStyles(); 行启用 VisualStyles;一切都在我的开发 PC 上运行(运行 Windows 10 v1709)。

但是,当我在生产 PC 环境(Windows 10 v1607)上运行完全相同的 .exe 时,VisualStyles 消失了,应用程序的外观看起来很旧。

请参阅此图像,应用程序看起来有何不同:

VisualStyle 差异问题示例

如何修复以使 VisualStyles 始终正确显示?目标机器始终是 Windows 10。非常令人不安的是,我已经测试过使用 VisualStyles 做一个 Hello World WinForms 应用程序,并且只是在生产 PC 上测试运行它,而 VisualStyles 在两台 PC 上都适用于该 Hello World 应用程序。所以这个问题似乎存在于我的生产 PC 和我的主要应用程序的组合中。

0 投票
0 回答
180 浏览

.net - 从 Graphics 对象获取 uxtheme.dll DrawThemeParentBackground 的 hwnd

我正在处理一些用于在 WinFroms 应用程序中绘制部分样式系统控件的旧绘图代码。完成这项工作的核心例程之一如下所示:

原来DrawThemeParentBackground函数失败了。它返回错误代码 0x80070006 (E_HANDLE),表示“无效的句柄”。看来,这是因为使用先前的WindowFromDC API 调用检索到的零窗口句柄。

有没有办法从传递给此函数的 Graphics 对象中获取正确的 hwnd 以将其传递给DrawThemeParentBackground?我知道我可以通过窗口句柄从外部调用代码中绘制,但这需要重写该项目的大部分基础设施。所以我正在寻找这个问题的简单解决方案,而无需重写太多代码。

0 投票
0 回答
271 浏览

windows - 使用 Windows 视觉样式绘制的按钮周围有额外 1 像素的边距

我们的一个遗留项目使用 API 调用来使用操作系统的当前视觉样式绘制自定义控件(可以在我问的这个问题中找到一些代码)。我们检测到经典按钮是用 1 像素的缩进绘制的,而不是占据整个指定的矩形。例如,如果我们需要一个 17x17 像素的按钮:

Windows 10 中的按钮 (1)

,实际上我们得到了一个 15x15 像素的按钮:

Windows 10 中的按钮 (3)

其他类似的控件(如组合按钮)完全按照请求的大小绘制:

Windows 10 中的组合按钮 (3)

我们的目标是绘制按钮以占据整个指定的矩形。是的,我确实知道,如果我们使用视觉样式进行绘制,那么周围的空间可以用于主绘制控件的半透明效果,但是我们所有的检查都确认这个 1 像素的边距根本没有被使用——无论是在 Windows 10 中还是在 Windows 7 中。最简单和“粗鲁”的解决方案是指定一个膨胀 1 个像素的矩形来绘制按钮,但如果在 Windows 中的视觉样式的未来实现中发生某些变化,这种方法可能会发生冲突。

所以问题是:我们能否以编程方式检测以当前视觉样式绘制的按钮使用边距,因此我们可以在指定矩形以绘制按钮时考虑到这一点?

一个主意。也许,我们可以从请求低级视觉样式部件属性的 API 调用中获取这些信息,如下所示:

主题资源管理器按钮低级属性


额外信息。这是在 Windows XP 中使用 Silver Luna 主题绘制在 17x17 像素矩形中的组合按钮和普通按钮的屏幕截图:

WinXP Silver Luna 按钮 - 缩放 1000%

如您所见,两个按钮都以给定的大小精确绘制:

下面您会看到在 Windows 7 中使用相同代码绘制的相同按钮:

Windows 7 Aero 按钮 - 缩放 1000%

现在右边的按钮占据了一个 15x15 像素的矩形。

0 投票
1 回答
199 浏览

vb.net - 尝试将 VisualStyler.ApplyExcludeTag() 方法应用于选项卡控件时出现警告 BC42025

我尝试将SkinSoft.VisualStyler.ApplyExcludeTag(control As Control, childControls As Boolean)方法应用于 Tab Control 以禁用此控件的 Skin,如下代码所示:

我收到了这个警告:

BC42025:通过实例访问共享成员、常量成员、枚举成员或嵌套类型;将不评估限定表达式。

如何禁用此警告?

0 投票
1 回答
330 浏览

user-interface - 如何为 MFC 功能区创建新的视觉样式?

该应用程序默认使用 Windows 7 功能区样式:

我想创建一个新的视觉样式,我在其中实现了不同的颜色,所以我创建了CMyVisualStyle继承自CMFCVisualManagerOffice2007. 这是.h:

这是.cpp:

我在 mainframe.cpp 中编辑了这个:

但似乎RUNTIME_CLASS找不到我的类,错误:编译器错误 C2653 '标识符':不是类或命名空间名称语言语法在此处需要类、结构、联合或命名空间名称。

更新:我包括了MyVisualStyle.h它并修复了错误。但它似乎并没有改变我的功能区栏的视觉风格。

0 投票
1 回答
317 浏览

c# - 绘制 Windows 10 字幕按钮的问题

我在使用 VisualStyleRenderer 类绘制 Windows 10 主题的窗口标题按钮时遇到问题。

我的问题是我不知道要使用哪个主题类。我试过了WindowCompositedWindow::Window但是,没有一个真正包含 Windows 10 主题按钮,因为我发现使用这个 msstyle 编辑器

哪个主题类包含 Windows 10 主题标题按钮?

现在的样子:

Windows 7 主题按钮

我希望它看起来如何:

Windows 10 主题字幕按钮

我如何绘制按钮: