The tree view in conjunction with the image list allows upto four overlay
images. Overlay images are images that are drawn transparently over another
image. The overlay images are supported only for the item images and not
for the state images. Unlike what the documentation says, you can choose
any image in the image list to serve as an overlay image it need not
be among the first 15.
Step 1: Set up the overlay images
The image list has to be set up with the overlay images by calling the
function SetOverlayImage(). Upto four images can be added to the list of
overlay images. Call this function for the image list object associated
with the tree view control for the item images. We can call this function
before we associate the image list with the tree view control or after
it does not matter. Normally this code would be clubbed with the code
where you create the image list and associate it with the tree view control.
The SetOverlayImage() takes two arguments. The first argument is the
index of the image within the image list that you want to use as an overlay
mask. If you want the third image in the list to be an overlay mask then
this value would be 2 and if you want the tenth image, this value would
The second argument is the one-based index of the overlay mask. This
argument can have a value of 1 to 4 inclusive. This serves as the identifier
for the overlay mask. If you are using only one image as an overlay mask,
you can choose any of the four index it need not be one necessarily.
Also, if you call SetOverlayImage() for two different images with the same
overlay mask index then the latter call will supercede the previous call.
m_tree.m_image.SetOverlayImage(15, 1 ); m_tree.m_image.SetOverlayImage(16, 2 ); m_tree.m_image.SetOverlayImage(18, 3 ); m_tree.m_image.SetOverlayImage(20, 4 );
Step 2: Set the item state to use the overlay mask
You can specify the overlay mask when inserting a new item or you can specify
it later by calling SetItemState(). We actually use to the macro INDEXTOOVERLAYMASK()
to specify the overlay mask index.
// Use third overlay mask
SetItemState( hItem, INDEXTOOVERLAYMASK(3), TVIS_OVERLAYMASK );
// Remove overlay mask by using index zero.
SetItemState( hti, INDEXTOOVERLAYMASK(0), TVIS_OVERLAYMASK );