鄙者在本站發表多篇對於GUI的文章,雖然有些評論,但可能是保守派 --- 所謂的保守派,就是以現存的GUI庫、各類技術爲尊,多數人缺少創新思想,不敢創新,或者認爲其代價太大。javascript
另外,個人文章寫的很差,考慮不周全,求學態度不謙虛,也是因素。php
對於程序設計語言,相信本站的同窗都不陌生,可能你會幾門甚至十幾門程序設計語言,可能讀者也時不時看一下TOIBE排名,瞭解前100名都是哪些程序設計系統。html
對於各類程序設計系統的發明創造,筆者不敢一律而論其發明緣由 --- 每種可能都有一個緣由,一個目的。好比C語言的發明,多是由於不一樣的機器使用不一樣的彙編太麻煩,統一使用C語言寫操做系統更爲簡單,Unix和C是同時流行的,互相成就;PHP的發明則是爲了寫網頁服務端程序更簡單...java
固然,有不少通用型程序設計系統。若是單輪關鍵字、語法,一種程序設計系統的關鍵詞可能只有100個,可是其程序庫(函數庫、類庫)則是五花八門,無所不包的。python
若是用一句話歸納個人發明 --- 一種以圖形界面(UI、GUI)設計爲核心的分佈式程序設計系統。若是用現存的系統做比喻,那就是和現存的Web有相似的結構,http服務器--GUI服務器,javascript+html -- 筆者自創的GUI描述。git
另外,筆者使用C++實現,除了教給用戶一套分佈式程序設計方法,還提供一個解釋執行GUI描述的exe程序 --- 這個程序相似於瀏覽器解釋執行html和javascript,只是咱們的GUI描述更爲簡單。程序員
咱們的GUI服務器也很簡單,整體上相似與http服務器的get請求、post請求模式,咱們提供給用戶幾個用於編程的API函數,用戶簡單調用就能實現一個GUI服務器,並在其中添加各類功能函數,便於GUI在描述中調用。github
使用者甚至不須要懂tcp/ip以及socket網絡編程,只須要簡單的添加本身的功能函數在GUI描述中調用便可。shell
固然,服務器可能作的很複雜 -- 多線程,erlang協程... 各類不一樣的服務器,有的專一於高併發高鏈接。初期,咱們並不期望能一步作到最好 -- 一個簡單的C++、tcp服務器程序,封裝起來並不困難。編程
; 變量定義,下文中全部部分能夠直接使用。 @var a=12 b="helo world" c=12.5 server="gui://edu.cn" end ; 圖形界面描述。 ; 每個圖形元素可指定處理過程;在子元素對應的屏幕範圍內,其處理過程會覆蓋父元素的處理過程; ; 對於兄弟元素,若是有重疊,重疊區域內,z-index大的會覆蓋小的。 @gui ; z-index屬性決定繪製圖形元素的次序,數字大的後繪製,可能會覆蓋z-index小的圖形元素。 ; top left width height 經過百分比定位而不是像素定位 1 WINDOW name="first" top=0.1 left=0.2 width=0.5 height=0.5 image="D:\test 1.bmp" z-index=1 2 REGTANGLE name="f1" top=0.1 left=0.1 width=0.2 height=0.2 2 A href="file://d/second.gui" caption="你好" 2 A href="file://d/third.gui" caption="測試" 2 REGTANGLE name="f2" top=0.5 left=0.6 width=0.4 height=0.4 2 TEXT name="t1" caption="點擊如下文字運行示例程序" 1 WINDOW 2 BUTTON name="b1" caption="按鈕" 2 PANEL 2 TABVIEW 2 TEXT caption=b 2 PANEL 3 IMAGE 2 TEXT caption="Hello world" end ; 初始化過程 @init ; 默認鏈接本地的gui服務器,調用函數。 a=cpp_fun1(12,"hello") ; 指定遠程服務器 a=cpp_fun1(12,"hello")@"gui://163.com" a=cpp_fun1(12,"hello")@server $first.title=a $first.show ;爲@gui添加一行節點 這裏將在第一個參數指向的控件後,添加一個控件節點。該函數不作控件"層次"檢查。 ; 你能夠在第一層控件後添加第三層控件。也就是說,即便你push_back成功了,不表示你的窗口描述就是正確的。 ;系統在建立並繪製控件時,會作檢查,若是檢查到你的樹形結構中,第一層控件節點有個第三層子節點,報錯。 $first.push_back("t1",4,"TEXT","caption","在函數裏添加控件") end ; 控件的鍵盤、鼠標處理過程 ; 子控件處理函數會覆蓋父控件的處理函數 ; z-index大的圖形控件處理函數可能會覆蓋z-index小的處理函數 @first.click $first.title="Changed Titile" end @f1.click end @f2.click end
@var爲變量定義部分
注意:=先後不能有空格。這麼作是爲了減小程序員和計算機的工做。
@gui部分,爲GUI描述,相似html,咱們對其作了語法限定,以數字開頭,表示該圖形控件的層次,1爲頂層,2層控件在1層控件內,3層控件在2層內 ..n+1層控件在n層內。
餘下的則爲控件的鍵盤鼠標處理函數。
咱們的exe程序能解釋執行以上文本,生成最終的圖形界面程序。
gui服務器,相似於http服務器。作過網站應用的同窗指導,http服務端可使用多種程序設計系統,java php python,具體能作什麼也是五花八門。
理論上,咱們的gui服務器可使用任何支持tcp/ip進行網絡編程的程序設計系統,而不只僅是C++。
咱們的GUI解釋器,將會鏈接到GUI服務器(鏈接到某個ip 和prot),調用gui描述中指定的函數,並返回結果,在圖形界面上現實。
實際上,我以爲我這套設計,超越現存的各類GUI庫 --- 現存的各類GUI庫,一大半是OO方法,就是以程序設計語言爲基礎,給你一堆GUI控件的類,而後,你就用去吧。 稍微好一點的是提供xml描述gui界面,好比C#.net的WPF庫。而其,他們大多隻教授GUI庫的使用,而並不涉及到分佈式。
所謂的分佈式,是使用相似html的控件,咱們在窗口中添加以下代碼,用戶點擊該鏈接,便可運行本地或者網絡上gui服務器傳過來的third.gui文本,解釋執行,該過程和你點網頁連接打開一個新網頁相似:
2 A href="file://d/third.gui" caption="測試"
如下是調用網絡上的一個gui文件:
2 A href="gui://baidu.com/third.gui" caption="測試"
在解釋程序大行其道的今天,咱們沒有理由拒絕GUI解釋程序,筆者不明白爲何現存的各類解釋程序都是單行交互或者在cmd shell字符界面下運行。
爲何不能解釋運行一個圖形程序?html和javascript的流行,告訴咱們,從此應該出現大量的GUI解釋程序設計系統。
目前,以上全部的想法以及原型程序(C++ WIndows API)都是一我的作 -- 筆者感受我這東西,實在太好。不肯私藏,但願有識之士能繼續下去。本人一我的作,一來力量有限,二來孤單,三來,玩心過重,事業性欠缺,同時又缺少辦公司拉投資等各類實際經驗,基本上,鄙者是個不問世事的技術宅男。
筆者確實但願,同行能爲該GUI系統,添加各類美觀、好用的GUI控件。
GUI描述中,一個重要的地方是用屏幕百分比定位、指定控件的長度和寬度。
若是,忘記,現存的GUI庫教給你的分辨率,像素定位知識。
一個初識電腦,不懂什麼是分辨率的人,顯然對百分比定位,更加清晰。他們能說出:這個窗口的左上角與屏幕左上角的距離爲屏幕長度和寬度的10%,20%,窗口的長度和寬度爲屏幕長度寬度的80%,90%?這種描述,纔是符合UI設計者的描述。
人們很容易用百分比定位來設計GUI界面,而不是用分辨率,畢竟人眼不能精確到某個像素。而現存的GUI庫一般是像素距離的來制定的。
打個比方,像素定位相似機器、彙編語言,而百分比定位則是高級語言(人類語言)。
雖然,像素,分辨率的概念並不難,可是在GUI設計上,卻顯得過低級原始。但願未來全部的GUI庫或者解釋器都使用百分比定位,從百分比到像素的轉化並不難,對於程序員來講,可能也就幾行代碼的事情,並且一次作好,其受益是無窮大的,每次設計一個GUI,你就少一次思考繁瑣的像素定位,醜陋、變化的像素佈局。 爲何不作呢?
固然,百分比定位,也有缺點,1024的3%不是一個整數。咱們能夠簡單的四捨五入。這種精度的喪失,對多數人不是問題,人們基本難以區分一個像素的差距,也不必 --- 不用把人眼當成高分辨率像機。
對GUI庫和解釋器,百分比定位強過像素定位。在本系統中,咱們使用浮點數(float),也就是寫上一個小數便可.
目前,這個原型是使用windows API實現,Window和TEXT很容易。PANEL容器控件,最好實現成html中的<tr><td>這種表格形式。
https://github.com/zhangyun00...
我這套系統受惠最多的多是C/C++程序員,C++標準裏沒有GUI庫,由於GUI和程序設計原本就是不一樣的領域,GUI不該該作成程序設計系統的函數庫、類庫,而是應該另外使用一套描述規則。html的設計者可能比任何人都懂GUI。
現有的C/C++gui庫,大概gtk和qt應用較爲普遍,可是對於我來講,不夠好。我發明的這套GUI系統,大概能夠視爲gtk和qt同類型產品,區別是,我這個GUI系統是解釋執行、網絡分佈式的,不用用戶編寫具體的C/C++代碼,只要簡單在解釋文本中寫好各類控件、位置參數等便可,並且,該GUI描述,能夠分佈在網絡上全部的有ip地址的機器上,只要你運行GUI服務器,gui描述就能夠鏈接到服務器取得該文件,解釋執行。