我继承了一个大型 MFC 应用程序,其中包含一个覆盖 OnPaint
的 CComboBox
子类。目前,它所有的绘图都是手工完成的(使用线条和矩形),并呈现一个看起来完全是 Windows 98 风格的组合框。但是,它在其他方面工作得很好,并提供了很多我们所依赖的有用的自定义功能,重写整个控件可能不是一种选择。
我想对其进行现代化改造,以便 OnPaint
在可用的情况下以 Aero 风格绘制(当现代主题不可用时回退到旧代码)。我已经用我们拥有的其他一些自定义控件(如按钮)完成了此操作,它非常适合我们的目的。我知道有一些微小的行为不会正确处理,例如鼠标悬停时的柔和高亮显示,但这对这个应用程序来说不是什么大问题。
我可以访问 CVisualStylesXP
ckass,所以我已经有了调用 OpenThemeData
、GetThemeColor
或 DrawThemeBackground
非常容易(通过 LoadLibrary
所以我们不强制 Vista 作为最小系统)。不幸的是,我不知道正确的调用顺序才能获得具有适合主题的边框和下拉按钮的漂亮组合框。
有人知道在这里做什么吗?
最佳答案
老实说,我不知道他们最初为什么要重写 OnPaint。有充分的理由吗?我认为至少有 99% 的时间您只是想覆盖 ComboBox 中项目的绘制。为此,您可以覆盖派生组合框中的 DrawItem、MeasureItem 和 CompareItem 以获得所需的功能。在这种情况下,操作系统将正确绘制特定于每个操作系统的非用户内容。
关于combobox - MFC:如何为所有者绘制呈现 Aero 风格的组合框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713938/