有这么一个Win32 API,名叫 DrawFrameControl,它可以用来在你的自定义控件上渲染一些标准的窗口元素。
下面我们举一个简单的例子来说明。
在下面的例子中,我们会使用这个 API 函数来绘制一个已选择的单选按钮。具体方法是,在我们之前的例子程序中做出如下的修改。
当运行修改后的程序,你会看到在窗口的角落有一个单选按钮。Woo-hoo。
可能你会发现,这个单选按钮是没有带主题的。如果你想绘制一个带主题的单选按钮,则需要使用定义在头文件 uxtheme.h中的相关绘制函数来实现。具体方法如下,在我们的例子代码中,做出如下的修改。
新的版本会自动获取当前 Windows 主题并应用到按钮外观上。如果没有启用主题,则调用会失败。
当需要绘制控件时,我们会查看是否有可用的主题。如果是这样,那么我们使用 DrawThemeBackground 函数来绘制它;否则,我们以无主题的方式绘制它。当然,我们会在销毁时关闭主题句柄,如果用户更改主题,我们也会刷新主题句柄。
如果你在启用主题的情况下运行此新程序,那么你将得到漂亮的主题单选按钮,而不是老式的无主题单选按钮。
在下一篇文章中,我们将研究研究稍微复杂一些的菜单位图。
总结
在大厂纷纷自己造界面轮子的时代,能坚守Win32 API,使用传统工艺打造自己的应用,也算一个倔强的奇葩(非贬义)吧。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Rendering standard Windows elements》