//#######################################################################################//## CheckTreeCtrl.cpp : implementation file//########################################################################################include "stdafx.h"#include "CheckTreeCtrl.h"#include "CheckComboBox.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif//#######################################################################################CCheckTreeCtrl::CCheckTreeCtrl() : CTreeCtrl(){//## INITIALIZEm_pwndParentCombo = NULL;m_bUpdateNeeded = FALSE;m_bSendMsgToParent=TRUE;}//## ====================================================================================CCheckTreeCtrl::~CCheckTreeCtrl(){}//#######################################################################################BEGIN_MESSAGE_MAP(CCheckTreeCtrl, CTreeCtrl)ON_WM_LBUTTONUP()ON_WM_PAINT()END_MESSAGE_MAP()//#######################################################################################void CCheckTreeCtrl::Populate(){//## ASSERTif (!m_hWnd) return;//## GET DataCCheckTreeData* pTreeData = ((CCheckComboBox*)m_pwndParentCombo)->GetData();BOOL bImageList = (GetImageList(TVSIL_NORMAL) != NULL);//## INSERT ROOTHTREEITEM hRoot;if (bImageList)hRoot = InsertItem(ROOT_CAPTION, IMG_OPEN, IMG_OPEN);else hRoot = InsertItem(ROOT_CAPTION);SetItemData(hRoot, ROOT_INDEX);//## ADD rest of the itemsHTREEITEM hParents[TREE_MAX_LEVELS];hParents[ROOT_LEVEL] = hRoot;long nLevel; BOOL bIsLeaf,bChecked;for(long i=0+1; i<pTreeData->GetSize(); i++){nLevel = pTreeData->ElementAt(i).nLevel;bIsLeaf = pTreeData->ElementAt(i).bIsLeaf;bChecked = pTreeData->ElementAt(i).bChecked;if (bImageList)hParents[ nLevel ] = InsertItem( pTreeData->ElementAt(i).strCaption, (bIsLeaf) ? IMG_ITEM : IMG_CLOSE, (bIsLeaf) ? IMG_ITEM : IMG_CLOSE, hParents[ nLevel - 1 ] );else hParents[ nLevel ] = InsertItem( pTreeData->ElementAt(i).strCaption, hParents[ nLevel - 1 ] );SetItemData(hParents[ nLevel ], i);if(bChecked){EnsureVisible(hParents[ nLevel ]);}}//## EXPAND Rootthis->Expand(hRoot, TVE_EXPAND);}//## ====================================================================================void CCheckTreeCtrl::OnLButtonUp(UINT nFlags, CPoint point){//## CALL ParentCTreeCtrl::OnLButtonDown(nFlags, point);//## UPDATE Neededm_bUpdateNeeded = TRUE;//## UPDATE to stateUpdateToState();}//## ====================================================================================void CCheckTreeCtrl::OnPaint(){//## CALL ParentCTreeCtrl::OnPaint();//## UPDATE to stateif (m_bUpdateNeeded){m_bUpdateNeeded = FALSE;UpdateToState();}}//#######################################################################################void CCheckTreeCtrl::UpdateToState(){//## ASSERTif (!m_pwndParentCombo) return;//## DECLARElong nIndex; BOOL bChecked;//## GET DataCCheckTreeData* pTreeData = ((CCheckComboBox*)m_pwndParentCombo)->GetData();if (!pTreeData) return;if (!pTreeData->GetSize()) return;//## SCAN TREEHTREEITEM hItem = GetNextItem(TVI_ROOT, TVGN_FIRSTVISIBLE);while(hItem){//## GET ItemData = IndexnIndex = GetItemData(hItem);//## UPDATE Image if neededif ((nIndex >= 0) && (!pTreeData->ElementAt(nIndex).bIsLeaf))UpdateItemImage(hItem);//## GET Checked. Modification => update & exitbChecked = GetCheck(hItem);if ((nIndex >= 0) && (pTreeData->ElementAt(nIndex).bChecked != bChecked)){pTreeData->ElementAt(nIndex).bChecked = bChecked;pTreeData->UpdateChecks(nIndex);UpdateFromState();UpdateParentWnd();Invalidate();return;}//## GO ONhItem = GetNextItem(hItem, TVGN_NEXTVISIBLE);}}//#######################################################################################BOOL CCheckTreeCtrl::GetItemExpanded(HTREEITEM hItem){//## ASSERTif (!hItem) return FALSE;//## RETURN Expandedreturn ((GetItemState(hItem, TVIS_EXPANDED) & TVIS_EXPANDED) != 0L);}//## ====================================================================================void CCheckTreeCtrl::UpdateItemImage(HTREEITEM hItem){//## ASSERTif (!hItem) return;//## DECLAREBOOL bExpanded;int nImage, nSelectedImage;//## GET Expanded + ImagebExpanded = GetItemExpanded(hItem);GetItemImage(hItem, nImage, nSelectedImage);//## UPDTE Image if necessaryif (bExpanded && (nImage == IMG_CLOSE))SetItemImage(hItem, IMG_OPEN, IMG_OPEN);if (!bExpanded && (nImage == IMG_OPEN))SetItemImage(hItem, IMG_CLOSE, IMG_CLOSE);}//#######################################################################################void CCheckTreeCtrl::UpdateFromState(){//## ASSERTif (!m_pwndParentCombo) return;//## GET DataCCheckTreeData* pTreeData = ((CCheckComboBox*)m_pwndParentCombo)->GetData();if (pTreeData->GetSize() <= 0) return;//## GET Root & RootIndexHTREEITEM hItem = GetRootItem();long nIndex = GetItemData(hItem);//## SET CheckSetCheck( hItem, pTreeData->ElementAt(nIndex).bChecked );//## SELECTHTREEITEM hItemToSelect = GetNextItem(TVI_ROOT, TVGN_CARET);if (!hItemToSelect) hItemToSelect = hItem;SelectItem( hItemToSelect );//## RECURSIVERecursiveUpdateFromState(hItem);}//## ====================================================================================void CCheckTreeCtrl::RecursiveUpdateFromState(HTREEITEM hParentItem){//## ASSERTif (!ItemHasChildren(hParentItem)) return;//## GET DataCCheckTreeData* pTreeData = ((CCheckComboBox*)m_pwndParentCombo)->GetData();//## SCANlong nIndex = 0L;HTREEITEM hItem = GetChildItem(hParentItem);while(hItem){//## GET ItemData = IndexnIndex = GetItemData(hItem);//## SET CheckSetCheck( hItem, pTreeData->ElementAt(nIndex).bChecked );//## RECURSIVERecursiveUpdateFromState(hItem);//## GO ONhItem = GetNextItem(hItem, TVGN_NEXT);}}//## ====================================================================================void CCheckTreeCtrl::UpdateParentWnd(){//## ASSERTif (!m_pwndParentCombo) return;//## GET DataCCheckTreeData* pTreeData = ((CCheckComboBox*)m_pwndParentCombo)->GetData();if (!pTreeData) return;//## SET Captionm_pwndParentCombo->SetWindowText( pTreeData->GetCheckedTexts() );//Send message to parent window of the combo treeCWnd* pParent=m_pwndParentCombo->GetParent();if ( pParent!=NULL && pParent->GetSafeHwnd () && m_bSendMsgToParent ){pParent->SendMessage (NOTIFY_TREECOMBO_CHECK);}}//#######################################################################################
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。