关于C#:UI动画的标准方式是什么?

What's the standard way for UI animations?

I'm working on a UI library powered by D2D, DWrite and Wic for (SDK API) Native C++ Desktop Applications (as in no XAML, no WinRT, just old school C++). I'm all set to write a windowless UI to give a more modern (as in this century look) to my C++ tools.

我是一个内心的拥护者,因此我在UI中花费的时间最少,并且大部分时间与Windows Standard进行了交互


好吧,Windows似乎对所有内容都有一个API。 :)

我刚找到Windows动画管理器。它不仅满足我的需要,而且在页面结尾处,有一些非常好的视频,介绍了UI动画概念以及它们与Animation Manager一起工作的方式。这是一组供C使用的COM对象。

PS:此外,它独立于图形平台。因此它可以与GDI,GDI,Direct2D ...

一起使用

PPS:一天后,我已经在其中沉没了,这非常好。我可以用最少的代码在屏幕上随意移动图形元素。这是逻辑。一个唯一的问题是它只能为DOUBLE值设置动画。因此,它没有POINT,RECT,SIZE,POLYGON,多个FLOAT,PATH等的概念或支持。一旦我了解了它的正常工作方式,我将对其进行包装并添加对上述数据类型的支持,完成。


我知道这很神秘(我经常这样做),而且您已经接受了答案……但是您或其他读者可能会对DirectComposition感兴趣。请注意,虽然它仅是Windows8。

Microsoft DirectComposition is a Windows component that enables
high-performance bitmap composition with transforms, effects, and
animations.


我无法告诉您标准方法,但是WPF方法(我认为也是Java Swing方法)是拥有一个名为UI线程的特殊线程,其唯一的工作就是执行调度程序循环。调度程序循环只是一个队列(含糖)的奇特词汇。该框架将为该队列上的每个帧安排一个绘制函数。如果您想要动画,则也必须在该队列上安排这些微小的逐步更新。这是因为WPF等不希望在UI线程上锁定/阻塞,并且他们也不想竞争条件。

因此回答您的问题:它既不是不同的线程,也不是计时器。这是一个执行动画步骤的调度程序。


GUI中没有标准。 C也没有gui。虽然现在有线程:)

  • 诸如word或Outlook之类的应用程序应将C#用作gui,将C用作核心。
  • 实验室,大学,军事掩体中面向技术和开发用户的应用程序通常可以通过简单的跨平台GUI逃脱。 QT很普遍。对于诸如演示之类的非常简单的东西,fltk可能就足够了。
  • 用途狭窄的小型工具(文件压缩器,torrent客户端,任务管理器)可以使用本机winapi窗口功能。 C风格。无法维持。无法扩展。 Windows平台的本机。经过多年优化性能。
  • 电子游戏通常会重新发明轮子,并使用d3d在游戏内执行所有gui活动。
  • 诸如skype之类的应用程序需要最先进的gui功能,例如浮动/可停靠/托盘/自定义形状/透明度/绝对定制的GUI,无论其价格如何-为此,它可能都带有MS的亮点,例如silverlight或Wic。
  • 大型项目很可能会选择MFC或ATL。

很可能会选择C#或Qt作为严重的gui。对于较小的东西,winapi gdi或较小的跨平台c gui工具箱。

对于Windows上的任何非控制台编程,请熟悉"窗口过程"和winapi消息循环。首先在Visual Studio中创建一个新的默认Win32项目,然后查看它产生的代码。不要这样写。只需注意以下模式:

<zzu0>

这是本地winapi应用程序框架。这是MFC / ATL / Qt在下面执行的操作。 Winapi开箱即用提供了一些非常基本的控件:窗口,文本框,按钮,单选按钮,选择按钮,列表框。所有人都做基本的阴影,突出重点-从win95开始可用的东西,但实际上还不多。如果gui非常适中,那么您可能只使用普通的winapi即可。

作为gui库开发人员,最好的组合可能是ms或其他供应商提供的win32 api和com组件。