天天看點

使用Win32 API 渲染一個标準界面元素

作者:漫漫開發路

有這麼一個Win32 API,名叫 DrawFrameControl,它可以用來在你的自定義控件上渲染一些标準的視窗元素。

下面我們舉一個簡單的例子來說明。

在下面的例子中,我們會使用這個 API 函數來繪制一個已選擇的單選按鈕。具體方法是,在我們之前的例子程式中做出如下的修改。

使用Win32 API 渲染一個标準界面元素

當運作修改後的程式,你會看到在視窗的角落有一個單選按鈕。Woo-hoo。

可能你會發現,這個單選按鈕是沒有帶主題的。如果你想繪制一個帶主題的單選按鈕,則需要使用定義在頭檔案 uxtheme.h中的相關繪制函數來實作。具體方法如下,在我們的例子代碼中,做出如下的修改。

使用Win32 API 渲染一個标準界面元素

新的版本會自動擷取目前 Windows 主題并應用到按鈕外觀上。如果沒有啟用主題,則調用會失敗。

當需要繪制控件時,我們會檢視是否有可用的主題。如果是這樣,那麼我們使用 DrawThemeBackground 函數來繪制它;否則,我們以無主題的方式繪制它。當然,我們會在銷毀時關閉主題句柄,如果使用者更改主題,我們也會重新整理主題句柄。

如果你在啟用主題的情況下運作此新程式,那麼你将得到漂亮的主題單選按鈕,而不是老式的無主題單選按鈕。

在下一篇文章中,我們将研究研究稍微複雜一些的菜機關圖。

總結

在大廠紛紛自己造界面輪子的時代,能堅守Win32 API,使用傳統工藝打造自己的應用,也算一個倔強的奇葩(非貶義)吧。

最後

Raymond Chen的《The Old New Thing》是我非常喜歡的部落格之一,裡面有很多關于Windows的小知識,對于廣大Windows平台開發者來說,确實十分有幫助。

本文來自:《Rendering standard Windows elements》

使用Win32 API 渲染一個标準界面元素