Âü°í¹®Çå : Visual C++ 6 ¿Ïº®°¡À̵å
2. Æ®¸®ÄÁÆ®·Ñ(TreeControl)
Æ®¸® ÄÁÆ®·ÑÀº °èÃþ±¸Á¶¸¦ °¡Áö´Â µ¥ÀÌÅ͸¦ Ç¥½ÃÇϴµ¥ ÀûÇÕÇÕ´Ï´Ù. °èÃþ±¸Á¶¸¦ °¡Áö´Â µ¥ÀÌÅÍ Áß¿¡¼ °¡Àå ÀϹÝÀûÀÎ °ÍÀ̶ó¸é MFC Ŭ·¡½ºÀÇ °èÃþ±¸Á¶°¡ µÇ°Ú³×¿ä. ÀÌÁ¦ Äڵ带 ÀÔ·ÂÇØ º¸ÁÒ.
1) ´ÙÀ̾ó·Î±× º£À̽ºÀÇ ÇÁ·ÎÁ§Æ®¸¦ Çϳª ¸¸µì´Ï´Ù. ±×¸®°í´Â ¿ì¼± OnInitDialog() ÇÔ¼ö¿¡ ¼ÕÀ» ´ë¾î º¾´Ï´Ù. Ŭ·¡½º À§Àúµå¿¡¼ WM_INITDIALOG ¸Þ½ÃÁö¸¦ ¿À¹ö¶óÀ̵å ÇÏ¸é µÇÁÒ.
Æ®¸®ÄÁÆ®·Ñ ¾Æ·¡¿¡ ¼±ÅÃµÈ ³»¿ëÀ» Ç¥½ÃÇÏ·Á Çϴµ¥, óÀ½ ½ÇÇàµÇ¸é¼ ƯÁ¤ ³»¿ëÀ» ³ªÅ¸³»±â À§ÇØ, CDialog Ŭ·¡½ºÀÇ OnInitDialog() ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡
m_Label = CString("¼±ÅÃµÈ Ç׸ñ : ");
¸¦ ½ÇÇà½ÃÄÑ ÁÖ¾î¾ß Á¦´ë·Î ³ªÅ¸³³´Ï´Ù. OnInitDialog() ÇÔ¼ö ´ÙÀ½¿¡ ½ÇÇàÇß´õ´Ï Á¦´ë·Î ³ªÅ¸³ªÁú ¾Ê´õ±º¿ä.
´ÙÀ½Àº ÀÔ·ÂµÈ ÄÚµåÀÔ´Ï´Ù.
// ³ëµå·Î Ãß°¡µÉ ÅؽºÆ®µé
char *pLevel1[] = {"CObject"};
char
*pLevel2[] = {"CWnd", "CCmdTarget"};
char *pLevel31[]
= {"CFrameWnd", "CView", "CDialog"};
char *pLevel32[]
= {"CWinApp", "CDocument", "CDocTemplate"};
BOOL CTreeDlg::OnInitDialog()
{
m_Label
= CString("¼±ÅÃµÈ Ç׸ñ : "); // óÀ½ ½ÇÇàµÇ¸é¼ Ç¥½ÃµÇ´Â ³»¿ë
CDialog::OnInitDialog();
......................................
//
TODO: Add extra initialization here
// Æ®¸®ÄÁÆ®·Ñ¿¡
À̹ÌÁö ¸®½ºÆ® Ãß°¡
m_ImageTree.Create(IDB_TREE,
16, 2, RGB(0,128,128));
m_ctrlTree.SetImageList(&m_ImageTree,
TVSIL_NORMAL);
TV_INSERTSTRUCT
tvinsert;
// ¿É¼Ç¼³Á¤
tvinsert.hParent
= NULL;
tvinsert.hInsertAfter
= TVI_LAST;
tvinsert.item.mask
= TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT;
tvinsert.item.state
= 0;
tvinsert.item.stateMask
= 0;
tvinsert.item.cchTextMax
= 60;
tvinsert.item.iSelectedImage
= 1;
tvinsert.item.cChildren
= 0;
// ·¹º§1ÀÇ ³ëµå
Ãß°¡
tvinsert.item.pszText
= pLevel1[0];
tvinsert.item.iImage
= 0;
HTREEITEM hRoot = m_ctrlTree.InsertItem(&tvinsert);
HTREEITEM
hItem;
// ·¹º§2ÀÇ ³ëµå
Ãß°¡
tvinsert.hParent = hRoot;
// ·¹º§1ÀÇ ÀÚ½ÄÀ¸·Î Ãß°¡
tvinsert.item.pszText
= pLevel2[0];
hItem = m_ctrlTree.InsertItem(&tvinsert);
//
·¹º§3ÀÇ ³ëµå Ãß°¡
tvinsert.hParent
= hItem; // ·¹º§2ÀÇ ÀÚ½ÄÀ¸·Î Ãß°¡
for(int
i=0; i<3; i++) {
tvinsert.item.pszText
= pLevel31[i];
m_ctrlTree.InsertItem(&tvinsert);
}
m_ctrlTree.Expand(hItem,
TVE_EXPAND);
// ·¹º§2ÀÇ
³ëµå Ãß°¡
tvinsert.hParent
= hRoot; // ·¹º§1ÀÇ ÀÚ½ÄÀ¸·Î Ãß°¡
tvinsert.item.pszText
= pLevel2[1];
tvinsert.item.iImage
= 0;
hItem = m_ctrlTree.InsertItem(&tvinsert);
//
·¹º§3ÀÇ ³ëµåÃß°¡
tvinsert.hParent
= hItem; // ·¹º§2ÀÇ ÀÚ½ÄÀ¸·Î Ãß°¡
for(i=0;
i<3; i++) {
tvinsert.item.pszText
= pLevel32[i];
m_ctrlTree.InsertItem(&tvinsert);
}
m_ctrlTree.Expand(hItem,
TVE_EXPAND);
m_ctrlTree.Expand(hRoot,
TVE_EXPAND);
return TRUE;
// return TRUE unless you set the focus to a control
}
2) ´ÙÀ̾ó·Î±× ÅÛÇø´Àº ´ÙÀ½°ú °°ÀÌ ¹èÄ¡ÇÕ´Ï´Ù. Æ®¸® ÄÁÆ®·ÑÀ» ³õ°í, ±× ¾Æ·¡¿¡ Static ÄÁÆ®·ÑÀ» ³õ½À´Ï´Ù.
3) Æ®¸® ÄÁÆ®·ÑÀ» Á¦¾îÇϱâ À§ÇØ CTreeCtrlÇüÀÇ ControlÇü ¸â¹öº¯¼ö m_ctrlTree¿Í ¿¬°áÇÕ´Ï´Ù. ¹æ¹ýÀº ClassWizard¸¦ ½ÇÇà½ÃÄѼ Member Variables ÅÇ¿¡¼ ÀÔ·ÂÇÏ¸é µË´Ï´Ù.
±×¸®°í, Æ®¸® ÄÁÆ®·ÑÀÇ ³ëµå¿¡ ¾ÆÀÌÄÜÀ» ³Ö¾îÁÖ±â À§ÇØ CImageListÇüÀÇ º¯¼ö m_ImageTree ¸¦ Ãß°¡ÇÕ´Ï´Ù.
¼¼ ¹ø°·Î, Æ®¸® ÄÁÆ®·Ñ¿¡¼ ¼±ÅÃµÈ ¹®ÀÚ¿À» Ç¥½ÃÇØ ÁÖ±â À§ÇØ Static ÄÁÆ®·Ñ°ú ¿¬°áµÉ m_Label º¯¼ö¸¦ Á¤ÀÇÇÕ´Ï´Ù. ¿ª½Ã Ŭ·¡½º À§Àúµå¸¦ ½ÇÇà½ÃÄѼ Member Variables ÅÇ¿¡¼ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÏ´Â °Ì´Ï´Ù.
Control IDs : IDC_LABEL Type : CString Member : m_Label
4) OnInitDialog() ÇÔ¼öºÎºÐ¸¸ ó¸®ÇØÁÖ¸é Æ®¸®ÄÁÆ®·ÑÀÇ ¸ð¾ç¸¸ ³ªÅ¸³¯ »ÓÀÔ´Ï´Ù. ÀÌ ÄÁÆ®·ÑÀÇ ÀÛµ¿¿¡ ´ëÇØ ¹«¾ð°¡ ¹ÝÀÀÀ» ÇÏ·Á¸é ¾îµò°¡ 󸮸¦ ÇØÁÖ¾î¾ß ÇÏ°ÚÁÒ.
¿©±â¼´Â Æ®¸®ÄÁÆ®·Ñ¿¡¼ ¼±ÅÃÇÑ Ç׸ñÀ» ·¹ÀÌºí¿¡ Ç¥½ÃÇØÁÖ±â·Î ÇÕ´Ï´Ù. ±×·¯±â À§Çؼ´Â Ŭ·¡½º À§Àúµå¿¡¼ TVN_SELCHANGE ¸Þ½ÃÁö¸¦ ó¸®ÇØÁÝ´Ï´Ù. ÀÌ ¸Þ½ÃÁö¿¡ ´ëÇÑ Çڵ鷯´Â ´ÙÀ½°ú °°½À´Ï´Ù.
void CTreeDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW*
pNMTreeView = (NM_TREEVIEW*)pNMHDR;
//
TODO: Add your control notification handler code here
HTREEITEM
hItem = pNMTreeView->itemNew.hItem;
char
text[20];
TV_ITEM item;
memset(text,
0, 20);
item.mask = TVIF_HANDLE
| TVIF_TEXT;
item.hItem =
hItem; // »õ·Î ¼±ÅÃµÈ ³ëµåÀÇ Á¤º¸¸¦ ¾ò°íÀÚ
item.pszText
= text;
item.cchTextMax =
30;
m_ctrlTree.GetItem(&item);
m_Label
= "¼±ÅÃµÈ Ç׸ñ : " + CString(text);
UpdateData(FALSE);
*pResult
= 0;
}
5) ±×¸®°í Æ®¸® ÄÁÆ®·ÑÀÇ ¼Ó¼ºÀ» ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù.
°¢ ¼Ó¼ºµé°ú ±× Àǹ̴ ´ÙÀ½°ú °°½À´Ï´Ù.
Has buttons : ÇÏÀ§ ³ëµå°¡ ÀÖ´Â ³ëµå¿¡ »ç°¢Çü ¸ð¾çÀÇ ¹öÆ°À» ±×·ÁÁÝ´Ï´Ù. ³ëµå°¡ È®ÀåµÇ¾î ÀÖÀ» ¶§ - ¸ð¾ç, Ãà¼ÒµÇ¾î ÀÖÀ» ¶§ + ¸ð¾çÀÌ µÇ´Â »ç°¢ÇüÀÇ Á¶±×¸¸ ¹öÆ° ¸»ÀÌÁÒ.
Has lines : °¢ ³ëµå¸¦ ¿¬°áÇÏ´Â ¶óÀÎÀ» ±×·ÁÁÝ´Ï´Ù.
Lines at root : ·çÆ® ³ëµå¿¡µµ ¶óÀÎÀ» ±×·ÁÁÝ´Ï´Ù.
Edit labels : ·¹À̺íÀ» ÆíÁýÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù.
Disable drag drop : µå·¡±× ¾Ø µå·ÓÀ» ÇÒ ¼ö ¾øµµ·Ï ÇÕ´Ï´Ù.
Border : ¸» ±×´ë·Î Æ®¸® ÄÁÆ®·Ñ ÁÖÀ§ÀÇ Å׵θ® ¶óÀÎÀ» ±×·ÁÁְųª ¾ø¾ÖÁÝ´Ï´Ù.
- the end of this article -