如何获得正确的背景和属性页面中的颜色控制?

我想在dynamic生成属性中dynamic生成属性正确处理背景颜色在使用MFC的win32 apidynamic生成属性页(虽然我希望我的问题是一般的,而不限于MFC,但由于我的代码和示例使用它,它与我的问题密切相关)。

所以我们有一个

Cpropertysheet

包含多个

Windows C ++hex查看器GUI组件

GUI中有数百万行

对于复杂的窗口形状,GDI SetwindowRgn非常慢

如何在Windows中制作苹果风格的程序

我在哪里可以findWindows GUI标准?

CPropertyPage

我dynamic地生成任何给定页面内容 – 使用自定义对话框定义语言的文件资源 – 所有不相关的内容除了说 – 控制列表和它们的坐标是在给定的页面内创build的,页面resize以适应它们。 这个逻辑工作得很好。

但是,不起作用的是每个页面的控件和背景使用对话框的认颜色/画笔绘制。

我已经尝试了很多方法来试图强制它使用白色/刷子,一个硬编码的属性表/页将绘制。

有两件重要的事情:

页面背景

控制(在页面上)背景

对于#1,我试过了:

从父窗口类(它是对话框bkGrd获取背景画笔(如果我这样做并要求选项卡控件,也是如此)

更改属性页面以使用WS_EX_TRANSPARENT( PreCreateWindow在生成页面时不被框架调用propertysheet::AddPage )

对于#2,我试过了:

覆盖OnWndMsg / WM_CTLCOLORSTATIC将该请求转发给(A)父(页)和(B)到选项卡控件(这是首先要的白色)。

然而,任何时候我使用上面的任何一个“请求背景/转发请求”链上的表单或选项卡控制 – 我得到对话框的背景颜色,从来没有我期望的白色。

使用Spy64,我可以看到,对于一个完全硬编码的属性表/页面 – 我可以看到的唯一可辨别的差异是在AddPage (或其道德等价物)中创build的对话窗口具有WS_CHILD而不是我的WS_POPUP (其余样式看起来是相同的,比如WS_VISIBLE|DS_3DLOOK|DS_FIXEDSYS|DS_SETFONT|DS_CONTROL和WS_EX_CONTROLPARENT 。

所以,除了WS_CHILD ,我看不出与我创build的内容以及从标准资源(即硬编码)正常工作的另一个属性表单的显着区别。

我也不知道这是如何正常工作 – 因为转发像ctrlcolor消息没有正确响应 – 并要求窗口的背景颜色类似没有 – 那么它是如何在标准的情况下背景颜色控件和页面出现为白色,而不是对话框背景?

任何想法或帮助将不胜感激 – 我有点想法…

Windows Aero渲染错误

Python – 从窗口中获取文本

我怎样才能使这个JButton可见? 当我有逐行扫描背景JWindow()?

用C ++创build基于HTML的Windows UI的工具

自动生成guis?

当在Windows XP中添加视觉样式时,他们真的想炫耀这个新功能,所以他们使标签背景变成一个渐变(真的是一个拉伸的图像),而不是一个单一的颜色,这导致了旧的应用程序,刷为背景。

因此,只有具有comctl32 v6清单的应用程序才能获得新的外观,但出现了问题。 旧的propertysheet外壳扩展会加载到新的应用程序(包括资源管理器),事情看起来是错误的。

解决这个问题,他们还需要你(或你的UI框架)调用EnableThemeDialogTexture(..,ETDT_ENABLETAB)来获得正确的标签页外观。

就好像事情不够棘手,还有一个无证的要求 ,你还需要在页面上有一个按钮或一个静态控件!

如果您有自定义控件,则在绘制时必须调用DrawThemeParentBackground如果它们是部分透明的)。

原来我的旧代码已经定义了一个ON_WM_ERASEBKGND处理程序 – 并删除(以及我所有的上述尝试)使它的工作。

所以简单地做任何事都是正确的答案。 D'哦!

在这里留下我的耻辱,以防其他人绊倒在这! [哎呦!]

(如果有人更深入地了解这种机制如何在隐藏的情况下仍然感兴趣)

相关文章

本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不...
本文小编为大家详细介绍“怎么将工程托管到gitee”,内容详细...
这篇文章主要介绍了gitee中图片大小如何调整的相关知识,内容...