2009-02-03 73 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。再次,不確定它是否適合您的特定情況,但似乎足夠有趣地指出。

祝你好運!