home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / general / cmnctrl1 / treecpg.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-27  |  6.0 KB  |  191 lines

  1. // TreeCtrlPage.cpp : implementation file
  2. //
  3.  
  4. // This is a part of the Microsoft Foundation Classes C++ library.
  5. // Copyright (C) 1992-1998 Microsoft Corporation
  6. // All rights reserved.
  7. //
  8. // This source code is only intended as a supplement to the
  9. // Microsoft Foundation Classes Reference and related
  10. // electronic documentation provided with the library.
  11. // See these sources for detailed information regarding the
  12. // Microsoft Foundation Classes product.
  13.  
  14. #include "stdafx.h"
  15. #include "CmnCtrl1.h"
  16. #include "treecpg.h"
  17. #include "mtreectl.h"
  18.  
  19. #ifdef _DEBUG
  20. #define new DEBUG_NEW
  21. #undef THIS_FILE
  22. static char THIS_FILE[] = __FILE__;
  23. #endif
  24.  
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CTreeCtrlPage property page
  27.  
  28. IMPLEMENT_DYNCREATE(CTreeCtrlPage, CPropertyPage)
  29.  
  30. CTreeCtrlPage::CTreeCtrlPage() : CPropertyPage(CTreeCtrlPage::IDD)
  31. {
  32.     //{{AFX_DATA_INIT(CTreeCtrlPage)
  33.     m_bDisableDragDrop = FALSE;
  34.     m_bHasButtons = FALSE;
  35.     m_bHasLines = FALSE;
  36.     m_bLinesAtRoot = FALSE;
  37.     m_bEditLabels = FALSE;
  38.     m_bShowSelAlways = FALSE;
  39.     m_cstrStatus = _T("");
  40.     m_bSingleExpand = FALSE;
  41.     //}}AFX_DATA_INIT
  42.     m_psp.dwFlags &= ~PSP_HASHELP;  // Lose the Help button
  43. }
  44.  
  45. CTreeCtrlPage::~CTreeCtrlPage()
  46. {
  47. }
  48.  
  49. void CTreeCtrlPage::DoDataExchange(CDataExchange* pDX)
  50. {
  51.     CPropertyPage::DoDataExchange(pDX);
  52.     //{{AFX_DATA_MAP(CTreeCtrlPage)
  53.     DDX_Control(pDX, IDC_TREESTATUS, m_notifshowcase);
  54.     DDX_Control(pDX, IDC_TREEVIEW1, m_mytreectrl);
  55.     DDX_Check(pDX, IDC_TVDISABLEDDRAGDROP, m_bDisableDragDrop);
  56.     DDX_Check(pDX, IDC_TVHASBUTTONS, m_bHasButtons);
  57.     DDX_Check(pDX, IDC_TVHASLINES, m_bHasLines);
  58.     DDX_Check(pDX, IDC_TVLINESATROOT, m_bLinesAtRoot);
  59.     DDX_Check(pDX, IDC_TVEDITLABELS, m_bEditLabels);
  60.     DDX_Check(pDX, IDC_TVSHOWSELALWAYS, m_bShowSelAlways);
  61.     DDX_Text(pDX, IDC_TREESTATUS, m_cstrStatus);
  62.     DDX_Check(pDX, IDC_TVSSINGELEXPAND, m_bSingleExpand);
  63.     //}}AFX_DATA_MAP
  64. }
  65.  
  66.  
  67. BEGIN_MESSAGE_MAP(CTreeCtrlPage, CPropertyPage)
  68.     //{{AFX_MSG_MAP(CTreeCtrlPage)
  69.     ON_BN_CLICKED(IDC_TVEDITLABELS, OnEditLabels)
  70.     ON_BN_CLICKED(IDC_TVHASBUTTONS, OnHasButtons)
  71.     ON_BN_CLICKED(IDC_TVHASLINES, OnHasLines)
  72.     ON_BN_CLICKED(IDC_TVLINESATROOT, OnLinesAtRoot)
  73.     ON_BN_CLICKED(IDC_TVDISABLEDDRAGDROP, OnDisabledDragDrop)
  74.     ON_BN_CLICKED(IDC_TVSHOWSELALWAYS, OnShowSelAlways)
  75.     ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_TREEVIEW1, ShowNotification)
  76.     ON_NOTIFY(TVN_SELCHANGING, IDC_TREEVIEW1, ShowNotification)
  77.     ON_NOTIFY(TVN_SELCHANGED, IDC_TREEVIEW1, ShowNotification)
  78.     ON_NOTIFY(TVN_GETDISPINFO, IDC_TREEVIEW1, ShowNotification)
  79.     ON_NOTIFY(TVN_SETDISPINFO, IDC_TREEVIEW1, ShowNotification)
  80.     ON_NOTIFY(TVN_ITEMEXPANDING, IDC_TREEVIEW1, ShowNotification)
  81.     ON_NOTIFY(TVN_ITEMEXPANDED, IDC_TREEVIEW1, ShowNotification)
  82.     ON_NOTIFY(TVN_BEGINDRAG, IDC_TREEVIEW1, ShowNotification)
  83.     ON_NOTIFY(TVN_KEYDOWN, IDC_TREEVIEW1, ShowNotification)
  84.     ON_NOTIFY(TVN_SELCHANGED, IDC_TREEVIEW1, ShowNotification)
  85.     ON_NOTIFY(TVN_SELCHANGING, IDC_TREEVIEW1, ShowNotification)
  86.     ON_NOTIFY(TVN_ITEMEXPANDING, IDC_TREEVIEW1, ShowNotification)
  87.     ON_NOTIFY(TVN_ITEMEXPANDED, IDC_TREEVIEW1, ShowNotification)
  88.     ON_NOTIFY(TVN_DELETEITEM, IDC_TREEVIEW1, ShowNotification)
  89.     ON_BN_CLICKED(IDC_TVSSINGELEXPAND, OnSingleExpand)
  90.     //}}AFX_MSG_MAP
  91. END_MESSAGE_MAP()
  92.  
  93. /////////////////////////////////////////////////////////////////////////////
  94. // CTreeCtrlPage message handlers
  95. BOOL CTreeCtrlPage::OnInitDialog()
  96. {
  97.     CImageList          *pImageList;
  98.     CBitmap             bitmap;
  99.     CString             strItems[12];
  100.     CCmnCtrl1App        *pApp;
  101.     int                 iItem;
  102.     UINT                nID;
  103.     TV_INSERTSTRUCT     curTreeItem;
  104.  
  105.     strItems[0]= _T("Dogs");
  106.     strItems[1]= _T("German Shepherd");
  107.     strItems[2]= _T("Dalmatian");
  108.     strItems[3]= _T("Great Dane");
  109.     strItems[4]= _T("Birds");
  110.     strItems[5]= _T("Hummingbird");
  111.     strItems[6]= _T("Pigeon");
  112.     strItems[7]= _T("Eagle");
  113.     strItems[8]= _T("Fish");
  114.     strItems[9]= _T("Snapper");
  115.     strItems[10]= _T("Sole");
  116.     strItems[11]= _T("Salmon");
  117.  
  118.     pApp = (CCmnCtrl1App *)AfxGetApp();
  119.     CPropertyPage::OnInitDialog();  // let the base class do the default work
  120.     pImageList = new CImageList();
  121.     pImageList->Create(32, 16, ILC_MASK, 6, 4);
  122.  
  123.     for (nID = IDB_BMTREEFIRST; nID <= IDB_BMTREELAST; nID++)  // load bitmaps for dog, bird and fish
  124.     {
  125.         bitmap.LoadBitmap(nID);
  126.         pImageList->Add(&bitmap, (COLORREF)0xFFFFFF);
  127.         bitmap.DeleteObject();
  128.     }
  129.  
  130.     m_mytreectrl.SetImageList(pImageList, TVSIL_NORMAL);
  131.     for (iItem = 0; iItem < CELEMS(strItems); iItem ++)
  132.     {
  133.         curTreeItem.hParent = (iItem % 4 == 0)? NULL : m_rghItem[iItem / 4 * 4];
  134.         curTreeItem.hInsertAfter = TVI_SORT;
  135.         curTreeItem.item.iImage = iItem / 4 * 2;
  136.         curTreeItem.item.iSelectedImage = curTreeItem.item.iImage + 1;
  137.         curTreeItem.item.pszText = strItems[iItem].GetBuffer(strItems[iItem].GetLength());
  138.         curTreeItem.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT;
  139.         m_rghItem[iItem] = m_mytreectrl.InsertItem(&curTreeItem);
  140.     }
  141.  
  142.     return FALSE;
  143. }
  144.  
  145. void CTreeCtrlPage::OnEditLabels()
  146. {
  147.     UpdateData(TRUE/*bSaveAndValidate*/);  // get information from the dialog
  148.     m_mytreectrl.SetNewStyle(TVS_EDITLABELS, m_bEditLabels);
  149. }
  150.  
  151. void CTreeCtrlPage::OnHasButtons()
  152. {
  153.     UpdateData(TRUE);
  154.     m_mytreectrl.SetNewStyle(TVS_HASBUTTONS, m_bHasButtons);
  155. }
  156.  
  157. void CTreeCtrlPage::OnHasLines()
  158. {
  159.     UpdateData(TRUE);
  160.     m_mytreectrl.SetNewStyle(TVS_HASLINES, m_bHasLines);
  161. }
  162.  
  163. void CTreeCtrlPage::OnLinesAtRoot()
  164. {
  165.     UpdateData(TRUE);
  166.     m_mytreectrl.SetNewStyle(TVS_LINESATROOT, m_bLinesAtRoot);
  167. }
  168.  
  169. void CTreeCtrlPage::OnDisabledDragDrop()
  170. {
  171.     UpdateData(TRUE);
  172.     m_mytreectrl.SetNewStyle(TVS_DISABLEDRAGDROP, m_bDisableDragDrop);
  173. }
  174.  
  175. void CTreeCtrlPage::OnShowSelAlways()
  176. {
  177.     UpdateData(TRUE);
  178.     m_mytreectrl.SetNewStyle(TVS_SHOWSELALWAYS, m_bShowSelAlways);
  179. }
  180.  
  181. void CTreeCtrlPage::ShowNotification(LPNMHDR pnmhdr, LRESULT *pResult)
  182. {
  183.     ((CNotifyShowCase *)GetDlgItem(IDC_TREESTATUS))->ShowNotification(pnmhdr->code);
  184. }
  185.  
  186. void CTreeCtrlPage::OnSingleExpand()
  187. {
  188.     UpdateData(TRUE);
  189.     m_mytreectrl.SetNewStyle(TVS_SINGLEEXPAND, m_bSingleExpand);
  190. }
  191.