2009-02-03 44 views
3

我们正在构建一种通过Visual C++应用程序(MFC)中的GUI直观地连接组件的方法。简单的事情就像点击框和连线之间的线条并在其上存储信息。问题在于,我们正在从GDI的基础上完成所有这些工作,并且很快就会变成大量需要维护的代码。在Visual C++中使用简单的面向对象的2D图形框架?

我们真的在这里重塑车轮吗?

我在网上搜索了一些提供面向对象的二维框架(这里有趣的矢量图形)的组件。面向对象的意思是屏幕上的正方形是代码中的方形对象,或者至少可以将自定义信息存储在图形对象上。它应该支持检索代码中的对象位置等信息以在对象之间绘制线条,并检测鼠标是否位于对象之上。

不是很复杂的东西,但是如果有数百或数千行维护是因为你自己写了所有内容而变得相当复杂和难以维护,更不用说潜在的错误蔓延,这将是在成熟的框架中避免。

回答

2
+0

围绕Direct2D存在一些争议,Jonathan Blow在这里有一个很大的生气博客文章:http://braid-game.com/news/?p=466 – grapefrukt 2009-02-03 10:35:12

+0

DAM它。正当所有人都赢得了七场比赛后,他们在这里进行了救援。 – 2009-02-03 10:39:54

+0

感谢grapefrukt&Ctrl-Alt。 :)是的,D2D可能是某种东西,但在这种情况下,最好是基于D2D的框架呢?我不确定D2D比GDI更容易开发(即需要更少的代码)。 – Jonas 2009-02-03 12:57:04

0

作为一个SVG库,看起来很有用(感谢Malkocoglu的想法!),我发现这一个:libboard。代码示例的简洁性看起来很棒;我剩下的唯一问题就是让用户与其生成的SVG图形交互。 :/ AFAIK,它甚至不包含渲染器,更不用说与其绘图交互的方法。我不确定我是否愿意自己开发SVG解析器来控制这些需求。但是,以编程方式构建绘图的代码简单看起来就像我所追求的。嗯。

0

我相信你会用OO包去,但不要期待奇迹。 这是为什么。

我假设你开始了一些应用数据,一组应用对象的,我们姑且称之为对象A.

你可以使用一个包OO图形对象来表示对象的图形视图A,称此新的一组对象G.

现在,您有两组对象A和G,其中任何一个都可以动态更改,并且您面临将它们保持在正确对应关系的问题。 您不仅需要从A生成G,您必须在A更改时修改G, 并在G更改时修改A. 这需要大量事件驱动的链接代码,并且您永远无法确定您是否正确处理了每个事件。 你可以很容易地进入你看到的是而不是你得到的情况。 (WYSINWYG)

我有两个建议:

  • 你(使用 “BLT” 如果你想要做什么

有一个 “漆” 例行直接使一个物体避免闪烁)。将简单的图形信息附加到对象A,如屏幕位置和大小。自己处理鼠标事件,用于突出显示,拖动,创建连线等。这看起来很麻烦,但它避免了所有与冗余对象相关的连接问题。而且,您可以完全控制代码。

这是用于管理冗余的对象集的一个通用技术。但是,它有一个艰难的学习曲线。大多数程序员都不服从它,但它确实减少了代码并保证了正确性。

0

的描述“图形对象和它们连接在一起”,声音隐约喜欢的事,图(XFIG/winfig /等)处理。

另一种可能符合目的的产品(尽管价格很高)是Visio - Microsoft Office Visio SDK(见http://office.microsoft.com/en-us/visio/HA101656401033.aspx)据说非常丰富。

但是,我从程序员的角度看没有看到无论是无花果还是Visio,所以我不知道底层代码是什么样的,或者它是否适合您的目的......但我认为它们都是很好的起点获取灵感。也许在那里有另一个图形/图形库可能适合你的目的。

BTW,而noodling(呃,谷歌搜索)围绕这一点,我碰到AGD偶然 - 自动图表的绘制http://www.ads.tuwien.ac.at/research/graphDrawing.html。再次,不确定它是否适合您的特定情况,但似乎足够有趣地指出。

祝你好运!