home *** CD-ROM | disk | FTP | other *** search
- // CheckTreeCtrl.cpp : implementation file
- //
-
- #include "stdafx.h"
- #include "MirrorIt.h"
- #include "CheckTreeCtrl.h"
-
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
- /////////////////////////////////////////////////////////////////////////////
- // CCheckTreeCtrl
-
- CCheckTreeCtrl::CCheckTreeCtrl()
- {
- }
-
- CCheckTreeCtrl::~CCheckTreeCtrl()
- {
- }
-
-
- BEGIN_MESSAGE_MAP(CCheckTreeCtrl, CTreeCtrl)
- //{{AFX_MSG_MAP(CCheckTreeCtrl)
- ON_WM_LBUTTONDOWN()
- ON_WM_LBUTTONDBLCLK()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- /////////////////////////////////////////////////////////////////////////////
- // CCheckTreeCtrl message handlers
-
- void CCheckTreeCtrl::OnLButtonDown(UINT nFlags, CPoint point)
- {
- UINT flags = 0;
-
- HTREEITEM nHitItem = HitTest(point, &flags);
-
- if (flags & TVHT_ONITEMICON)
- CheckItem(nHitItem);
-
- CTreeCtrl::OnLButtonDown(nFlags, point);
- }
-
- void CCheckTreeCtrl::CheckItem(HTREEITEM i)
- {
- int n, s;
-
- GetItemImage(i, n, s);
- if (n >= 1)
- n = 0;
- else
- n = 1;
- SetItemImage(i, n, n);
- CheckParent(i, n);
- }
-
- void CCheckTreeCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
- {
- UINT flags = 0;
-
- HTREEITEM nHitItem = HitTest(point, &flags);
-
- if (flags & TVHT_ONITEMICON)
- CheckItem(nHitItem);
-
- CTreeCtrl::OnLButtonDblClk(nFlags, point);
- }
-
- void CCheckTreeCtrl::CheckParent(HTREEITEM i, int d)
- {
- HTREEITEM j;
- j = GetChildItem(i);
- while (j != NULL)
- {
- UnCheckTree(j, d);
- j = GetNextSiblingItem(j);
- }
-
- int a = 0, b = 0;
- if ((j = GetParentItem(i)) == NULL) return;
- if ((i = GetChildItem(j)) == NULL) return;
- while (i != NULL)
- {
- a++;
- int n, s;
- GetItemImage(i, n, s);
- if (n == 1) b++;
- i = GetNextSiblingItem(i);
- }
- if (b == 0)
- {
- SetItemImage(j, 0, 0);
- }
- else
- if (a > b)
- {
- SetItemImage(j, 2, 2);
- }
- else
- {
- SetItemImage(j, 1, 1);
- }
- }
-
- void CCheckTreeCtrl::UnCheckTree(HTREEITEM i, int d)
- {
- if (i != TVI_ROOT)
- {
- SetItemImage(i, d, d);
- i = GetChildItem(i);
- }
- else
- {
- i = GetNextItem(NULL, TVGN_CHILD);
- }
- while (i != NULL)
- {
- UnCheckTree(i, d);
- i = GetNextSiblingItem(i);
- }
- }
-