컴퓨터 공부/MFC 프로그래밍

[5월 20일 1교시] 트리 컨트롤 2

려리군 2009. 5. 20. 09:55

트리뷰에 이미지 추가하는 방법

CImageList m_TreeImageList;

CTreeView m_TreeCtrl;

m_TreeImageList.Create(IDB_BITMAP1,16,2,RGB(255,255,255));

m_TreeCtrl.SetImageList(&m_TreeImageList, TVSIL_NORMAL);


BOOL CImageList::Create(UINT nBitmapID, int cx, int nGrow, COLORREF crMask);

참고주소 : http://msdn.microsoft.com/en-us/library/b9h1bwdk(VS.80).aspx

이미지 리스트 객체에 이미지를 첨부하고 이미지 리스트를 초기화한다.

리턴 : 

nBitmapID : 이미지 리스트와 관련된 비트맵의 리소스 아이디

cx : 각 이미지의 너비

nGrow : 시스템이 새로운 이미지에 대한 공간을 만들기 위해 배열을 크기를 조절할 필요가 있을 때 이미지리스트가 자랄 수 있는 이미지의 개수다. 이 파라미터는 크기가 재조정된 리스트를 포함한 새로운 이미지의 개수를 표현한다.

crMask : 마스크를 생성하는 데 사용될 색깔.


CImageList* CTreeCtrl::SetImageList(CImageList * pImageList, int nImageListType);

참고주소 : http://msdn.microsoft.com/en-us/library/14xabs94(VS.80).aspx

트리뷰 컨트롤에 대한 상태 이미지 리스트와 새로운 이미지에 사용될 컨트롤을 다시 그려준다.

리턴 : 이전 이미지 리스트의 포인터.

pImageList : 대입할 이미지 리스트의 포인터. NULL이면 모든 이미지는 트리뷰에서 지워진다.

nImageListType

 - TVSIL_NORMAL : 일반적인 이미지 리스트를 설정한다.

 - TVSIL_STATE : 상태 이미지 리스트를 설정한다.


트리뷰에 데이터 추가(텍스트 정보)

TV_INSERTSTRUCT tvstruct;

tvstruct.item.mask = TVIF_TEXT;

tvstruct.hParent = 0;

tvstruct.hInsertAfter = TVI_LAST;

tvstruct.item.pszText = "Root Tree";


트리뷰에 데이터 추가(이미지 정보)

TV_INSERTSTRUCT tvstruct;

tvstruct.item.mask =  TVIF_IMAGE | TVIF_SELECTEDIMAGE;

tvstruct.item.iImage = 0;

// 일반적으로 보이는 이미지에는 ImageList의 0번째 배열 사용.

tvstruct.item.iSelectedImage = 1;

// 선택했을 때 보이는 이미지에는 ImageList의 1번째 배열 사용.


※ 일반적으로 자료를 담는 클래스는 'C++클래스'를 선택한다.

트리뷰에 사용자가 제작한 데이터 추가(PPARAM)

TV_INSERTSTRUCT tvstruct;

CMyData *rootData = new CMyData();

rootData->age = 30;

rootData->name = "홍길동";

tvstruct.item.lParam = (LPARAM)rootData;

// 힙에 있는 사용자가 만든 데이터를 트리구조체 lParam 포인터에 대입한다.


트리뷰의 데이터 가지고 오기.

LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);

CMyData *pData = (CMyData*)pNMTreeView->itemNew.lParam;