我正在使用Visual Studio 2005(和C++中的win32 API),并且有一个使用内置对话框编辑器设计的窗口。
在运行时,我希望能够使用CreateWindow()
向其中添加新控件。这行得通,但是我创建的控件看起来都很难看。为了具体起见,我要添加的控件是TabControl,当我使用内置对话框编辑器添加它时,选项卡标签中的文本看起来不错。当我在运行时使用CreateWindow()
创建它时,该文本大而粗体,看起来不合适。
我在MSDN上发现了Using Windows XP Visual Styles,它似乎在正确的区域中描述了内容,但是当我按照其中的说明(嵌入 list )进行操作时,动态创建的控件似乎比对话框编辑器所使用的控件新的样式(标签控件的背景颜色要浅得多)。
我还找到了SetWindowTheme()
函数。我不太确定如何使用此功能...我希望可以在窗口上使用GetWindowTheme()
,然后将其结果传递给SetWindowTheme()
以使其看起来相同,但是GetWindowTheme()
返回HTHEME,我不知道您甚至可以用这些做什么...您绝对不能将它们传递给SetWindowTheme()
。
最佳答案
如果您希望人们能够提供帮助,那么您确实需要向我们展示您目前在做什么(代码)。这个答案将与正确答案一样多。所以。
您可能不需要弄乱主题句柄,只要为应用程序启用了主题就足够了,只要您正确设置控件的窗口样式即可。
您需要确保将WM_SETFONT
消息发送到创建的窗口。许多标准控件默认使用一种难看的向后兼容字体,直到您为它们提供了新字体为止。在大多数情况下,您可以使用GetStockObject(DEFAULT_GUI_FONT)
(如果包括windowsx.h,则使用GetStockFont()
)作为发送它们的字体。如果使用普通字体,则不必跟踪它,以后再释放它。
您还需要为大多数控件设置WS_EX_CLIENTEDGE
或WS_EX_STATICEDGE
样式,以获取较新的显示行为。我认为打开主题时通常是WS_EX_STATICEDGE
,没有打开主题时是WS_EX_CLIENTEDGE
。但是您将需要尝试这些。使用Spy ++浏览各种控件,查看它们使用什么样式,并确保它们匹配。保留这些样式会导致禁用主题绘图的副作用。
请注意,这些是_EX_
样式标志,因此您将需要使用CreateWindowEx
而不是CreateWindow
也许还有其他事情,但是尝试一下,看看能走多远。