c++ - 自定义 Windows GUI 库

标签 c++ c user-interface window

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

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

最佳答案

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

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

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

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

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

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

关于c++ - 自定义 Windows GUI 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732322/

相关文章:

c++限定符错误

c++ - 多项式拟合力一次为零

c++ - 使用大数组索引增加访问时间

C++ 位集没有内联?

c - 如何将输出打印成表格形式?

.net - .AMV 视频编码器/转换器?

c - c中stm32l中的数据损坏

ios - 根据另一个的增长缩小 UITextField 的宽度

Java Swing 。从 JButton 打开一个新的 JPanel 并使按钮变得漂亮

python - 限制matplotlib python中的x轴