有這麼一個Win32 API,名叫 DrawFrameControl,它可以用來在你的自定義控件上渲染一些标準的視窗元素。
下面我們舉一個簡單的例子來說明。
在下面的例子中,我們會使用這個 API 函數來繪制一個已選擇的單選按鈕。具體方法是,在我們之前的例子程式中做出如下的修改。
當運作修改後的程式,你會看到在視窗的角落有一個單選按鈕。Woo-hoo。
可能你會發現,這個單選按鈕是沒有帶主題的。如果你想繪制一個帶主題的單選按鈕,則需要使用定義在頭檔案 uxtheme.h中的相關繪制函數來實作。具體方法如下,在我們的例子代碼中,做出如下的修改。
新的版本會自動擷取目前 Windows 主題并應用到按鈕外觀上。如果沒有啟用主題,則調用會失敗。
當需要繪制控件時,我們會檢視是否有可用的主題。如果是這樣,那麼我們使用 DrawThemeBackground 函數來繪制它;否則,我們以無主題的方式繪制它。當然,我們會在銷毀時關閉主題句柄,如果使用者更改主題,我們也會重新整理主題句柄。
如果你在啟用主題的情況下運作此新程式,那麼你将得到漂亮的主題單選按鈕,而不是老式的無主題單選按鈕。
在下一篇文章中,我們将研究研究稍微複雜一些的菜機關圖。
總結
在大廠紛紛自己造界面輪子的時代,能堅守Win32 API,使用傳統工藝打造自己的應用,也算一個倔強的奇葩(非貶義)吧。
最後
Raymond Chen的《The Old New Thing》是我非常喜歡的部落格之一,裡面有很多關于Windows的小知識,對于廣大Windows平台開發者來說,确實十分有幫助。
本文來自:《Rendering standard Windows elements》