【问题标题】:Ownerdraw CListCtrl checkboxesOwnerdraw CListCtrl 复选框
【发布时间】:2020-01-20 04:31:32
【问题描述】:

我想在我的 CListCtrl 派生类中添加复选框,该类具有 LVS_OWNERDRAWFIXED 样式,用于在任何子项中绘制它们。我可以在 DrawItem 成员函数中简单地绘制它们,但看起来有点糟糕。如果设置了 LVS_EX_CHECKBOXES 样式,我如何检索用于此控件的复选框的图像?这很重要,因为在每个 Windows 版本中,这些复选框都有自己独特的外观。

有可能吗?

【问题讨论】:

  • 我几乎不相信有这样的图像LVS_OWNERDRAWFIXED 的重点是随心所欲地自己绘制所有内容。基本上这就是 Windows 在其默认行为中所做的。无论如何,你为什么要复制标准的 Windows 外观?制作比在 Windows 中更好的东西,这样您的控件就会看起来非常可区分和吸引人。
  • @Jovibor 问题是我的应用程序中有很多其他地方都有标准外观的复选框,例如 - ctreectrl、属性表,如果我添加到列表不同的复选框,它会看起来很乱
  • 想到的解决方案之一是使用BUTTON 类名和BS_CHECKBOX 样式的CreateWindow,然后在内存中打印它。然后BitBlt它。
  • @Jovibor 你能举个例子吗?
  • thisthis

标签: c++ windows mfc


【解决方案1】:

您调用OpenThemeData() 来获取当前主题的句柄,然后调用GetThemeBitmap() 来获取复选框的图像。

还可以查看其他 GetThemeXXXX() 函数以获得正确的背景 颜色、文字颜色、字体等。

我还建议你玩ThemeExplorer,它应该会给你 一个很好的概述视觉样式是如何工作的。最好的是,这些工具实际使用 OpenThemeData() & co.要呈现控件的预览,请同时查看其source code (main.cpp, Line 142+)

【讨论】:

    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多