2009-03-19 8 views
3

TreeNode가 특정 상태 일 때 약 30 개의 이미지와 3 개의 이미지를 30 개 위에 오버레이 할 수있는 이미지 목록이 있습니다. 나는 C++ TreeItem이 같은 TVIS_OVERLAYMASK이 할 수 있다는 사실을 알고 :TreeNode 이미지 오버레이

SetItemState(hItem,INDEXTOOVERLAYMASK(nOverlayIndex), TVIS_OVERLAYMASK); 

.NET에서 유사한 결과를 달성하기 위해 어떤 메커니즘이 있는가?

답변

0

오버레이를 자동으로 수행하는 방법을 모르지만 소유자가 그린 트리 노드로이 작업을 수행 할 수 있습니다.

7

나는이 질문을 통해 여전히 의견을 얻고 있기 때문에 David의 제안을 게시 할 예정입니다.

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 
    } 
} 
+0

: http://madprops.org/blog/highlighting-treenodes-with-an-overlay-image/를 2.0 애플 리케이션 오버레이는 treeview 아이콘 위에 있습니다. 최신 버전의 프레임 워크를 사용하고 있습니까? –

+0

내 잘못 : 나는 DrawMode를 OwnerDrawAll이 아니었다. OwnerDrawText가 지금은 잘 작동하는 것 같아. - 감사합니다. –

+0

좀 더 테스트 한 결과, 이상한 검정색이 여기에 설명 된 것처럼 보입니다. http://stackoverflow.com/q/ 1003459/417721 - 우리는 .net 3.5입니다. –

1

왜 당신은 단지도 수요에 오버레이 이미지를 생성하지 않기 때문에이 같은 귀중한 CPU 사이클을 낭비 할 필요가 없습니다 : 내 .NET에서

private void InitializeLinkedTreeImages() 
{ 
    foreach (string key in treeImages.Images.Keys) 
    { 
     Bitmap bmp = new Bitmap(treeImages.Images[key]); 
     Graphics g = Graphics.FromImage(bmp); 
     g.DrawImageUnscaled(Properties.Resources.Linked16, 0, 0); 
     treeImages.Images.Add(key + "Linked", bmp); 
    } 
}