你有自己寫過 Windows 上的應用程式嗎?
就算手機 App 當道的時代, Windows 應用程式依然是辦公室不能沒有的軟體。但是,你卻不曾看過會寫 Windows 應用程式的人?或許,這表示你太年輕了!
我從智慧型手機還沒普及的時代,就開始寫 GUI 程式,讓我這個「老人」來說說自己追逐工具的歷史吧。
最早學的 VB6
M$ 的 VB6 我最早碰,當時在學校修「機械視覺」學的。因為先學過比較困難的 C++,所以 VB6 幾乎是無痛上手。當時修課做了一個期末作品,就是把 ADC 讀進來然後畫波形。
如下圖,畫波形的部分並沒有用到任何現成物件、或其他第三方控制項,就是自己用VB6原生的東西打造出來。
以我當時的程度來說,要這樣做其實相當困難,一門課的動力還不足以 push 到此水準(不是我太混喔,天花板效應的關係),另一個促成的原因,是要做非接觸式步態偵測裝置及方法(中華民國專利編號:I517837)的開發。
用久了,想結合影像處理,發現 VB6 捉襟見肘,遇到一些瓶頸:
- 沒有 OO,程式碼寫大了很難管理
- 很慢,不論 IDE 或是 Binary code(執行檔)都很慢
- 無法使用 OpenCV
所以開始需要尋找新的 GUI 工具,首要考量當然是 C++ Builder 和 C++/CLI,因為當時唯一會的 OO 語言只有 C++。
這兩個選擇之間很難決定,因為在多年前各有優缺點,沒有誰明顯佔上風。
那是個怎樣的時代?大家正在從 Windows XP 過渡到 Windows 7 的時代,很多 3C 賣場的新筆電都標榜可以從 7 或 Vista 降級到 Windows XP,而 .net 還不是任何一個 OS 的原生環境,所以 .net 家族的 C++/CLI 自然出局,build 出 Binary 在 Windows XP 上可以直接跑的 C++ Builder 就成為我第二個碰的 GUI 工具。
C++ Builder 6
有了 C++ Builder 6 之後就可以快快樂樂的使用 OO,也可呼叫 OpenCV,度過了一段短暫的快樂時光。
不過呼叫 OpenCV 卻只限於 1.X,2.0 以上的 function 因為找不到找 ”cv” 這個 namespace,無法用類似 cv::imread() 這樣 2.0 的功能,造成 C++ Builder 6 在我心中的價值感大大下降。
但 C++ Builder 6 有個特別的 class 叫做 PerformanceGraph,可以不用自己刻波形畫布(如下圖)
不過要是讓 PerformanceGraph 跑得快,波形就容易出現莫名其妙的斷點,我想這可能不是 bug,應該是規格,或許本來就不是設計給快速用途。
C++ Builder XE6
在 Borland 被收購到 Embarcadero 之後,C++ Builder 又以新版本再生,而且強化出可以只用 C++ source code 就 cross compiler 到 Android 和 iOS 的版本。
但這個版本的發展重點在寫一份 C++ 可以 build 出 Android 和 iOS。只是在大亂鬥底下,C++ Builder XE 系列愈來愈凋零了。
對我來說同樣有找不到 ”cv” 這個 namespace 的問題,就只拿來寫過幾個操作 socket 和 UART 的小程式而已。
這篇文章我從 2016 年年假就下筆了,但是從寫論文、就業以來幾乎被擱置,尤其就業後以 Linux 為作業環境,而且也沒有寫 GUI 的機會,所以就更沒有寫這篇的能量。但遲早要把寫一半的文章整理出清,不然過去的「積蓄」還會持續貶值。
若按照我使用工具的歷史發展,接下來就會轉到**(二) :.Net家族**,但我真得寫得出來嗎?就隨緣
囉。