我正在使用Visual Studio 2005(以及C ++中的win32 API),我有一个使用内置对话框编辑器设计的窗口。
在运行时,我希望能够使用CreateWindow()
向其添加新控件。这是有效的,但是我创建的控件看起来都很难看。出于具体的目的,我添加的控件是一个TabControl,当我使用内置的对话框编辑器添加它时,选项卡标签中的文本看起来不错。当我在运行时使用CreateWindow()
创建它时,文本大而粗,看起来不合适。
我在MSDN上找到Using Windows XP Visual Styles,它似乎描述了正确区域中的内容,但是当我按照其中的说明(嵌入清单)时,动态创建的控件似乎比一个更新的样式对话框编辑器使用(选项卡控件的背景颜色更浅)。
我还找到了SetWindowTheme()
函数。我不太确定如何使用这个函数...我希望我可以在窗口上使用GetWindowTheme()
,然后将结果传递给SetWindowTheme()
以使它们看起来相同,但是GetWindowTheme()
会返回一个HTHEME,我不知道你甚至可以用这些来做什么......你绝对不能将它们传递给SetWindowTheme()
。
答案 0 :(得分:5)
如果您希望人们能够提供帮助,您真的需要告诉我们您目前正在做什么(代码)。这个答案将成为一个正确答案的猜测。如此。
您可能不需要使用主题句柄,只要为您的应用启用了主题,只要您正确设置控件的窗口样式即可。
您需要确保向您创建的窗口发送WM_SETFONT
消息。许多标准控件默认为一个非常难看的向后兼容字体,直到你给它们一个新的。在大多数情况下,您可以使用GetStockObject(DEFAULT_GUI_FONT)
(或GetStockFont()
,如果包含windowsx.h)作为发送它们的字体。如果你使用股票字体,那么你不必跟踪它是否存在并在以后释放它。
您还需要为大多数控件设置WS_EX_CLIENTEDGE
或WS_EX_STATICEDGE
样式以获得更新的显示行为。我认为当主题打开时通常是WS_EX_STATICEDGE
,而当它们不是时WS_EX_CLIENTEDGE
。但是你需要玩这些。使用Spy ++查看各种控件并查看它们使用的样式并确保匹配它们。关闭这些样式会产生禁用主题绘图的副作用。
请注意,这些是_EX_
样式标记,因此您需要使用CreateWindowEx
而不是CreateWindow
也可能有其他事情,但试试这个,看看你需要多远。