최상단 광고

2012년 4월 11일 수요일

트리 컨트롤이 lparam을 사용해서 데이터 응용


몇년을 프로그램을 해왔지만.. CTreeCtrl의 정확한 쓰임을 알지 못했다.

우선 lparam을 사용해서 사용자 정의 데이터를 포함할 수 있다는걸
모르고 있었다.

아래와 같이 정의를 사용할 수 있기 때문에 트리 컨트롤에 대한
확장성이 이제 눈에 보이는듯 하다.

----------------------------------------------------------------------

[사용자 정의 구조체를 설정]
typedef struct LIST_ITEM
{
 int data;
}LIST_ITEM;

[등록]
  LIST_ITEM* pIData = new LIST_ITEM;
  pIData->data = 100;
  TVINSERTSTRUCT tvis;
  tvis.hParent = TVI_ROOT;
  tvis.hInsertAfter = TVI_LAST;
  tvis.item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
  tvis.item.pszText = (LPTSTR) "Resource";
  tvis.item.iImage = 1;
  tvis.item.iSelectedImage = 1;
  tvis.item.state = 0;
  tvis.item.stateMask = 0;
  tvis.item.lParam = (LPARAM)pIData;
  InsertItem(&tvis);

[데이터 접근]
HTREEITEM CNGResPanel::SetSelectedItemEx()
{
 m_SelPoint = GetCurrentMessage()->pt;
 CPoint pt(m_SelPoint);
 ScreenToClient(&pt);
 hSelectedItem = HitTest(pt);
// TRACE("Click > ");
// TRACE(GetItemText(hSelectedItem));
// TRACE("\n");
 return hSelectedItem;
}
HTREEITEM CNGResPanel::GetSelectedItem()
{
 return hSelectedItem;
}
CString CNGResPanel::GetSelectedItemText()
{
 return GetItemText(GetSelectedItem());
}
void CNGResPanel::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
 SetSelectedItem();
 //Test
 LIST_ITEM *pListItem = (LIST_ITEM *)GetItemData(GetSelectedItem());
 TRACE2("CLICK : [%s] : %d\n", GetSelectedItemText(), pListItem->data);
 *pResult = 0;
}

댓글 없음: