home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2003 June
/
PCWorld_2003-06_cd.bin
/
KOMUNIK
/
MIRRORIT
/
SRC
/
CHECKTREECTRL.CPP
next >
Wrap
C/C++ Source or Header
|
1998-01-06
|
2KB
|
126 lines
// 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);
}
}