问题标签 [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 投票
4 回答
5122 浏览

c++ - C++/Win32 : XP Visual Styles - 没有控件出现?

好的,所以我对 C++ 和 Windows API 很陌生,我只是在编写一个小应用程序。我希望我的应用程序在 XP、Vista 和 Windows 7 中都使用视觉样式,所以我将这一行添加到我的代码顶部:

它似乎在我的 Windows 7 机器和 Vista 机器上完美运行。但是当我在 XP 上尝试该应用程序时,该应用程序不会加载任何控件(例如按钮、标签等)——甚至不会显示消息框。

此图像显示了一个小型测试应用程序,我刚刚将它放在一起以演示我要解释的内容:http: //img704.imageshack.us/img704/2250/myapp.png

在这个测试应用程序中,我没有使用任何特别花哨或复杂的代码。我实际上只是从 MSDN 库 ( http://msdn.microsoft.com/en-us/library/ff381409.aspx ) 中获取了最基本的示例代码,并在 WM_CREATE 消息中添加了一个部分来创建一个按钮:

但我只是无法弄清楚发生了什么以及为什么它不起作用。有什么想法吗?提前谢谢你。

(顺便说一句,如果我从顶部删除清单部分,应用程序在 XP 中的工作方式 - 显然没有视觉样式。我还应该提到该应用程序是在 Windows 7 机器上使用 Visual C++ 2010 Express 构建的 - 如果这使得区别?)

0 投票
1 回答
1962 浏览

c# - 视觉风格独立绘图

使用 C# winforms,我想创建看起来像真实的自定义控件。

有很多类可以用来绘制看起来像真实的控件:ControlPaint, VisualStyleRenderer, ButtonRenderer, CheckBoxRenderer, ComboBoxRenderer, GroupBoxRenderer, ProgressBarRenderer, RadioButtonRenderer, ScrollBarRenderer, TabRenderer, TextBoxRenderer, TextRenderer, ToolStripProfessionalRenderer, ToolStripRenderer, ToolStripSystemRenderer, TrackBarRenderer.

考虑视觉风格时出现的问题:我想独立于视觉风格。含义:我不在乎用户是否允许视觉样式,我希望它能够工作。如果用户启用了视觉样式,我想使用视觉样式来绘制它,否则我想在没有视觉样式的情况下绘制它。

根据 MSDN 文档,唯一独立于视觉样式的类是ButtonRenderer, CheckBoxRenderer, GroupBoxRenderer, RadioButtonRenderer. 这意味着对于所有其他情况,我需要检查自己是否启用了视觉样式并使用不同的代码来绘制零件。

假设我想自己绘制一个 Tab 控件部件。TabRenderer类具有所有需要的功能,但它仅在用户启用视觉样式时才有效。否则我需要使用ControlPaint类来绘制,但它使用完全不同的模型,没有ControlPaint.DrawTab()方法或类似的东西,我需要弄清楚我需要绘制哪些矩形类型,所以它看起来像一个真正的选项卡。这很烦人。

包括 Tab 控件在内的内置控件已经具有这种在有或没有视觉样式的情况下自行绘制的功能。为什么微软不向自定义控件创建者公开此功能?为什么自定义控件的创建者会受苦?

0 投票
2 回答
6251 浏览

c++ - 如何更改 Win32 API 应用程序中的控件主题?

如果我在 Win32 API 中创建一个按钮,默认的控制主题看起来像一个 Windows 95/98 按钮。我记得过去微软论坛告诉我如何获得 XP 风格,但我不记得如何做到这一点。有没有办法以编程方式或手动更改 Win32 应用程序中的控件主题?谢谢。

0 投票
1 回答
289 浏览

c++ - 使用清单会导致窗口部分保持空白

我正在尝试制作一个在 Visual C++ 6.0 中完成大部分开发的应用程序,以遵循 Windows 主题,或者更准确地说是它的视觉样式方面。有问题的应用程序是具有 MBCS 字符集的 MFC 应用程序。首先要启动主题需要将InitCommonControlsEx(...);技巧与 Common Controls 6.0 的适当清单相结合。到目前为止没有什么特别的。

完成所有这些后,我有大量的窗口显示出一些类似的绘图故障 - 背景上的白色矩形曾经是灰色的,就像窗口的其余部分一样,但它们不会妨碍。

最大的麻烦制造者是CDialog实现(古老的)“你知道吗...”提示对话框的后代。当清单就位时,它拒绝绘制按钮、复选框和装饰框以外的任何内容。但是,如果我将清单取出,一切正常。

调用对话框后立即比较图像

我已经逐步完成了OnPaint代码(它绘制了图标和“你知道吗”文本,并且所有函数都返回合理和成功的值。我还尝试删除整个 customdrawn 位(注释掉WM_PAINTWM_CTLCOLOR消息的映射),但是即便如此,也没有什么表现出或采取不同的行动。

单击“下一个提示”按钮后,它将正确绘制列表中的下一个提示。但是,带有灯泡图标的自定义标头仍然丢失。

该代码确实没有什么特别之处,我可以发现,我很茫然。由于我怀疑对话定义最有帮助,因此我将其包括在内,尽管如果人们对问题隐藏在哪里有想法,我可以发布其他内容。

我正在测试的机器是运行 VS2010 的 W7 64 位机器。有问题的应用程序本身是 32 位的。

编辑:

新的一天提供新的见解。不知何故,问题在于WM_CTLCOLOR消息的处理。当我将它设置为返回 aNULL_BRUSH时,我终于看到了正在绘制的东西(在初始绘制之后,当然在另一个之上模糊了)。更进一步,似乎当nCtlColor == CTLCOLOR_STATIC我返回 a时NULL_BRUSH,会显示一些东西。然而,当我把它变成WHITE_BRUSH空无一物时,它又被画了出来。

原始代码:

问题解决了!粗体字是我为解决我的问题所做的更改,包括强制性注释。:)

0 投票
2 回答
2015 浏览

c# - 如何为 .NET 应用程序设置自定义主题?

正如标题所说,我想知道如何为 Photoshop CS4 或 Autodesk Maya 2011 之类的程序设置样式。这些程序的样式设置为 UI 看起来完全自定义。现在我正在使用 C# 进行编程,但如果更容易的话,我可以轻松切换到 C++ 和 WinAPI。我在 C# 中对样式控件进行了多次谷歌搜索,但似乎没有准确的结果。

非常感谢您的帮助,-Thomas

0 投票
2 回答
2568 浏览

delphi - 如何使 Edit1.Font.Charset 与主题(视觉样式)一起使用

如果您有一个带有 TEdit“TestEdit”的非主题、非 Unicode VCL 应用程序并将 TestEdit.Font.Charset 设置为 RUSSIAN_CHARSET TestEdit 将显示西里尔字符。但是,如果您将应用程序切换为使用主题,这将不再起作用。请尝试以下操作来查看:

  1. 创建一个新的 VCL 应用程序。
  2. 关闭默认 Unit1 而不保存。
  3. 将项目源代码 (Project1.pas) 替换为本文底部的代码,并另存为 CharsetTest.pas。
  4. 在项目选项中取消选中运行时主题。
  5. 运行程序,单击单选按钮,观察编辑框的字体。
  6. 现在检查项目选项中的运行时主题或将 XPMan 添加到使用子句中。
  7. 重复步骤 5。

我的问题是:有没有办法让应用程序即使在主题时也能尊重字符集?(无需切换到 Unicode。)

0 投票
3 回答
13159 浏览

c++ - 如何在没有清单的情况下启用视觉样式

根据文档

“如果您希望您的应用程序使用 ComCtl32.dll 第 6 版,您必须添加一个应用程序清单或编译器指令来指定应该使用的第 6 版(如果可用)。”

注意到上面的逻辑或了吗?那么这个神秘的编译器指令是什么?

我有一个完全包含在单个 .cpp 文件中的本机 Win32 C++ 应用程序。没有资源文件、清单文件等。我想保持这种状态,但我也想使用视觉样式。

0 投票
1 回答
5591 浏览

c# - 如何使用 C# 在 Win 窗体中应用 Windows 经典主题的视觉样式

我正在为我的 Windows 应用程序使用 VisualStyleRenderer,它非常适用于 Windows XP 主题,但不适用于 Windows 经典主题。任何人都可以建议我如何使应用程序主题可支持。

更新:

让我用一张清晰的图片来描述它。我有一个列表视图,在列表项上,我正在使用 VisualStyleRenderer 类绘制一个按钮,并使用一些渐变颜色绘制该按钮区域。它适用于 Windows XP 主题,但是当我将主题更改为 Windows 经典时,按钮 wffect 没有出现,这是我使用 VisualStyleRenderer 类绘制的。

任何帮助将不胜感激

提前致谢。

0 投票
2 回答
2079 浏览

winforms - 将自定义视觉样式 (.msstyle) 应用到单个 Winforms 应用程序

有什么方法可以在不更改整个系统主题的情况下将自定义视觉样式 (.msstyle) 应用于 Windows 窗体应用程序?基本上,我们希望我们的应用程序保持相同的主题,无论在控制面板中设置了什么。请不要告诉我你是否认为这是个好主意。我想知道是否有任何不涉及专有库的方法来执行此操作,例如一系列本机 API 调用。谢谢!

0 投票
3 回答
14402 浏览

c - 在 C + Win API 中编程:如何让 Windows 7 查找控件?

我严格使用 C 和 WinAPI 编程,没有 C++ 或 C#。我是一个初学者,刚刚学习绘制控件等。问题是,当我创建 Windows 或其他控件(如命令按钮)时,它们具有 Windows Native 外观。看看这个:

这是我得到的样子!

但在 Windows 7 中,命令按钮如下所示:

在此处输入图像描述

现在,如何让我的程序中的命令按钮看起来像这样。甚至可能吗?我正在关注本教程,供参考:http: //zetcode.com/gui/winapi/

谢谢。