【发布时间】: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 Rejbrand 和this 制作的application,但我找不到我想要的图像。
我的问题是:如何获得箭头图像?
更新
感谢为Stigma 发布的答案,我找到了Explorer::Treeview 类的部分和状态值的其他资源。
【问题讨论】:
-
VSCLASS_TREEVIEW 定义为什么?一些快速的谷歌搜索似乎表明您需要使用“explorer::treeview”而不仅仅是“treeview”。
-
VSCLASS_TREEVIEW在 UxTheme 单元中定义,只是TREEVIEW值的常量。
标签: delphi winapi custom-controls