【问题标题】:Custom Windows GUI library自定义 Windows GUI 库
【发布时间】:2023-03-31 05:26:01
【问题描述】:

我一直想知道 iTunes、Winamp 等软件是如何创建自己的 UI 的。

这在Windows平台下是如何实现的?网络上是否有任何代码解释如何创建自己的自定义 GUI?

【问题讨论】:

  • 最直接和低级的方法是捕获WM_PAINT 消息,它给你一个“设备上下文”(基本上是一个画布),然后手动绘制你想要的任何东西。当然,可能还有更高级和抽象的方法来做到这一点。
  • 很简单:雇佣 100 名程序员。告诉他们不要使用标准的 Windows 控件和类库,而是自己编写。经过 292,000 工时,您得到的东西看起来并不标准。

标签: c++ c user-interface window


【解决方案1】:

WinAmp 通常根本不提供自己的 GUI——它将其委托给“皮肤”。您可以下载几十个示例,除非记忆力特别差,否则文档也很容易获得。

从表面上看,我猜 iTunes 使用了某种翻译层来让基本上编写为原生 Mac UI 的东西在 Windows 上运行(Apple 最近认为这种东西太邪恶了现在禁止在 iPhone 和 iPad 上使用)。

由于说任何可能被解释为对 Apple 的负面评价通常被视为异端,因此我将指出 Windows 版 iTunes 中包含的所有 .xib 文件。一个 .XIB 文件(至少正常情况下)由 Apple 的 Interface Builder 生成以保存 OS/X 程序的资源,并在部署之前编译为一个 .NIB 文件。 Windows 通常根本不使用 .XIB 或 .NIB 文件,在我看来,Apple 可能包含一个兼容层以在 Windows 上使用它们(尽管我从未花任何时间来弄清楚它存储了什么文件在或类似的东西)。

编辑:(回复 Mattias 的最新评论)。渲染它很乏味但相当简单。您基本上从皮肤获取输入(例如)并创建所有者绘制控件(例如按钮)并根据该输入呈现按钮。

最简单的方法是为控件设置固定位置,并要求用户为背景和控件绘制/包含位图。在这种情况下,您只需加载背景位图并将其显示为覆盖应用程序的整个客户区域(您可能会使用无边框窗口,因此仅此而已)。您将所有控件指定为所有者绘制的,并且为每个控件加载其位图并将其blit 到该控件的屏幕上。由于(通常)不会有可见的标题栏,因此您通常需要处理 WM_NCHITTEST(或其他系统上的等效项)才能让用户拖动窗口。

如果您想变得更复杂一些,您可以添加一些内容,例如允许它们还为每个控件指定大小和位置,以及可能指定某些控件根本不显示。同样,这并不是很难管理——例如,在 Windows 下,大多数控件都是窗口,您可以在创建窗口时指定大小和位置。如果用户在运行时加载不同的皮肤,您可以调用MoveWindow 来根据需要移动/调整每个控件的大小。

【讨论】:

  • 我并不是要把这变成一场辩论,但我认为你是对的,Windows 上的 iTunes 等同于 iPhone 上的 Flash 或其他跨平台代码!但是,还要注意 iTunes 在 Mac 上的无缝连接,但在 Windows 上却非常尴尬和不合时宜。将其视为演示!
  • “将其委托给“皮肤”是什么意思?我的问题不是针对 Winamp 和 iTunes,而是针对某些应用程序如何能够呈现个性化 UI。知道他们如何通过“皮肤”渲染它仍然很有趣。
  • @Luca:WinAmp的皮肤开发文档在:dev.winamp.com/skin-developers
  • 啊,这不是我想要的。我的问题是他们如何实际渲染这些东西所固有的。
【解决方案2】:

我假设您的意思是创建 GUI 应用程序而不是 GUI 框架。

有很多适用于 Windows 的 GUI 框架。

有些是

如果您想要更完整的列表,请查看 MFC 的 Wikipedia 文章 (http://msdn.microsoft.com/en-us/library/d06h2x6e%28VS.90%29.aspx) 并滚动到底部。

这些 GUI 框架中的每一个都在 Web 上详细记录。

【讨论】:

  • 查看这些链接,它们是 GUI 框架,因此您可以了解它们如何处理它并从那里开始。例子是一个很好的学习工具。 ;)
猜你喜欢
  • 2011-07-20
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
相关资源
最近更新 更多