【问题标题】:How can obtain the image which uses windows 7 to draw the parent nodes in a treeview control?如何获得使用windows 7在treeview控件中绘制父节点的图像?
【发布时间】:2011-08-20 13:35:09
【问题描述】:

我正在使用混合两个窗口控件(列表视图和树视图)的自定义控件。在某些时候,我需要绘制使用 Windows 7(启用了主题)来识别父节点的图像,我正在使用 DrawThemeBackground 函数与 TVP_GLYPH 部分和 GLPS_CLOSED 状态(我尝试使用与TREEVIEW 类相关的所有部分和状态都没有运气),但结果图像始终是(+)或(-)。

这张图片显示了问题

我想绘制 箭头 图像(黑色圆圈内)而不是 (+) 符号(橙色圆圈内)。

这是我用来绘制图像的示例代码。

uses
  UxTheme;

procedure TForm40.Button1Click(Sender: TObject);
var
  iPartId : integer;
  iStateId: integer;
  hTheme  : THandle;
begin
  hTheme  := OpenThemeData(Handle, VSCLASS_TREEVIEW);

  iPartId := TVP_GLYPH;
  iStateId:= GLPS_CLOSED;          
  //iPartId := TVP_TREEITEM;
  //iStateId:= TREIS_NORMAL;
  if hTheme <> 0 then
    try
      
      //if (IsThemeBackgroundPartiallyTransparent(hTheme, iPartId, iStateId)) then
      //    DrawThemeParentBackground(Handle, PaintBox1.Canvas.Handle, nil);
      
      DrawThemeBackground(hTheme, PaintBox1.Canvas.Handle, iPartId, iStateId, Rect(0, 0, 31, 31), nil);
    finally
      CloseThemeData(hTheme);
    end;
end;

我检查了几个工具,例如Andreas Rejbrandthis 制作的application,但我找不到我想要的图像。

我的问题是:如何获得箭头图像?

更新

感谢为Stigma 发布的答案,我找到了Explorer::Treeview 类的部分和状态值的其他资源。

【问题讨论】:

  • VSCLASS_TREEVIEW 定义为什么?一些快速的谷歌搜索似乎表明您需要使用“explorer::treeview”而不仅仅是“treeview”。
  • VSCLASS_TREEVIEW 在 UxTheme 单元中定义,只是 TREEVIEW 值的常量。

标签: delphi winapi custom-controls


【解决方案1】:

首先,对于普通的ListViewTreeView,只需在其句柄上调用SetWindowTheme 即可应用适当的样式。其 MSDN 页面中的示例如下:

SetWindowTheme(hwndList, L"Explorer", NULL);

由于我们讨论的是自定义控件,但我不确定是否适用于此。但是由于SetWindowTheme 导致WM_THEMECHANGED 消息被发送到正确的窗口,这意味着您只需要为特定的子主题使用正确的OpenThemeData 调用。

我认为卢克的评论是正确的。您可能只需要传递 'Explorer::Treeview' 而不是简单的样式。所以,除非多年没有接触过 Delphi/Pascal:

hTheme  := OpenThemeData(Handle, 'Explorer::Treeview');

【讨论】:

    【解决方案2】:

    您必须在绘画前设置SetWindowTheme(Handle, 'explorer', nil);,以确保OpenThemeData 将使用新的资源管理器风格主题。当然,两个函数的窗口句柄必须相同。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    相关资源
    最近更新 更多