2016年4月18日 星期一

從解決 dotNet ComboBox 文字無法置中問題領略自繪元件的威力

作業系統歷經不斷的發展,從以前古老的 OS/2、DOS、Win3.0 到現在的 Win7、Win10、Linux 3.x系統在視窗子系統的部分越來越強大,像微軟最新的 WPF 框架其 UI 繪圖引擎甚至已經以
DirectXGraphics(前身為 DirectDraw 與 Direct3D)為基礎可以使用 GPU 硬體達到高速繪製 UI
的能力,從作業系統不斷演進與增強 GUI 子系統就可以知道,現代化的程式設計 GUI 的程式
設計是相當重要的一部分,也是複雜度很高的部分,一位工程師有可能完全掌握某些演算法程式的撰寫,可是基本上不可能完全掌握 OS 所有 UI 繪圖相關的 API,常常遇到的窘境正是
演算法有了,可是對應的 UI 卻不能很好的做出視覺化的呈現,導致客戶放棄功能強大卻難用
的操作介面,轉而選擇能夠簡單直覺操作的良好 UI,也許功能比原先同性質的軟體弱。

2016年1月11日 星期一

Win64 環境下位址算術的陷阱 A+B != A - (-B)

位址算術(address arithmetic/pointer arithmetic)顧名思意就是對某物件的位址進行加減乘除的運算,也就是算術運算子也可以套用在位址變數上進行操作,其目的往往是為了取得物件的部分內容稱為 upcasting,或是從結構中的某一個欄位間接推算其他欄位的頭位址,另外一個常用的目的是為了指向下一個內容物,如圖 1 當一個指向型別 T 的頭位址 p 要跳至下一個物件的頭位址時,只要將頭位址 p 加上指向型別 T 的大小就可以取得下一個物件的頭位址。