2010-04-28 128 views
3

我总是想知道诸如iTunes,Winamp等软件如何能够创建自己的用户界面。自定义Windows图形用户界面

这是如何在Windows平台下完成的?网上有没有解释如何创建自己的自定义GUI的代码?

+2

最直接和最低级的方法是捕获“WM_PAINT”消息,它给你一个“设备上下文”(基本上是一个画布),并手动绘制任何你想要的。当然,可能有更先进和抽象的方式来做到这一点。 – 2010-04-28 19:02:34

+2

这很简单:聘请100名程序员。告诉他们不要使用标准的Windows控件和类库并自行编写。 29.2万工时后,你有一些看起来不标准的东西。 – 2010-04-29 00:42:12

回答

4

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

从外观的角度来看,iTunes会使用某种翻译层来让基本上是在Windows上运行的Mac用户界面(苹果公司最近认定的那种东西是如此邪恶,现在禁止在iPhone上显然是iPad)。

由于任何可能被认为对苹果负面的东西经常被视为异端,我会指出所有包含在iTunes for Windows中的.xib文件。一个.XIB文件(至少通常)由Apple的Interface Builder生成,用于保存OS/X程序的资源,并在部署之前编译为.NIB文件。 Windows通常不会使用.XIB或.NIB文件,并且我认为Apple可能包括一个兼容性层来在Windows上使用它们(尽管我从来没有花时间去查找它存储的文件或类似的东西)。

编辑:(响应马蒂亚斯的最新评论)。渲染它乏味但相当简单。您基本上从皮肤输入(例如)并创建一个所有者绘制控件(例如一个按钮)并基于该输入呈现按钮。

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

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

+2

我并不是故意把它变成一场辩论,但我认为你在Windows上的iTunes与在iPhone上的Flash或其他跨平台代码等同是正确的!不过,还要注意iTunes在Mac上的无缝运行情况,但它在Windows上非常尴尬和不合适。考虑它是一个示范! – mbmcavoy 2010-04-28 19:41:51

+0

你是什么意思,它代表那个“皮肤”?我的问题不是特定于Winamp和iTunes,而是一些应用程序如何呈现个性化UI。知道它们是如何通过“皮肤”呈现它仍然很有趣。 – 2010-04-28 19:50:37

+0

@Luca:WinAmp的皮肤开发文档位于:http://dev.winamp.com/skin-developers – 2010-04-28 20:06:18

1

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

有很多GUI框架可用于Windows。

有些

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

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

+1

不,我的意思是GUI框架 – 2010-04-28 19:05:45

+0

看看这些链接,他们是GUI框架,所以你可以拿起一些想法,他们如何处理它,并从那里去。例子是一个很好的学习工具。 ;) – ssube 2010-04-28 19:20:49