自定义Windows GUI库

时间:2010-04-28 18:57:15

标签: c++ c user-interface window

我一直想知道iTunes,Winamp等软件如何能够创建自己的用户界面。

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

2 个答案:

答案 0 :(得分:3)

WinAmp通常不提供自己的GUI - 它将其委托给“皮肤”。你可以下载几十个例子,除非记忆特别糟糕,否则文档也很容易获得。

从外观上看,我猜iTunes会使用某种翻译层来实现基本上是在Windows上运行的本机Mac UI(苹果最近决定的那种东西是如此邪恶,以至于它们是现在禁止使用iPhone,显然是iPad)。

由于任何可能被视为对Apple的否定的事情通常被视为异端,我会指向iTunes for Windows中包含的所有.xib文件。 .XIB文件(至少通常是)由Apple的Interface Builder生成,用于保存OS / X程序的资源,并在部署之前编译为.NIB文件。 Windows通常根本不使用.XIB或.NIB文件,而且我可能认为Apple包含一个兼容层以在W​​indows上使用它们(尽管我从来没有花时间去弄清楚它存储的文件是什么在或类似的东西)。

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

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

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

答案 1 :(得分:1)

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

Windows有很多GUI框架。

有些是

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

这些GUI框架中的每一个都在网上充分记录。