3

我使用的是纯 WINAPI,需要发送TB_GETMETRICS消息。但是,仅当您将清单文件添加到应用程序并引用 Common Controls 6.0 版时,该消息才有效。我添加了它,消息正在运行,但现在我的应用程序正在使用 Vista/Windows 7 视觉样式,这是我不想要的。

有没有办法在使用经典主题时保留 Common Controls 6.0 参考,无论是通过修改清单文件还是通过调用一些 API 函数?

注意:我尝试了SetWindowTheme,但结果是 Classic 和 Aero 的混合。

编辑:我没有正确阅读 SetWindowTheme 函数,所以我想为父 hWnd 调用它会自动为其所有子调用它。事实证明,我需要为每个要使用 Windows Classic 的控件调用它。它现在可以正常工作。

4

2 回答 2

4

要禁用所有控件的视觉样式,请在创建主窗口之前调用SetThemeAppProperties(STAP_ALLOW_NONCLIENT)或。SetThemeAppProperties(0)

要禁用每个 HWND 的视觉样式,您可以调用SetWindowTheme(hwndControl,L"",L"")

如果您需要支持没有 v6 通用控件的系统,您可能可以通过使用系统指标值和系统 DPI 来确定工具栏控件中使用了哪些系统指标(或硬编码值)。

于 2012-02-09T17:41:22.093 回答
1

通过正确使用SetWindowTheme(以 L"" 作为参数)解决:我所要做的就是为我的应用程序创建的每个控件调用它。感觉很hackish,但可以完成工作。

于 2012-02-09T16:53:30.847 回答