gpt4 book ai didi

winapi - Win32 API 中的 Treeview 控件 - 如何使用不同的字体显示单个 treeview 项目?

转载 作者:行者123 更新时间:2023-12-05 06:45:36 25 4
gpt4 key购买 nike

我遇到了一个问题,我需要使用 Symbol 字体在 TreeView 项目(属于 Symbol 字符集的那些)中显示一些字符,而其他则使用默认系统字体(<我的 Windows 7 上的 em>Segoi UI。
Custom draw 允许我们使用不同的字体绘制不同的项目,但我想使用不同的字体绘制相同的项目字符串,因为它适用于字符串中的每个字符,如上所述。所以,我所做的不那么令人愉快的结果 w.r.t.到目前为止,当项目数量更多时,在水平滚动上绘制性能是这样的:

  1. 我使用 TVS_NOHSCROLL 样式在我的 TreeView 控件中禁用了水平滚动(因为我在 TreeView 窗口中使用我自己的滚动条控件来处理所有水平滚动)
  2. 我对 treeview 控件进行了子类化,在子类化的 winproc 中,我处理水平滚动通知和鼠标通知(我在这里进行自己的点击测试,并在鼠标点击/双击时发送 TVM_EXPAND 和 TVM_SELECT 等消息点击)。此外,滚动条范围是根据我自定义绘制的字符串的宽度(所有项目中的最大长度)设置的。
  3. 我在收到 CDDS_ITEMPOSTPAINT 后为每个项目绘制字符串,为项目中的每个字符使用我自己的字体。

上述方法(为简洁起见,我省略了一些细节)有效但存在一些问题,这让我在这里发布这个问题并寻找替代方法:

问题:

  1. 我创建的水平滚动条控件位于 TreeView 窗口底部的 TreeView 控件“内部”。但是,当项目的数量超出 TreeView 客户区垂直容纳的数量时,最后一个可见的 TreeView 项目将被滚动条控件遮挡。这可以通过不使滚动条成为 TreeView 的子项并将其托管在其正下方的 TreeView 窗口之外来解决。但我不想这样做,因为滚动条通常应该是 TreeView 的子窗口。

  2. 这是主要的。由于我在每次水平滚动时自己绘制项目,因此水平滚动时的绘制性能非常慢,并且还会导致滚动时出现闪烁。

任何想法都将不胜感激,因为过去一周我一直在努力解决这个问题,但没有成功。

如果您想查看我采用的方法,我也可以在此处发布相关代码,但我相信应该有更好的方法来解决这个问题,并且肯定有其他人会遇到这个问题并解决它在过去。

提前致谢。

最佳答案

Custom-draw 允许您随心所欲地绘制项目。您不限于每个项目的单一字体。当您收到 NM_CUSTOMDRAW 通知时,在提供的 HDC 上为指定项目绘制您想要的任何内容。您可以用一种字体绘制文本片段,用不同字体绘制文本片段,等等。一定要返回 CDRF_SKIPDEFAULT,这样 TreeView 本身就不会尝试在项目上绘制任何东西。

关于winapi - Win32 API 中的 Treeview 控件 - 如何使用不同的字体显示单个 treeview 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22945527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com