我有一个约30张图像的图像列表,当TreeNode处于特定状态时,我希望能够覆盖30个图像的3个图像.我知道C++ TreeItem可以使用TVIS_OVERLAYMASK这样做:
SetItemState(hItem,INDEXTOOVERLAYMASK(nOverlayIndex), TVIS_OVERLAYMASK);
是否有任何机制可以在.NET中实现类似的结果?
我看到这个问题仍然有待观察,所以我将发布大卫建议的实施.
internal class MyTree : TreeView { internal MyTree() : base() { // let the tree know that we're going to be doing some owner drawing this.DrawMode = TreeViewDrawMode.OwnerDrawText; this.DrawNode += new DrawTreeNodeEventHandler(MyTree_DrawNode); } void MyTree_DrawNode(object sender, DrawTreeNodeEventArgs e) { // Do your own logic to determine what overlay image you want to use Image overlayImage = GetOverlayImage(); // you have to move the X value left a bit, // otherwise it will draw over your node text // I'm also adjusting to move the overlay down a bit e.Graphics.DrawImage(overlayImage, e.Node.Bounds.X - 15, e.Node.Bounds.Y + 4); // We're done! Draw the rest of the node normally e.DefaultDraw = true } }