c++ /WIN32一个看起来很专业的应用程序——这真的可能吗?

C++/WIN32 A professional looking application - is it really possible?

本文关键字:应用程序 真的 WIN32 看起来 一个 c++      更新时间:2023-10-16

我一直在到处寻找一个好的解决方案/技巧,如何发布一个具有当今"高端"外观的应用程序。

我们都知道,当使用窗口编码时,我们通常会得到窗口风格的颜色/按钮/列表等。他们看起来和感觉都很丑。

当我们决定要销售一个应用程序时,人们希望它看起来很好——显然因为他们已经为它付钱了。

所以问题是:

  • 今天好的应用程序外观是如何实现的?
  • 所有者画什么?(真的吗??)
  • 自定义控件?
  • 一些好的非免费库,做"脏"的工作和"皮肤"你的应用程序?

我不相信程序员会做那些"透支"的技巧和技巧,完全完成一个控件需要很长时间。此外,我宁愿花时间编码内部应用程序的东西,而不是玩每个控件绘制。

我没有线索,但有一个截止日期,现在在经历了所有这些"ownerdraw"控制谷歌-我想到这不是事情…当程序员需要使他的应用程序看起来高端时,必须有其他方便的东西!

请帮忙,有工具吗?有什么建议吗?有. .

?

几个例子,他们是如何实现这种外观的:

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

您可以看看Qt的例子。除了它的基本功能之外,您还可以根据自己的喜好(以一种与CSS非常相似的方式)为所有小部件设置样式,并根据自己的喜好创建"主题"。

对于您链接到的图像中的窗口的非矩形外观,您可以使用Qt的setMask()功能。

这听起来像你想要一个完全可皮肤的应用程序,但没有更多的努力比典型的Win32控件。是不可能的。但是剥皮一般来说并不难,只是比你愿意花的时间要多。

你的下一个问题是:一旦你有一个皮肤的应用程序,你需要一个专业的平面设计师来开发一个好的皮肤。太多的小项目开发者认为他们可以制作自己的皮肤,但看起来总是很糟糕。如果没有一个设计专家,你想要的性感的职业形象是不可能的。

最后,无论您最终使用什么花哨的自定义皮肤,其功能都可能需要自定义。也就是说,如果你想要非矩形控件或动画,这些都是你必须花时间去开发的东西。

使用像Qt这样的工具包是一项不错的投资。但这是一种无论你如何分割都需要花费大量精力的细节。

有点离题:由UI专家正确设计,默认的窗口控件往往看起来非常专业。使用本机windows控件有很多好处,在你重新发明轮子之前,你应该仔细考虑一下:

  1. 辅助功能,如键盘导航,屏幕阅读器,高对比度。你真的打算重新发明Windows控件提供的所有可访问性特性吗?或者是否值得将残疾人排除在你的应用之外,这样你就可以使用一个皮肤(更不用说使用无障碍功能的非残疾人了)?
  2. 调整。您的皮肤是否意味着禁用任何窗口大小的调整?再问一次,这值得吗?
  3. 有些东西不能很好地剥皮。例如滚动条和菜单。一些开发者重新创造了它们(滚动条尤其难以重新创造),而另一些开发者则不去修饰它们。
  4. Windows主题。Windows主题不仅仅是开始菜单的颜色;它应该决定整个操作系统的外观。使用标准的窗口控件允许用户使用内置机制来选择外观。

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

相反,整个东西呈现为图像。有一个背景图像,以及一些覆盖图像(大部分是透明的),以提供鼠标高亮,禁用控件等。唯一没有预渲染的是当前曲目和播放列表信息,它们是带有特定字体的纯文本。

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

程序员几乎不需要做任何工作来实现花哨的设计,这一切都是由美工完成的(并且像Photoshop这样的程序在编辑器中支持图层,使得构建所有覆盖层非常容易)。

缺点,当然,是按钮不完全像普通的Win32按钮做。它们不支持键盘焦点(尽管可能有热键),只是在鼠标上激活。可访问性很糟糕,没有屏幕阅读器的信息,应用程序不尊重系统字体大小设置。为了让视力差的人也能读懂UI,需要一种完全不同的皮肤。

c++团队编写了一个名为Hilo的示例(就像夏威夷的那个地方),它不使用任何框架(没有ATL,没有MFC),并且都是本机代码。它使用了许多Windows 7的功能和一些令人愉快的图形和动画。所有的代码和设计都是可用的和文档化的。看一看。

如果你想深入挖掘任何特定应用程序的底层,你可以启动Spy Utility,看看一个界面被分解成多少个控件:

我想要spy++,但是我没有Visual Studio

WPF有类似spy++的工具吗?

例如

…在蒙皮模式下窥探Windows Media Player发现有一个名为WMP Skin Host的窗口类,您可以看到它有 0个子窗口。(常规的非蒙皮模式被分解成一些列表框和按钮,例如。)

根据我的经验,"现代"皮肤通常是一场灾难,当人们重新实现太多,试图"看起来很酷"。它阻碍了自动化(通过像AutoIt这样的东西),更不用说为残疾人提供的辅助功能了。而且,如果你不使用基于操作系统的主题化API,那么今天看起来很酷的东西就不会一直流行下去。

(注意:因为我一般是Qt的粉丝,我建议看看QStyle和QStylePainter。但这更像是"主题化"而不是"剥皮"。

我会非常谨慎地在应用程序中使用皮肤,除非我发现我是在为一个绝对需要它的市场开发(如音乐播放器)。

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

如果你不介意进入c++/CLI,这里有WPF,它提供了对用户自定义样式和模板的相当广泛的控制。

你可能想好好看看SkinCrafter。它成熟、稳定,而且非常灵活。我不再使用它,但我的经历是相当愉快的。

您可以使用外部布局引擎,其中一个是来自terra informatica的html layout,这个也可以使用一些专业软件