我正在使用纯WINAPI,需要发送TB_GETMETRICS消息。但是,仅当您使用Common Controls 6.0版向应用程序添加清单文件时,该消息才有效。我添加了它,消息正在运行,但现在我的应用程序正在使用Vista / Windows 7视觉样式,我不想要。
有没有办法在使用Classic主题时保留Common Controls 6.0引用,方法是修改清单文件或调用某些API函数?
注意:我尝试SetWindowTheme,但结果是Classic和Aero的混合。
编辑:我没有正确读取SetWindowTheme函数,所以我在考虑调用它为父hWnd会自动为它的所有子函数调用它。事实证明我需要为每个想要使用Windows Classic的控件调用它。它现在应该正常工作。答案 0 :(得分:2)
要停用所有控件的视觉样式,请在创建主窗口之前调用SetThemeAppProperties(STAP_ALLOW_NONCLIENT)
或SetThemeAppProperties(0)
。
要为每个HWND禁用视觉样式,您可以调用SetWindowTheme(hwndControl,L"",L"")
如果您需要支持没有v6通用控件的系统,您可以通过使用系统指标值和系统DPI来确定工具栏控件中使用的系统指标(或硬编码值)。
答案 1 :(得分:1)
通过正确使用 SetWindowTheme (以L“”作为参数)解决:我所要做的就是为应用程序创建的每个控件调用它。感觉很乱,但是完成了工作。