// SelectionView.cpp // // (c)1998-2025 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "GridSample.h" #include "SelectionView.h" #include "GridSampleView.h" #include "resource.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ////////////////////////////////////////////////////////////////////////// // CSelectionFrame BEGIN_MESSAGE_MAP(CSelectionFrame, CFrameWnd) //{{AFX_MSG_MAP(CSelectionFrame) ON_WM_CREATE() ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; int CSelectionFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, _countof(indicators))) { TRACE0("Failed to create status bar\n"); return -1; } #ifdef _XTP_INCLUDE_COMMANDBARS if (!InitCommandBars()) return -1; CXTPCommandBars* pCommandBars = GetCommandBars(); pCommandBars->SetMenu(_T("Menu Bar"), IDR_TASKLIST); pCommandBars->SetTheme(xtpThemeNativeWinXP); pCommandBars->GetPaintManager()->m_bAutoResizeIcons = TRUE; #endif return 0; } void CSelectionFrame::OnDestroy() { ((CGridSampleView*)m_pOwnerView)->m_pWndSelection = NULL; CFrameWnd::OnDestroy(); } ///////////////////////////////////////////////////////////////////////////// // CSelectionView IMPLEMENT_DYNCREATE(CSelectionView, CXTPGridView) CSelectionView::CSelectionView() { } CSelectionView::~CSelectionView() { } BEGIN_MESSAGE_MAP(CSelectionView, CXTPGridView) //{{AFX_MSG_MAP(CSelectionView) // Window ON_WM_CREATE() // Grid control ON_NOTIFY(XTP_NM_GRID_VALUECHANGED, XTP_ID_GRID_CONTROL, OnGridValueChanged) ON_NOTIFY(XTP_NM_GRID_SELCHANGED, XTP_ID_GRID_CONTROL, OnGridSelChanged) //}}AFX_MSG_MAP ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSelectionView drawing ///////////////////////////////////////////////////////////////////////////// // CSelectionView diagnostics #ifdef _DEBUG void CSelectionView::AssertValid() const { CView::AssertValid(); } void CSelectionView::Dump(CDumpContext& dc) const { CView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CSelectionView message handlers int CSelectionView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CXTPGridView::OnCreate(lpCreateStruct) == -1) return -1; CXTPGridControl& wndGrid = GetGridCtrl(); wndGrid.ShowHeaderRows(TRUE); wndGrid.HeaderRowsAllowEdit(TRUE); wndGrid.AddColumn(new CXTPGridColumn(0, _T("ID"), 50, FALSE)); wndGrid.AddColumn(new CXTPGridColumn(1, _T("String"), 100, TRUE)); CXTPGridRecord* pRecord; pRecord = new CXTPGridRecord(); pRecord->AddItem(new CXTPGridRecordItemText(_T(""))); pRecord->AddItem(new CXTPGridRecordItemText(_T("")))->SetBackgroundColor(RGB(255, 255, 0)); wndGrid.GetHeaderRecords()->Add(pRecord); for (int i = 0; i < 2000; i++) { CString sId; CString sString; sId.Format(_T("%d"), i); if (i < 100) sString = _T("AAA"); else if (i < 300) sString = _T("BBB"); else if (i < 600) sString = _T("CCC"); else if (i < 900) sString = _T("DDD"); else if (i < 1200) sString = _T("EEE"); else if (i < 1500) sString = _T("FFF"); else if (i < 1800) sString = _T("GGG"); else sString = _T("HHH"); pRecord = new CXTPGridRecord(); pRecord->AddItem(new CXTPGridRecordItemText(sId)); pRecord->AddItem(new CXTPGridRecordItemText(sString)); wndGrid.AddRecord(pRecord); } wndGrid.Populate(); return 0; } void CSelectionView::OnGridValueChanged(NMHDR* pNotifyStruct, LRESULT* pResult) { XTP_NM_GRIDRECORDITEM* pItemNotify = (XTP_NM_GRIDRECORDITEM*)pNotifyStruct; CXTPGridControl& wndGrid = GetGridCtrl(); CXTPGridRecord* pRecord = NULL; CXTPGridRecord* pFilterRecord = wndGrid.GetHeaderRecords()->GetAt(0); CXTPGridRecordItemText* pFilterItem = NULL; CXTPGridRecordItemText* pItem = NULL; int nColumn = 0; int nRecord = 0; BOOL bVisibility = TRUE; for (nRecord = 0; nRecord < wndGrid.GetRecords()->GetCount(); nRecord++) { pRecord = wndGrid.GetRecords()->GetAt(nRecord); if (pRecord == NULL) continue; bVisibility = TRUE; for (nColumn = 0; nColumn < pFilterRecord->GetItemCount(); nColumn++) { pFilterItem = reinterpret_cast( pFilterRecord->GetItem(nColumn)); if (pFilterItem == NULL) continue; CString sFilter = pFilterItem->GetValue(); if (sFilter == _T("")) continue; pItem = reinterpret_cast(pRecord->GetItem(nColumn)); if (pItem == NULL) continue; if (sFilter != pItem->GetValue().Left(sFilter.GetLength())) { bVisibility = FALSE; break; } } pRecord->SetVisible(bVisibility); } wndGrid.Populate(); } void CSelectionView::OnGridSelChanged(NMHDR* pNotifyStruct, LRESULT* pResult) { CXTPGridControl& wndGrid = GetGridCtrl(); int nCount = wndGrid.GetSelectedRows()->GetCount(); }