【问题标题】:Strange behaviour of edit control background color when using WinXp common controls使用 WinXp 常用控件时编辑控件背景颜色的奇怪行为
【发布时间】:2010-12-09 21:58:21
【问题描述】:

我遇到了一个奇怪的问题(好吧,至少我觉得它很奇怪 =))。我正在编写自己的 GUI 库,它是 Windows api 的包装器(是的,我知道 WTL 和 MFC 之类的框架 =))。在当前阶段,我已经以这种方式封装了常用控件:例如,Edit 类由一个简单的窗口和一个标准的编辑窗口组成( MainWindow -> GhostWindow -> EditBox )。这就是我如何在编辑类本身中更改编辑的背景颜色:

myedit->SetBkColor ( RGB ( 0, 0, 0 ) );

它运行良好,直到我调用 InitCommonControlsEx 并将清单文件附加到我的程序。完成此操作后,我的编辑只有在获得焦点时才能更改颜色。老实说,我对为什么会有这样的行为以及我做错了什么没有一个全面的想法,所以我会感谢任何帮助。

谢谢你,#535。

【问题讨论】:

    标签: c++ winapi background-color edit-control


    【解决方案1】:
    1. 当您附加版本 6 清单时,无需调用 InitcommonControlsEx。

    2. 无论如何。加载第 6 版通用控件后,XP 主题甚至可用于标准 Windows 控件。控件的背景颜色使用 xp 主题颜色绘制,因此 WM_CTLCOLOR* 消息的使用较少。

    3. 您目前正在使用 WM_CTLCOLOR* 消息覆盖各种控制元素的冷却器?

    【讨论】:

    • 1.哦,谢谢,我不知道这个。 2.好的,但是有没有办法让控制行为更具体。我的目标是进行控制,当我将鼠标悬停在它上面时可以改变背景,然后在鼠标光标离开时改变回来。我想使用winXp主题的唯一原因是默认的旧式按钮非常难看。 3. 是的。
    • 除了使控件完全自定义绘制之外,我不相信它可以从 xp 主题颜色覆盖控件的背景颜色。我没有调查的一件事实际上是制作一组主题数据,并使用主题 api 将其加载为当前应用程序主题。我相信它不可能创建新的系统主题,因为 uxtheme.dll 只会加载(由 MS)签名的主题文件,我不知道这是否适用于每个应用程序的主题。 (假设这样的事情甚至是可能的)。
    • MSDN 中的“Visual Styles Reference”有前途,也有前途:有很多 API 可以用主题数据做各种事情,但没有明显的方法来生成自己的。它基本上似乎只不过是一个描述 ux-theme 如何在内部设置标准窗口控件的大型文档。
    • 谢谢!据我所知,使用 xp 主题的控件会带来一些限制,不幸的是我对此无能为力。
    • 嗯...实际上我还想弄清楚一件事,有没有办法从版本 6 ctrl 库中仅加载特定控件,但据我所知,这是不可能的=(
    【解决方案2】:

    嗯,一切都比我想象的要容易得多。我太不专心了=(当一个人不使用样式时,一个手杖使用 ::SetBkColor(...) 来更改背景颜色,并从 WM_CTLCOLOR* 返回画笔以更改边框颜色。启用样式后情况会有所不同. 现在 ::SetBkColor(...) 对应于 focus 颜色,返回的画笔改变了背景颜色。羞愧于我 =(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-04
      • 2012-06-26
      • 1970-01-01
      • 2014-04-29
      • 2015-02-19
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      相关资源
      最近更新 更多