目前比較熱的GUI 總結

2021-08-25 18:40:58 字數 2573 閱讀 2110

在這個帖子上我們可以看到常見的程式框架見到了free和商業兩大類,幾十種。

整理了一下常見庫的評價:

mfc:執行效率很高,功能很全,思想比較舊,物件導向特徵不明顯,開發效率較低,不跨平台。

wtl:執行效率很高,功能較全,比較先進,但是文件很少,沒有官方支援,不跨平台。

wxwidget:執行效率很高(windows下,也是原生視窗,和mfc一樣,linux下要差些),功能很全,風格接近mfc。現方式類似 mfc,通過巨集來實現訊息對映。

qt:自繪視窗,跨平台時視窗風格能夠固定,執行效率較低,但開發效率較高,可跨平台。

fox-toolkit,小 日 本的作品,訊息對映機制感覺比較糟糕

帖子mfc和directui的優勢48、52、59樓,裡面提到兩個介面庫免費開源的

附錄1:windowless的致命缺點

小弟最近研究介面實現技術,過年也沒閒著,google了整個網路。弄介面也弄了幾年了,做比較炫的介面,也沒什麼問題。最近公司年後要啟動乙個專案,專案非常複雜(一套賣幾百萬),要使用文件/檢視結構,但一定要做深層次美化。以前一直用mfc做介面,使用gdi或gdi+貼圖,用ini或xml配置介面。常用控制項的美化也實現了好幾年了,都比較穩定,個別特殊控制項,實現一下也沒什麼問題,由於這個專案週期很長(兩年多),正好借新專案,好好總結一下目前比較常見的介面開發技術。今天先總結一下windowless的致命缺點,過兩天總結它的優點,和其它技術的優缺點。再提一句,我們的專案是使用wpf開發,也是windowless,但與我下面所說的windowless是兩回事。

windowless或者稱handleless,也就是無控制代碼視窗,在設計和實現的時候,每個控制項都自己實現,最後畫到父視窗中。另乙個偽windowless是用標準mfc控制項,然後通過hook或其它遠端執行緒注入等技術,讓spy++等軟體,看不到視窗控制代碼。這主要是為了防止盜號木馬通過edit視窗控制代碼,盜取使用者名稱和密碼。好了,費話少說,下面是小弟總結的windowless的缺點,如果要使用這類介面開發技術,要麼有源**,要麼是自己公司實現的,否則風險非常大。

1、無視窗控制代碼,所有您以前關於「視窗」概念的知識都白學了。您將不可能使用::showwindow(hwnd, sw_hide)來隱藏乙個視窗,也不能使用::movewindow來移動乙個視窗。

2、所有您以前學習的關於「訊息」的知識也作廢了。您不可能使用::sendmessage(m_hwnd, wm_settext, 0, (lparam)_t("hello world"));來設定視窗標題。

3、如果您的程式已經寫好,需要花費比開發程式還要長的時間來移值到directui介面上。

4、重新學習一套系統介面和概念,如果不是國際知名的大公司的windowless產品、這些知識對您的職業生涯沒有太多好處,反而浪費了您的時間。

5、如果不是國際知名公司的產品,產品的穩定性和可發展性無法保證。

6、如果您的功能層**需要與ui層互動,例如,要向ui視窗傳送訊息,那麼您的功能層**也要做相應的修改,所以windowless類的介面庫,不僅僅影響ui層,還影響功能層。

7、視窗的剪裁、啟用、繪製、訊息迴圈等等全部需要模擬。

8、除了極個別程式,全球幾乎所有軟體產品都使用win32布局方式,無論在技術儲備,相容性和獲得幫助方面,標準視窗觀念都有得天獨厚的優勢。

9、無法對編譯好的exe進行後期漢化、編寫外掛程式等常規操作。執行中的程式也無法響應其它程式發來的標準訊息,例如隱藏控制項、設定控制項文字等。

10、不支援mfc的文件/檢視框架。

綜上、windowless比傳統win32視窗樹形結構有很多侷限性和不確定性。

附錄2樓的理解:

還是回到windowless吧。近幾年很多人關注directui/windowless,卻不知directui為何物。我曾經在某個帖子裡面做過比喻:directui = window + windowless,所有在螢幕上顯示的東西都是directui方式,3d是,瀏覽器是,連普通視窗也是,大家都在視訊記憶體的同一塊區域顯示所有內容,**分什麼有視窗無視窗。為什麼要把視窗分成有控制代碼和無控制代碼呢?因為微軟的有控制代碼視窗是工業標準,操作方式有章可循,視窗api大家耳熟能詳,家家戶戶都用沒有鎖的門窗,所有人都知道該怎麼操作視窗,偷雞摸狗的人當然也知道,所以第乙個問題就是標準帶來了更高的安全風險,於是乎很多人開始希望在自家門窗上加一把鎖,而且只有自己有鑰匙。最早加鎖的人還是微軟自己,msn要保護使用者隱私,搞了個directuihwnd,被人發現後,directui這個名稱就逐漸擴散開來,也有越來越多的軟體給自己的視窗加了鎖。從這個時候起,directui = windowless,就是為了跟不安全的有控制代碼視窗區別開來。directui 的另一層含義就是隱秘、非標準,這個概念會在使用者心裡生根,一旦有哪家的所謂 directui 視窗因為流行而不幸成為另乙個標準,它絕對會被人們踢出 directui 陣營,結局跟有控制代碼視窗沒什麼兩樣,就因為太標準而失去了隱秘的特性。也正是因為隱秘、非標準的特性,多少人削尖腦袋想找到 directui 框架、類庫、標準,結果是找不到的,因為沒有標準。反過來說,只要不是標準的,都可以叫做 directui,人人都可以自誇我的視窗是 directui,其實不用誇,本來就是,誇多了會誤導更多人。

當然,windowless 不僅僅是為了安全,在能力上自然也有自己的過人之處,我只舉個最小的例子:如果想讓乙個視窗的某個子控制項藏在背景貼圖的後面,普通視窗是辦不到的,對windowless來說輕而易舉。

目前比較全的CSS重設 reset 方法總結

在當今網頁設計 開發實踐中,使用css來為語義化的 x html標記新增樣式風格是重要的關鍵。在設計師們的夢想中都存在著這樣的乙個完美 世界 所有的瀏覽器都能夠理解和適用多有css規則,並且呈現相同的視覺效果 沒有相容性問題 但是,我們並沒有生活在這個完美的世界,現實中發生的失 竊卻總是恰恰相反,很...

目前比較全的CSS重設 reset 方法總結

在當今網頁設計 開發實踐中,使用css來為語義化的 x html標記新增樣式風格是重要的關鍵。在設計師們的夢想中都存在著這樣的乙個完美世界 所有的瀏覽器都能夠理解和適用多有css規則,並且呈現相同的視覺效果 沒有相容性問題 但是,我們並沒有生活在這個完美的世界,現實中發生的失竊卻總是恰恰相反,很多c...

目前比較全的CSS重設 reset 方法總結

在當今網頁設計 開發實踐中,使用css來為語義化的 x html標記新增樣式風格是重要的關鍵。在設計師們的夢想中都存在著這樣的乙個完美世界 所有的瀏覽器都能夠理解和適用多有css規則,並且呈現相同的視覺效果 沒有相容性問題 但是,我們並沒有生活在這個完美的世界,現實中發生的失竊卻總是恰恰相反,很多c...