15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Q: How to use CTreeCtrl's TVSIL_STATE flag in SetImageList

wang shao yu -- wsy@pub.zjpta.net.cn
Tuesday, December 24, 1996

Environment: VC++ 4.2-flat, Win 95

Hi friends,

I am using a CTreeView object in my application. I want the tree ctrl
items can use different images when it is expanded or collapsed. I 
noticed there is a TVSIL_STATE flag in SetImageList. I guess it can 
determine which image to be used when an item is expanded or ollapsed.
But I dont know how to use it. I looked at some samples but could not
find useful information. Could you give me any guides?

I have tried SetImageState() without success.

Thanks in advance and MERRY CHRISTMAS!
-- 
Truly yours, Yong Xu, wsy@pub.zjpta.net.cn, Hangzhou, P.R.C



wang shao yu -- wsy@pub.zjpta.net.cn
Thursday, January 02, 1997

Environment: VC++ 4.2-flat, Win 95

Hi there,

I am using a CTreeView object in my application. I want the tree ctrl
items can use different images when it is expanded or collapsed. I tried 
to use TVSIL_STATE flag in SetImageList. However, what I get is an
additional
icon besides the original selected/unselected icon when the item is
expanded. I 
dont need selected/unselected icons, I just need expanded/collapsed
icons with 
my parent items. Here are part of my codes:
//In tree view's OnInitialUpdate(), I set the image list
void CMyTreeView::OnInitialUpdate()
{
	CTreeView::OnInitialUpdate();

	CTreeCtrl& treeCtrl = GetTreeCtrl();
	//Set the tree ctrl style
	ModifyStyle(0, 	TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS
			|TVS_SHOWSELALWAYS|TVS_DISABLEDRAGDROP);

	//cx=16, cy=15, 4 grow, white is mask
	//m_il is a CImageList member variable in the CMyTreeView
	m_il.Create(IDB_TREEIMAGES, 16, 4, RGB(255, 255, 255));
	treeCtrl.SetImageList(&m_il, TVSIL_NORMAL);
	treeCtrl.SetImageList(&m_il, TVSIL_STATE);

...
}

//In tree view's TVN_ITEMEXPANDED handler OnItemexpanded
void CCcuisineView::OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	CTreeCtrl& treeCtrl = GetTreeCtrl();

	if (pNMTreeView->action == TVE_EXPAND)
		//set icon to the second one in the imagelist
		treeCtrl.SetItemState(pNMTreeView->itemNew.hItem, 
			INDEXTOSTATEIMAGEMASK(1), TVIS_STATEIMAGEMASK);
	else
		//set icon to the first one in the imagelist
		treeCtrl.SetItemState(pNMTreeView->itemNew.hItem, 
			INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK);
	
	*pResult = 0;
}// OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult)

I looked at some samples but could not find useful information. Could
you give me 
any guides?

Thanks in advance!

-- 
Truly, Yong Xu, wsy@pub.zjpta.net.cn, Hangzhou, P.R.C





Dong Chen -- d_chen@ix.netcom.com
Thursday, January 02, 1997

Take a look at the sample Rowlist which presents how to set the state flag
for the imagelist for the list control. You should be able to get some ideas
for what you want to accomplish.
--
Dong
d_chen@ix.netcom.com





| Вернуться в корень Архива |