C++/WIN32 一个专业的应用程序 - 真的可能吗?

9

我一直在寻找一个好的解决方案/技巧,以发布具有当今“顶级”外观的应用程序。

我们都知道,在使用Windows编码时,我们通常会得到Windows样式的颜色/按钮/列表等。它们看起来很难看。

当我们决定要销售应用程序时,人们希望它看起来漂亮-显然是因为他们已经付钱了。

所以问题是:

  • 如何实现好的应用程序外观?
  • 自定义绘制?(真的吗?)
  • 自定义控件?
  • 一些非免费库可以完成“肮脏”的工作并“皮肤化”您的应用程序吗?

我不相信程序员会做那些“过度绘制”的技巧和窍门,这需要花费很长时间才能完全完成一个控件..此外,我宁愿花时间编写内部应用程序内容,而不是玩弄每个控件的绘制..

我不知道,但是有一个截止日期,现在在通过谷歌上的所有“ownerdrawed”控件之后,我发现这不是正确的方法..必须有其他东西在程序员需要使他的应用程序看起来顶级时方便使用!

请帮忙,有任何工具?任何技巧?任何-任何..?

以下是一些示例,它们如何实现这种外观:

http://fooh.pl/pokaz/3198197337370da4cdfdebf0ae13933c_openfm.jpg


我相信,HTML可以在某种程度上让这更容易,并将设计与代码分离。但我也想看到一个好的回答来解决这个问题。 - RocketR
嗯,有点奇怪的是C++(VStudio/WinAPI/W32)编程人员被困在那些丑陋的Windows控件中...我相信一定有解决方案-最近我看到了太多好看的应用程序,如果这些是自绘的,那么我想知道这是否是21世纪Win程序员唯一可能的选择。 - PeeS
3
这个应用程序的用户界面不够专业。当然,它有很多吸引普通用户的视觉吸引力,但控件太小、太靠近,没有很好的视觉指示,无法清楚地显示哪些是可点击的。 - Ben Voigt
Ben,是的,但与标准的Windows开发应用相比,这个外观就像“哇”。而且这不仅仅是关于“可点击或不可点击”的问题 - 更多的是:他们如何使其内在具有“消费者吸引力”? - PeeS
你所说的“Windows 风格”是什么意思?如果你的抱怨是因为没有进行自定义而无法获得定制外观,那么这种情况下应该投票标记为不真实。如果你的抱怨是关于获得例如 Windows 2000 的按钮外观等而不是主题化的内容,那么可以给你的应用程序添加“清单”。可以搜索谷歌了解更多信息。 - Cheers and hth. - Alf
显示剩余2条评论
9个回答

2
您可以看一下Qt,例如Qt。除了基本功能外,您还可以使用类似于CSS的方式样式所有小部件,并因此创建自己喜欢的“主题”。
对于您链接图片中窗口的非矩形外观,您可以使用Qt的setMask()功能。

看看Qt - 它看起来像Windows 3.11的用户界面。很抱歉,这不是我们要找的。 - PeeS
如果你指的是例子,我建议你再深入研究一下。尽管所提供的例子并不“吸引人”,但它们确实说明了基本上任何东西都可以改成你想要的样子。 - Bart
Bart,如果有任何看起来高端且使用QT制作的东西,我想看看...? - PeeS
谷歌地球使用Qt编写。 这可以吗? 如果不行,请从以下喜欢的选项中选择一个:http://qt.nokia.com/qt-in-use - gbjbaanb
KDE...?也许你会在这里找到喜欢的东西:http://qt.nokia.com/qt-in-use?但实际上,这已经不是重点了,我们对“专业外观”的定义肯定不同。 ;) 我的观点仅仅是Qt提供了所有所需的功能,并且在我看来使用起来也不太麻烦。你可以从中得到你想要的东西。祝你好运。 :) - Bart
嗯,谷歌地球的用户界面并不像你看到的那样“酷”,只是一个看起来很丑的标准用户界面。我并没有对渲染引擎发表任何意见,因为我们在这里谈论的是Windows UI。抱歉我找不到任何用QT制作的东西能让我惊艳... :) 是的,也许“专业外观”这个术语是区分我们的关键 :) - PeeS

2
听起来你希望有一个完全可皮肤化的应用程序,但不需要比典型的Win32控件更多的工作量。这是不可能的。但总体而言,换肤并不困难,只是比你愿意花费的时间更长。
你下一个问题是:一旦你有了一个有皮肤的应用程序,你需要一个专业的图形设计师来开发一个好的皮肤。太多小项目开发者认为他们可以自己制作皮肤,但几乎总是看起来很糟糕。如果没有设计专家,你想要的这种性感的专业外观是不可能实现的。
最后,无论你最终使用什么花哨的自定义皮肤,功能性很可能需要定制。也就是说,如果你想要非矩形控件或动画效果,这些都是你必须花时间开发的东西。
使用类似Qt的工具包可能是一项不错的投资。但这是一种需要花费大量精力的细节。
有点离题:如果由UI专家正确设计,默认的Windows控件通常会看起来非常专业。使用本机Windows控件有很多好处,你应该在尝试重新发明轮子之前仔细考虑:
1. 可访问性功能,如键盘导航、屏幕阅读器、高对比度。你真的要尝试重新发明Windows控件提供的所有可访问性功能吗?还是值得排除残疾人使用你的应用程序,只为了使用一种皮肤(更不用说使用可访问性功能的非残疾人)?
2. 调整大小。你的皮肤是否意味着禁用窗口的任何调整大小?同样,这值得吗?
3. 有些东西不能很好地换肤。例如滚动条和菜单。一些开发者重新发明它们(特别是滚动条很难重新发明),其他人则保留其原始外观。
4. Windows主题。Windows主题不仅仅是开始菜单的颜色;它应该决定整个操作系统的外观。使用标准的Windows控件允许用户使用内置机制选择外观和感觉。

"+1 这是一种细节,无论如何都需要付出很多努力。" - Bart
我认为你指出需要专业的平面设计师来实现“最终的好看外观”是正确的。我之所以问这一切,是因为两周前我完成了编写OpenGL实时游戏引擎,而且全部都是自己从头开始编写(包括用户界面)。当我们(开发团队)最终完成引擎工作后,我们收到了一个客户的小型蓝牙应用程序编写请求...我很震惊,在2011年我的应用程序内的标准控件看起来非常糟糕...我知道,专业的图形设计成员可以“变魔术”,使之变得漂亮。 - PeeS
Tenfour,你说得没错。我可能会保持现状,看看我的客户是否会抱怨说:“为什么它看起来这样?这是21世纪,看看我的苹果用户界面。” - PeeS
顺便说一下,皮肤应用程序的绝对最简单的方法是结合使用 UpdateLayeredWindow + .png 文件 + 手动处理用户输入和分派事件。正如我所提到的,您只会牺牲所有典型的可访问性功能。但是在预算紧张的情况下,这总是我所做的。它非常简单,因此不必担心“我投入了太多的精力来制作这个皮肤”。 - tenfour
他有点正确,人们已经习惯了“IPH0NE”的外观,我知道这一点是因为我为多个客户编写代码。他们只是希望在自己的笔记本电脑上拥有一个“酷炫”的应用程序,我很震惊居然没有明确的解决方案——即自定义绘制或旧式外观。 - PeeS
显示剩余3条评论

1

该应用程序可能没有单个控件。

相反,整个界面都是作为图像呈现的。有一个背景图像,以及一些叠加图像(大多数是透明的),用于提供鼠标悬停高亮、禁用控件等效果。唯一没有预先渲染的是当前曲目和播放列表信息,这是纯文本,使用特定字体。

可以使用另一个图像执行命中测试。

程序员几乎不需要做任何工作来实现花哨的设计,所有工作都由艺术家完成(像Photoshop这样的程序支持编辑器中的图层,使构建所有叠加效果非常容易)。

当然,缺点是按钮的行为与普通的Win32按钮不完全相同。它们不支持键盘焦点(虽然可能有热键),只在鼠标松开时激活。无障碍性很差,没有屏幕阅读器的信息,并且该应用程序不遵守系统字体大小设置。为了使UI可读性对视力较差的人友好,需要使用完全不同的皮肤。


1
C++团队制作了一个名为Hilo(就像夏威夷的地方)的示例,它不使用任何框架(没有ATL,没有MFC),全部都是本机代码。它使用了许多Windows 7的功能和一些令人愉悦的图形和动画效果。所有的代码和设计都是可用和有文档的。来看一下吧。

1

如果您想深入了解任何特定应用程序的内部情况,您可以启动一个Spy Utility并查看界面被分解成多少控件:

我想要Spy++但我没有Visual Studio

是否有类似于WPF的Spy++实用程序?

例如...在皮肤模式下窥视Windows Media Player,会发现有一个名为WMP Skin Host的窗口类,并且您可以看到它没有任何子窗口。(常规非皮肤模式被分解成一些列表框和按钮。)

在我的经验中,“现代”皮肤通常会在人们重新实现太多以尝试“看起来酷炫”时出现问题。它会妨碍自动化(通过AutoIt等方式),更不用说残障人士的辅助功能特性了。此外,如果您不使用基于操作系统的主题API,则今天看起来酷炫的东西将无法保持当前状态。
注:因为我一般喜欢Qt,所以建议查看QStyle和QStylePainter。但这更像是“主题”,而不是“皮肤”。
除非我发现我正在开发像音乐播放器这样绝对需要皮肤的市场,否则我会非常谨慎地在应用程序中使用皮肤。

0
通常情况下,您可以使用GDI(+)渲染来呈现自定义控件。

是的,但这需要我从零开始设计/编写每个控件 - 而我不想这样做,用GDI+制作所有控件需要一年时间。 - PeeS
@PeeS:如果你想要一个性感的用户界面,就必须付出一些努力。你也可以尝试使用.NET的WPF。 - Puppy

0

如果您不介意使用C++/CLI,那么WPF是一个很好的选择,它提供了对用户定义样式和模板的广泛控制。


这是我从未见过的东西 - 但据人们所说 - 它与C++不“合作”?还有更多相关信息吗? - PeeS
缺点是您需要将.NET框架与应用程序一起部署,并且正如您所提到的,C++/CLI可能不会合作(我不知道有设计师),但它是可行的,至少在编程上是这样。至于我解决这个问题的方法,我一直在使用C#/WPF编写GUI层,并使用互操作调用C++。 - PeskyGnat

0

你可能想好好看看SkinCrafter。它很成熟、稳定,而且非常灵活。虽然我不再使用它,但我的使用经验非常愉快。


Chet,看起来不错!你现在用的是什么替代SkinCrafter? - PeeS
@PeeS 我现在正在开发的应用程序不需要增强的外观和感觉。如果需要的话,我会继续使用SkinCrafter。 - Captain Obvlious
谢谢,Chet。我现在正在下单购买这个。 - PeeS

0
你可以使用外部布局引擎,其中一个是来自 Terra Informatica 的 HTMLayout,这个引擎也被一些专业软件所使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接