2012-03-15 17 views
20

首先,我知道這是一種常見問題,但找不到我正在尋找的確切答案。在C++中創建WinAPI GUI應用程序的現代原生方式

我已經使用Swing在Java中完成了許多項目。從編寫GUI開始,然後轉向GUI設計人員。這被證明是構建GUI應用程序的一種快速而簡單的方法。

但現在,我需要遷移到C++。我開始使用大量硬件資源(DirectX,OpenCV等)的項目。我知道這些技術有Java庫。然而,考慮到這個項目的內部,C++絕對是正確的選擇。

我很熟悉MCU和C++編程語言。另外,我已經閱讀了很多關於本地WinAPI編程,Windows內部知識等的文章。我認爲我有足夠的知識開始。我不想過多擔心GUI設計,但它看起來應該是合適的。我知道有幾個基本選項:純WinAPI,MFC,WTL,Qt ......如果有某種GUI設計工具,我會非常高興,但是從我的研究來看,並不存在。有一個MFC嚮導幫助創建一個基本的窗口,但它不是一個設計者。我發現的最接近的是Qt。但從我所讀的內容來看,它並沒有使用WinAPI進行繪圖,因爲將來Qt編寫的應用程序的外觀和感覺可能與本機Windows外觀有所不同。因此,總結一下,如果您有使用GUI創建本機Windows C++應用程序的經驗,那麼您會向我推薦什麼?具體來說,有沒有我錯過的工具或設計師?

(我使用Visual Studio 2010專業,因爲我有它自由感謝的DreamSpark項目)

+0

你真的不除非你是一個懲罰貪婪...使用MFC。 – 2012-03-15 23:45:58

+6

我真的很驚訝,因爲「世界」轉移到託管代碼解決方案,並基本上停止原生GUI開發......仍然有原生地是最好的方式去... – 2012-03-16 00:07:50

+0

如果你喜歡符合微軟的編碼風格和接口,使用MFC。其他流行的GUI是QT和wxWidgets。如果您真的很積極和高效,請使用本機Windows API(非常痛苦)。 – 2012-03-16 00:11:20

回答

9

我最近使用Qt4,對API非常滿意。我發現它很直接,有據可查,而且代碼非常簡潔。 (如在評論中指出的那樣,Qt實際上自己繪製所有東西,並且而不是使用本地組件)。無論如何,這可以通過編碼通過他們的IDE,Qt Creator中的GUI編輯器進行手動或可視化。如果你走這條路,我建議在那裏創建你的初始GUI項目(.pro文件),然後通過Qt Visual Studio Add-In將它導入Visual Studio。

Slots and signals,Qt的事件/消息系統,也值得一提。是的,這對於GUI編程是至關重要的,但對於低級代碼也是非常有用的。

我希望Qt能夠在你的項目中很好地工作,但是和往常一樣,創建一些簡單的測試來確保這些技術能夠一起工作。

+0

是的,QT是最好的一個壞一堆。 :d – 111111 2012-03-16 00:42:50

+1

@zourtney:從技術上講它不使用本機部件,它吸引的一切本身。它看起來很原生,因爲它使用操作系統API來獲取系統主題信息。 – 2012-03-16 04:57:45

+1

@In silico,Ack!謝謝......似乎我在幾個月前閱讀文檔時跳到了結論。答修正... – 2012-03-16 05:23:29

3

可以使用,其中包括VCL(可視化組件庫的C++Builder XE2(該公司的RAD Studio IDE的一部分) ),VCL是Windows控件(也包括自定義控件)的一個包裝,它提高了開發效率。

1

根據您定義的嚴格程度,您可以使用.NET Windows Forms或Windows Presentation Foundation,並從C++,C++/CLI和C#中插入邏輯。這不會是一個純粹的C++解決方案。事實上,我甚至不會建議在這種情況下使用C++。簡單地使用C#會更直觀,更易於維護。 WinForms和WPF擁有非常出色的GUI設計師。

3

下面是一些提示:++

  • 不要把自己鎖成C。 C#和Java(例如)可以很容易地與C/C++互操作。 (前者通過PInvoke或C++/CLI,後者通過JNI)。 C++可能不是快速編寫GUI的理想語言。

  • 您對「本機窗口外觀」的要求是任意的,您應該考慮一下。那真的是你需要的嗎?

  • Winforms。這是一種較舊的技術,但仍被廣泛使用。您可以使用C++/CLI或C#(或任何.NET)語言的API。

  • WPF,最近的API,但是這將是很難對付的從C++,(更好地與C#或VB)

  • 其中有一個C或C市場上現有的許多GUI工具包++ API(QT,GTK,wxWidgets,VCL,... list here)。有些具有「本土」外觀,有些則不具備。有些設計師有些沒有。有些是免費的,有些則不是。

+1

我只能說C#:Interops可能是一個討厭的業務。特別是你如何不能返回一個編組值,所以你處理指針,並且只通過'IntPtr's,所以你需要記住/註釋類型,分配和釋放內存,使用靜態副本等。只需要使用字符串列表對我來說非常煩人,這只是兩個級別的指針。此外C++有名字改編它可以混淆新人,你必須匹配調用約定,比賽CPU架構,等等等等。 我可以同意,與工作時的原語只是它不是壞的,甚至是非常非常容易。 – MasterMastic 2014-08-09 09:28:09

3

如果您需要簡單的用戶界面,我建議使用WTL - 簡單,輕量級,僅包含頭文件的庫,對WinAPI非常好的包裝。在Visual Studio中,您可以使用窗體設計器來創建窗口,並使用WTL類實現與用戶的交互。 WTL的文檔很差,但WTL看起來像MFC。

如果你想豐富的可能性,我建議使用Qt。它是非常強大的GUI框架,擁有卓越的社區。

+0

我也推薦WTL。這是非常現代的,2014年發佈的第9版 – 2014-10-09 21:37:59

2

VCL是一個很好的選擇。它有一個圖形用戶界面設計工具(Embarcadero Rad Studio XE6)完全原生GUI開發人員的C + +和德爾福

相關問題