// GridSampleView.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 "MainFrm.h" #include "GridSampleDoc.h" #include "GridSampleView.h" #include "GridMultilinePaintManager.h" #include "MessageRecord.h" #include "TreeViewDlg.h" #include "TreeEditDlg.h" #include "FormulaDlg.h" #include "PerfomanceTestDlg.h" #include "SmoothScrollView.h" #include "TaskListView.h" #include "MergeView.h" #include "SelectionView.h" #include "PropertiesView.h" #include "HeaderFooterView.h" // Quality Assurance #include "EmptyDlg.h" #include "ConstraintsDlg.h" #include "TestNotificationsDlg.h" #include "TestPopupDlg.h" #include "TestAlternateBackgroundDlg.h" #include "TestDragDropDlg.h" #include "TestHitTestDlg.h" #include "TestHeaderAlignmentDlg.h" #include "TestComboBoxDlg.h" #include "TestItemTypesDlg.h" #include "TestMarkupDlg.h" #include "TestEnsureVisibleDlg.h" #include "TestColumnsDlg.h" #include "TestExpandDlg.h" #include "TestPaintManager.h" #include #pragma comment(lib, "shlwapi") #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // Constants used to identify columns, this will be the column ItemIndex // Constants used to identify icons used in the GridControl #define COLUMN_MAIL_ICON 0 #define COLUMN_CHECK_ICON 2 #ifdef _UNICODE # define STR_(x) L#x # define STR(x) STR_(x) #else # define STR_(x) #x # define STR(x) STR_(x) #endif #define XTPVERSTR STR(v) STR(_XTPLIB_VERSION_MAJOR) STR(.) STR(_XTPLIB_VERSION_MINOR) CString cstrMarkupLongSample( _T("") _T("Subject: ") _T("Toolkit Pro ") XTPVERSTR _T(" ") _T("Released!") _T("Body:") _T("") _T("Codejock Software released ") _T("Toolkit Pro ") XTPVERSTR _T(" today. All") _T(" development machines must be updated no later than ") _T("in a month.") _T("") _T("") _T(" - Management") _T("") _T("")); CString cstrMarkupShortSample(_T("") _T("Subject: ") _T("Toolkit Pro ") XTPVERSTR _T(" ") _T("Released!") _T("")); ///////////////////////////////////////////////////////////////////////////// // CGridSampleView IMPLEMENT_DYNCREATE(CGridSampleView, CXTPGridView) BEGIN_MESSAGE_MAP(CGridSampleView, CXTPGridView) //{{AFX_MSG_MAP(CGridSampleView) ON_WM_CREATE() ON_WM_SETFOCUS() ON_WM_DESTROY() // Scrolling (Horizontal) ON_COMMAND(ID_SCROLLING_HORIZONTAL_BLOCK_COUNT, OnScrollingHorizontalBlockCount) ON_COMMAND(ID_SCROLLING_HORIZONTAL_BLOCK_SIZE, OnScrollingHorizontalBlockSize) ON_COMMAND(ID_SCROLLING_HORIZONTAL_SMOOTH, OnScrollingHorizontalSmooth) ON_UPDATE_COMMAND_UI(ID_SCROLLING_HORIZONTAL_BLOCK_COUNT, OnUpdateScrollingHorizontalBlockCount) ON_UPDATE_COMMAND_UI(ID_SCROLLING_HORIZONTAL_BLOCK_SIZE, OnUpdateScrollingHorizontalBlockSize) ON_UPDATE_COMMAND_UI(ID_SCROLLING_HORIZONTAL_SMOOTH, OnUpdateScrollingHorizontalSmooth) // Scrolling (Vertical) ON_COMMAND(ID_SCROLLING_VERTICAL_BLOCK_COUNT, OnScrollingVerticalBlockCount) ON_COMMAND(ID_SCROLLING_VERTICAL_SMOOTH, OnScrollingVerticalSmooth) ON_UPDATE_COMMAND_UI(ID_SCROLLING_VERTICAL_BLOCK_COUNT, OnUpdateScrollingVerticalBlockCount) ON_UPDATE_COMMAND_UI(ID_SCROLLING_VERTICAL_SMOOTH, OnUpdateScrollingVerticalSmooth) ON_COMMAND(ID_GRIDCONTROL_DOUBLEBUFFERING, OnGridDoubleBuffering) ON_COMMAND(ID_GRIDCONTROL_LOCKEXPAND, OnGridLockExpand) ON_COMMAND(ID_GRIDCONTROL_WATERMARK, OnGridWatermark) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_DOUBLEBUFFERING, OnUpdateGridDoubleBuffering) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_LOCKEXPAND, OnUpdateGridLockExpand) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_WATERMARK, OnUpdateGridWatermark) ON_COMMAND(ID_ENABLE_PREVIEW, OnEnablePreview) ON_UPDATE_COMMAND_UI(ID_ENABLE_PREVIEW, OnUpdateEnablePreview) ON_COMMAND(ID_TEST_AUTOGROUPING, OnAutoGrouping) ON_UPDATE_COMMAND_UI(ID_TEST_AUTOGROUPING, OnUpdateAutoGrouping) ON_COMMAND(ID_TEST_GROUPBY, OnGroupBy) ON_UPDATE_COMMAND_UI(ID_TEST_GROUPBY, OnUpdateGroupBy) ON_COMMAND(ID_GRIDCONTROL_MARKUP, OnGridMarkup) ON_COMMAND(ID_TEST_GROUPSHADE, OnGroupShade) ON_UPDATE_COMMAND_UI(ID_TEST_GROUPSHADE, OnUpdateGroupShade) ON_COMMAND(ID_TEST_GROUPSBOLD, OnGroupBold) ON_UPDATE_COMMAND_UI(ID_TEST_GROUPSBOLD, OnUpdateGroupBold) ON_COMMAND(ID_GRIDCONTROL_AUTOMATICFORMATTINGSAMPLE, OnGridControlAutomaticformattingsample) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_AUTOMATICFORMATTINGSAMPLE, OnUpdateGridControlAutomaticformattingsample) ON_COMMAND(ID_OPTIONS_ALLOWCOLUMNRESIZE, OnOptionsAllowcolumnresize) ON_UPDATE_COMMAND_UI(ID_OPTIONS_ALLOWCOLUMNRESIZE, OnUpdateOptionsAllowcolumnresize) ON_COMMAND(ID_OPTIONS_ALLOWCOLUMNSREMOVE, OnOptionsAllowcolumnsremove) ON_UPDATE_COMMAND_UI(ID_OPTIONS_ALLOWCOLUMNSREMOVE, OnUpdateOptionsAllowcolumnsremove) ON_COMMAND(ID_OPTIONS_MULTIPLESELECTION, OnOptionsMultipleselection) ON_UPDATE_COMMAND_UI(ID_OPTIONS_MULTIPLESELECTION, OnUpdateOptionsMultipleselection) ON_COMMAND(ID_OPTIONS_SHOWITEMSINGROUPS, OnOptionsShowitemsingroups) ON_UPDATE_COMMAND_UI(ID_OPTIONS_SHOWITEMSINGROUPS, OnUpdateOptionsShowitemsingroups) ON_COMMAND(ID_OPTIONS_SHOW_FOOTER, OnOptionsShowFooter) ON_UPDATE_COMMAND_UI(ID_OPTIONS_SHOW_FOOTER, OnUpdateOptionsShowFooter) ON_COMMAND(ID_TEST_TREEVIEWDIALOG, OnTreeViewDlg) ON_COMMAND(ID_TEST_TREEEDITDIALOG, OnTreeEditDlg) ON_COMMAND(ID_TEST_FORMULADIALOG, OnFormulaDlg) ON_COMMAND(ID_TEST_TASKLIST, OnTestTasklist) ON_COMMAND(ID_TEST_MERGE, OnTestMerge) ON_COMMAND(ID_TEST_SELECTION, OnTestSelection) ON_COMMAND(ID_TEST_HEADERFOOTER, OnTestHeaderFooter) ON_COMMAND(ID_TEST_PERFOMANCE, OnTestPerfomance) ON_COMMAND(ID_TEST_PROPERTIES, OnTestProperties) ON_UPDATE_COMMAND_UI(ID_TEST_MARKUP, OnUpdateTestMarkup) ON_COMMAND(ID_TEST_EMPTY, OnTestEmpty) ON_COMMAND(ID_TEST_CONSTRAINTS, OnTestConstraints) ON_COMMAND(ID_TEST_SMOOTH_SCROLL, OnTestSmoothScroll) ON_COMMAND(ID_TEST_NOTIFICATIONS, OnTestNotifications) ON_COMMAND(ID_TEST_POPUP, OnTestPopup) ON_COMMAND(ID_TEST_ALTERNATE_BACKGROUND, OnTestAlternateBackground) ON_COMMAND(ID_TEST_DRAG_DROP, OnTestDragDrop) ON_COMMAND(ID_TEST_HITTEST, OnTestHitTest) ON_COMMAND(ID_TEST_HEADER_ALIGNMENT, OnTestHeaderAlignment) ON_COMMAND(ID_TEST_COMBOBOX, OnTestComboBox) ON_COMMAND(ID_TEST_ITEM_TYPES, OnTestItemTypes) ON_COMMAND(ID_TEST_MARKUP, OnTestMarkup) ON_COMMAND(ID_TEST_ENSURE_VISIBLE, OnTestEnsureVisible) ON_COMMAND(ID_TEST_COLUMNS, OnTestColumns) ON_COMMAND(ID_TEST_EXPAND, OnTestExpand) ON_COMMAND(ID_OPTIONS_AUTOMATICCOLUMNSIZING, OnOptionsAutomaticcolumnsizing) ON_UPDATE_COMMAND_UI(ID_OPTIONS_AUTOMATICCOLUMNSIZING, OnUpdateOptionsAutomaticcolumnsizing) ON_COMMAND(ID_GRIDCONTROL_MULTILINESAMPLE, OnGridControlMultilineSample) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_MULTILINESAMPLE, OnUpdateGridControlMultilineSample) ON_COMMAND(ID_GRIDHEADER_ALLOWCOLUMNREORDER, OnGridheaderAllowColumnReorder) ON_UPDATE_COMMAND_UI(ID_GRIDHEADER_ALLOWCOLUMNREORDER, OnUpdateGridHeaderAllowColumnReorder) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_0, OnUpdateOptionsFreezecolumns0) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_1, OnUpdateOptionsFreezecolumns1) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_2, OnUpdateOptionsFreezecolumns2) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_3, OnUpdateOptionsFreezecolumns3) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_0, OnOptionsFreezecolumns0) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_1, OnOptionsFreezecolumns1) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_2, OnOptionsFreezecolumns2) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_3, OnOptionsFreezecolumns3) ON_COMMAND(ID_GRIDCONTROL_RIGHTTOLEFT, OnGridControlRighttoleft) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_RIGHTTOLEFT, OnUpdateGridControlRighttoleft) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_1, OnOptionsFreezecolumnsDivider1) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_1, OnUpdateOptionsFreezecolumnsDivider1) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_2, OnOptionsFreezecolumnsDivider2) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_2, OnUpdateOptionsFreezecolumnsDivider2) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_HEADER, OnOptionsFreezecolumnsDividerHeader) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_HEADER, OnUpdateOptionsFreezecolumnsDividerHeader) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_NONE, OnOptionsFreezecolumnsDividerNone) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_NONE, OnUpdateOptionsFreezecolumnsDividerNone) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_SHADE, OnOptionsFreezecolumnsDividerShade) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_SHADE, OnUpdateOptionsFreezecolumnsDividerShade) //}}AFX_MSG_MAP #if _XTPLIB_VERSION_PREFIX >= 1520 // Grid color ON_COMMAND(ID_GRID_COLOR_RED, OnGridColorRed) ON_COMMAND(ID_GRID_COLOR_GREEN, OnGridColorGreen) ON_COMMAND(ID_GRID_COLOR_BLUE, OnGridColorBlue) ON_UPDATE_COMMAND_UI(ID_GRID_COLOR_RED, OnUpdateGridColorRed) ON_UPDATE_COMMAND_UI(ID_GRID_COLOR_GREEN, OnUpdateGridColorGreen) ON_UPDATE_COMMAND_UI(ID_GRID_COLOR_BLUE, OnUpdateGridColorBlue) #endif #if _XTPLIB_VERSION_PREFIX >= 1511 // Grid behavior ON_COMMAND(ID_BEHAVIOR_CODEJOCKDEFAULT, OnBehaviorCodejockDefault) ON_COMMAND(ID_BEHAVIOR_CODEJOCK1502, OnBehaviorCodejock1502) ON_COMMAND(ID_BEHAVIOR_CODEJOCK1501, OnBehaviorCodejock1501) ON_COMMAND(ID_BEHAVIOR_CODEJOCK1342, OnBehaviorCodejock1342) ON_COMMAND(ID_BEHAVIOR_OUTLOOK2003, OnBehaviorOutlook2003) ON_COMMAND(ID_BEHAVIOR_OUTLOOK2007, OnBehaviorOutlook2007) ON_COMMAND(ID_BEHAVIOR_OUTLOOK2010, OnBehaviorOutlook2010) ON_COMMAND(ID_BEHAVIOR_EXCEL2003, OnBehaviorExcel2003) ON_COMMAND(ID_BEHAVIOR_EXCEL2007, OnBehaviorExcel2007) ON_COMMAND(ID_BEHAVIOR_EXCEL2010, OnBehaviorExcel2010) ON_COMMAND(ID_BEHAVIOR_CUSTOM, OnBehaviorCustom) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_CODEJOCKDEFAULT, OnUpdateBehaviorCodejockDefault) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_CODEJOCK1502, OnUpdateBehaviorCodejock1502) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_CODEJOCK1501, OnUpdateBehaviorCodejock1501) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_CODEJOCK1342, OnUpdateBehaviorCodejock1342) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_OUTLOOK2003, OnUpdateBehaviorOutlook2003) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_OUTLOOK2007, OnUpdateBehaviorOutlook2007) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_OUTLOOK2010, OnUpdateBehaviorOutlook2010) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_EXCEL2003, OnUpdateBehaviorExcel2003) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_EXCEL2007, OnUpdateBehaviorExcel2007) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_EXCEL2010, OnUpdateBehaviorExcel2010) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_CUSTOM, OnUpdateBehaviorCustom) #endif // Standard printing commands ON_COMMAND_RANGE(ID_GRID_HORIZONTAL_NOGRIDLINES, ID_GRID_HORIZONTAL_SOLID, OnGridHorizontal) ON_UPDATE_COMMAND_UI_RANGE(ID_GRID_HORIZONTAL_NOGRIDLINES, ID_GRID_HORIZONTAL_SOLID, OnUpdateGridHorizontal) ON_COMMAND_RANGE(ID_GRID_VERTICAL_NOGRIDLINES, ID_GRID_VERTICAL_SOLID, OnGridVertical) ON_UPDATE_COMMAND_UI_RANGE(ID_GRID_VERTICAL_NOGRIDLINES, ID_GRID_VERTICAL_SOLID, OnUpdateGridVertical) ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CGridSampleView::OnFilePrintPreview) ON_COMMAND(ID_FILE_PAGE_SETUP, CXTPGridView::OnFilePageSetup) ON_NOTIFY(NM_CLICK, XTP_ID_GRID_CONTROL, OnGridItemClick) ON_NOTIFY(XTP_NM_GRID_HYPERLINK, XTP_ID_GRID_CONTROL, OnGridHyperlinkClick) ON_NOTIFY(NM_RCLICK, XTP_ID_GRID_CONTROL, OnGridItemRClick) ON_NOTIFY(NM_DBLCLK, XTP_ID_GRID_CONTROL, OnGridItemDblClick) ON_NOTIFY(XTP_NM_GRID_HEADER_RCLICK, XTP_ID_GRID_CONTROL, OnGridColumnRClick) ON_NOTIFY(NM_KEYDOWN, XTP_ID_GRID_CONTROL, OnGridKeyDown) ON_NOTIFY(LVN_BEGINDRAG, XTP_ID_GRID_CONTROL, OnGridBeginDrag) ON_NOTIFY(XTP_NM_GRID_BEFORE_PASTE_FROMTEXT, XTP_ID_GRID_CONTROL, OnGridBeforePasteFromText) ON_NOTIFY(XTP_NM_GRID_BEFORE_PASTE, XTP_ID_GRID_CONTROL, OnGridBeforePaste) ON_NOTIFY(XTP_NM_GRID_GROUPORDERCHANGED, XTP_ID_GRID_CONTROL, OnGridGroupOrderChanged) ON_NOTIFY(XTP_NM_GRID_GIVEFEEDBACK, XTP_ID_GRID_CONTROL, OnGridGiveFeedback) ON_COMMAND(ID_GRIDCONTROL_DEVTEST, OnGridControlDevtest) ON_COMMAND(ID_GRIDCONTROL_WYSIWYG_PRINT, OnGridWYSIWYG) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_WYSIWYG_PRINT, OnUpdateGridWYSIWYG) ON_COMMAND(ID_GRIDCONTROL_ICONVIEW, OnGridIconview) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_ICONVIEW, OnUpdateGridIconview) #if defined(_XTP_INCLUDE_SKINFRAMEWORK) && !defined(_XTP_EXCLUDE_SKINFRAMEWORK) # define IMPLEMENT_APPSKIN_MAP(ID, Skin) \ ON_COMMAND(ID_VIEW_SKIN_##ID, OnViewSkin##Skin) \ ON_UPDATE_COMMAND_UI(ID_VIEW_SKIN_##ID, OnUpdateViewSkin##Skin) IMPLEMENT_APPSKIN_MAP(NONE, None) IMPLEMENT_APPSKIN_MAP(OFFICE_2007, Office2007) IMPLEMENT_APPSKIN_MAP(OFFICE_2010, Office2010) IMPLEMENT_APPSKIN_MAP(VISTA, Vista) #endif ON_COMMAND(ID_VIEW_THEME_THEMEDIALOG, OnViewThemeDialog) ON_WM_XTP_THEMECHANGED() END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CGridSampleView construction/destruction CGridSampleView::CGridSampleView() : m_pWndMerge(NULL) , m_pWndSelection(NULL) , m_pWndSmoothScroll(NULL) { m_bWatermark = FALSE; m_bAutomaticFormating = FALSE; m_pTaskFrame = 0; m_pHeaderFooterFrame = 0; m_pPropertiesFrame = 0; m_bMultilineSample = FALSE; m_bShowReadOnlyLockIcons = TRUE; } CGridSampleView::~CGridSampleView() { } BOOL CGridSampleView::PreCreateWindow(CREATESTRUCT& cs) { if (!CView::PreCreateWindow(cs)) return FALSE; // cs.dwExStyle |= WS_EX_STATICEDGE; cs.dwExStyle &= ~WS_EX_CLIENTEDGE; return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CGridSampleView diagnostics #ifdef _DEBUG void CGridSampleView::AssertValid() const { CView::AssertValid(); } void CGridSampleView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CGridSampleDoc* CGridSampleView::GetDocument() // non-debug version is inline { _ASSERTE(m_pDocument->IsKindOf(RUNTIME_CLASS(CGridSampleDoc))); return (CGridSampleDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CGridSampleView message handlers int CGridSampleView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CXTPGridView::OnCreate(lpCreateStruct) == -1) return -1; CXTPGridControl& wndGrid = GetGridCtrl(); // // Add sample columns // wndGrid.AddColumn( new CXTPGridColumn(COLUMN_IMPORTANCE, _T("Importance"), XTP_DPI_X(18), FALSE, 1)); wndGrid.AddColumn(new CXTPGridColumn(COLUMN_ICON, _T("Message Class"), XTP_DPI_X(18), FALSE, COLUMN_MAIL_ICON)); wndGrid.AddColumn( new CXTPGridColumn(COLUMN_ATTACHMENT, _T("Attachment"), XTP_DPI_X(18), FALSE, 7)); CXTPGridColumn* pNewPMCol = wndGrid.AddColumn(new CXTPGridColumn(COLUMN_FROM, _T("From"), 100)); pNewPMCol->SetPlusMinus(TRUE); pNewPMCol->SetExpanded(TRUE); pNewPMCol->SetNextVisualBlock(2); wndGrid.AddColumn(new CXTPGridColumn(COLUMN_SUBJECT, _T("Subject"), 180)); wndGrid.AddColumn(new CXTPGridColumn(COLUMN_RECEIVED, _T("Received"), 80)); wndGrid.AddColumn(new CXTPGridColumn(COLUMN_SIZE, _T("Size"), 55, FALSE)); wndGrid.AddColumn( new CXTPGridColumn(COLUMN_CHECK, _T("Checked"), XTP_DPI_X(18), FALSE, COLUMN_CHECK_ICON)); wndGrid.AddColumn( new CXTPGridColumn(COLUMN_PRICE, _T("Price"), 80, TRUE, XTP_GRID_NOICON, TRUE, FALSE)); wndGrid.AddColumn( new CXTPGridColumn(COLUMN_SENT, _T("Sent"), 150, TRUE, XTP_GRID_NOICON, TRUE, FALSE)); wndGrid.AddColumn( new CXTPGridColumn(COLUMN_CREATED, _T("Created"), 80, TRUE, XTP_GRID_NOICON, TRUE, FALSE)); wndGrid.AddColumn(new CXTPGridColumn(COLUMN_CONVERSATION, _T("Conversation"), 30, TRUE, XTP_GRID_NOICON, TRUE, FALSE)); wndGrid.AddColumn(new CXTPGridColumn(COLUMN_CONTACTS, _T("Contacts"), 30, TRUE, XTP_GRID_NOICON, TRUE, FALSE)); wndGrid.AddColumn( new CXTPGridColumn(COLUMN_MESSAGE, _T("Message"), 80, TRUE, XTP_GRID_NOICON, TRUE, FALSE)); wndGrid.AddColumn( new CXTPGridColumn(COLUMN_CC, _T("CC"), 80, TRUE, XTP_GRID_NOICON, TRUE, FALSE)); wndGrid.AddColumn(new CXTPGridColumn(COLUMN_CATEGORIES, _T("Categories"), 30, TRUE, XTP_GRID_NOICON, TRUE, FALSE)); wndGrid.AddColumn(new CXTPGridColumn(COLUMN_AUTOFORWARD, _T("Auto Forward"), 30, TRUE, XTP_GRID_NOICON, TRUE, FALSE)); wndGrid.AddColumn(new CXTPGridColumn(COLUMN_AUTOARCHIVE, _T("Do not autoarchive"), 30, TRUE, XTP_GRID_NOICON, TRUE, FALSE)); wndGrid.AddColumn( new CXTPGridColumn(COLUMN_DUE_BY, _T("Due by"), 30, TRUE, XTP_GRID_NOICON, TRUE, FALSE)); #if 1 // Add sample records OnAutoGrouping(); AddSampleRecords(); wndGrid.GetRecords() ->GetAt(3) ->GetItem(COLUMN_FROM) ->AddHyperlink(new CXTPGridHyperlink(12, 26)); ((CXTPGridRecordItem*)(wndGrid.GetRecords()->GetAt(3)->GetItemPreview())) ->AddHyperlink(new CXTPGridHyperlink(27, 7)); ((CXTPGridRecordItem*)(wndGrid.GetRecords()->GetAt(3)->GetItemPreview())) ->AddHyperlink(new CXTPGridHyperlink(110, 13)); ((CXTPGridRecordItem*)(wndGrid.GetRecords()->GetAt(5)->GetItemPreview())) ->AddHyperlink(new CXTPGridHyperlink(21, 26)); ((CXTPGridRecordItem*)(wndGrid.GetRecords()->GetAt(5)->GetItemPreview())) ->AddHyperlink(new CXTPGridHyperlink(123, 26)); wndGrid.GetRecords()->GetAt(8)->GetItem(COLUMN_FROM)->AddHyperlink(new CXTPGridHyperlink(0, 28)); wndGrid.GetRecords()->GetAt(3)->SetEditable(FALSE); #endif #if _XTPLIB_VERSION_PREFIX >= 1511 wndGrid.GetToolTipContext()->SetStyle(xtpToolTipResource); #else wndGrid.GetToolTipContext()->SetStyle(xtpToolTipOffice2007); #endif OnGroupBy(); wndGrid.InitialSelectionEnable(FALSE); wndGrid.Populate(); wndGrid.EnableDragDrop(_T("GridSampleView"), xtpGridAllowDrag | xtpGridAllowDrop); wndGrid.FocusSubItems(TRUE); wndGrid.m_bSortedDragDrop = TRUE; wndGrid.GetImageManager()->SetImageList(IDB_ICONVIEWTEST, 32, 0, RGB(255, 0, 255)); wndGrid.GetPaintManager()->ShowWYSIWYGMarkers(TRUE); wndGrid.GetPaintManager()->SetDrawGridForEmptySpace(TRUE); // Set header/footer divider style wndGrid.GetPaintManager()->SetHeaderRowsDividerStyle(xtpGridFixedRowsDividerBold); wndGrid.GetPaintManager()->SetFooterRowsDividerStyle(xtpGridFixedRowsDividerBold); wndGrid.GetPaintManager()->m_clrHeaderRowsDivider = RGB(255, 0, 0); wndGrid.GetPaintManager()->m_clrFooterRowsDivider = RGB(0, 0, 255); // Set hyperlink style #if _XTPLIB_VERSION_PREFIX >= 1511 wndGrid.GetPaintManager()->m_pHyperlinkStyle->SetColor(RGB(0, 0, 255)); wndGrid.GetPaintManager()->m_pHyperlinkStyle->SetTextDecoration(xtpGridTextDecorationNone); wndGrid.GetPaintManager()->m_pHyperlinkHoverStyle->SetColor(RGB(0, 0, 255)); wndGrid.GetPaintManager()->m_pHyperlinkHoverStyle->SetTextDecoration( xtpGridTextDecorationUnderline); #endif // Enable smooth scrolling #if _XTPLIB_VERSION_PREFIX >= 1511 wndGrid.SetScrollMode(xtpGridOrientationAll, xtpGridScrollModeSmooth); #endif #if _XTPLIB_VERSION_PREFIX >= 1511 OnBehaviorCodejockDefault(); #endif // OnGridWatermark(); CXTPGridViewPrintOptions* pPrintOptions = GetPrintOptions(); pPrintOptions->GetPageHeader()->m_strLeft = _T("Left"); pPrintOptions->GetPageHeader()->m_strCenter = _T("Center"); pPrintOptions->GetPageHeader()->m_strRight = _T("Right"); pPrintOptions->GetPageFooter()->m_strLeft = _T("Left"); pPrintOptions->GetPageFooter()->m_strCenter = _T("Center"); pPrintOptions->GetPageFooter()->m_strRight = _T("Right"); // wndGrid.ShowFooter(TRUE); // set the theme for the Grid control. CXTPGridView::SetTheme(xtpGridThemeOffice2013, TRUE); UpdateGridIcons(); // exclude unused themes. m_dlgTheme.ExcludeTheme(XTP_EXCLUDE_THEME_VISUALSTUDIO6 | XTP_EXCLUDE_THEME_VISUALSTUDIO2005 | XTP_EXCLUDE_THEME_VISUALSTUDIO2008 | XTP_EXCLUDE_THEME_VISUALSTUDIO2010 | XTP_EXCLUDE_THEME_VISUALSTUDIO2012 | XTP_EXCLUDE_THEME_NATIVEWINDOWS | XTP_EXCLUDE_THEME_CUSTOM); // set startup theme m_dlgTheme.SetTheme(xtpThemeDlgOffice2016, xtpThemeColor2016Colorful, xtpThemeAccentOutlook); // create theme dialog. VERIFY(m_dlgTheme.Create(IDD_THEME_DIALOG, this)); // enable auto preview. m_dlgTheme.EnableAutoPreview(TRUE); // add additional themes. m_dlgTheme.AddCustomTheme(xtpThemeDlgCustom + 1, _T("Office 2003 (Luna)"), FALSE, 3); m_dlgTheme.AddCustomTheme(xtpThemeDlgCustom + 2, _T("Explorer")); m_dlgTheme.AddCustomTheme(xtpThemeDlgCustom + 3, _T("Test Paint Manager")); return 0; } void CGridSampleView::OnViewThemeDialog() { m_dlgTheme.ShowWindow(SW_SHOW); } class CPostRedraw { public: CPostRedraw(CWnd* pWnd) : m_pWnd(pWnd) { m_pWnd->SetRedraw(FALSE); } ~CPostRedraw() { m_pWnd->SetRedraw(TRUE); m_pWnd->RedrawWindow(0, 0, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW); } private: CWnd* m_pWnd; }; LRESULT CGridSampleView::OnThemeChanged(WPARAM wParam, LPARAM lParam) { THEME_COLOR* pThemeColor = reinterpret_cast(lParam); int nTheme = pThemeColor->nTheme; int nColor = pThemeColor->nColor; int nAccent = pThemeColor->nAccent; XTPGetApplication()->SetAmbientProperty(xtpApplicationAccentColor, static_cast(pThemeColor->nAccent)); XTPGetApplication()->SetAmbientProperty(xtpApplicationUseSystemAccentColor, static_cast(pThemeColor->bUseSystemAccent)); CMainFrame* pMainFrame = DYNAMIC_DOWNCAST(CMainFrame, theApp.m_pMainWnd); ASSERT_VALID(pMainFrame); switch (nTheme) { case xtpThemeDlgOffice2000: { pMainFrame->SetTheme(xtpThemeOffice2000); CXTPGridView::SetTheme(xtpGridThemeDefault); } break; case xtpThemeDlgOfficeXP: { pMainFrame->SetTheme(xtpThemeOfficeXP); CXTPGridView::SetTheme(xtpGridThemeOfficeXP); } break; case xtpThemeDlgOffice2003: { pMainFrame->SetTheme(xtpThemeOffice2003); CXTPGridView::SetTheme(xtpGridThemeOffice2003); } break; case xtpThemeDlgOffice2007: { switch (nColor) { case xtpThemeColor2007Blue: pMainFrame->SetTheme(xtpThemeResource, xtpIniOffice2007Blue); break; case xtpThemeColor2007Silver: pMainFrame->SetTheme(xtpThemeResource, xtpIniOffice2007Silver); break; case xtpThemeColor2007Black: pMainFrame->SetTheme(xtpThemeResource, xtpIniOffice2007Black); break; case xtpThemeColor2007Aqua: pMainFrame->SetTheme(xtpThemeResource, xtpIniOffice2007Aqua); break; } CXTPGridView::SetTheme(xtpGridThemeResource); } break; case xtpThemeDlgOffice2010: { switch (nColor) { case xtpThemeColor2010Blue: pMainFrame->SetTheme(xtpThemeResource, xtpIniOffice2010Blue); break; case xtpThemeColor2010Silver: pMainFrame->SetTheme(xtpThemeResource, xtpIniOffice2010Silver); break; case xtpThemeColor2010Black: pMainFrame->SetTheme(xtpThemeResource, xtpIniOffice2010Black); break; } CXTPGridView::SetTheme(xtpGridThemeResource); } break; case xtpThemeDlgOffice2013: { CPostRedraw pr(pMainFrame); switch (nColor) { case xtpThemeColor2013White: { switch (nAccent) { case xtpThemeAccentAccess: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013Access); break; case xtpThemeAccentExcel: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013Excel); break; case xtpThemeAccentOneNote: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013OneNote); break; case xtpThemeAccentOutlook: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013Outlook); break; case xtpThemeAccentPowerPoint: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013PowerPoint); break; case xtpThemeAccentPublisher: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013Publisher); break; case xtpThemeAccentWord: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013Word); break; } } break; case xtpThemeColor2013GrayLight: { switch (nAccent) { case xtpThemeAccentAccess: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013AccessGrayLight); break; case xtpThemeAccentExcel: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013ExcelGrayLight); break; case xtpThemeAccentOneNote: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013OneNoteGrayLight); break; case xtpThemeAccentOutlook: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013OutlookGrayLight); break; case xtpThemeAccentPowerPoint: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013PowerPointGrayLight); break; case xtpThemeAccentPublisher: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013PublisherGrayLight); break; case xtpThemeAccentWord: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013WordGrayLight); break; } } break; case xtpThemeColor2013GrayDark: { switch (nAccent) { case xtpThemeAccentAccess: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013AccessGrayDark); break; case xtpThemeAccentExcel: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013ExcelGrayDark); break; case xtpThemeAccentOneNote: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013OneNoteGrayDark); break; case xtpThemeAccentOutlook: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013OutlookGrayDark); break; case xtpThemeAccentPowerPoint: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013PowerPointGrayDark); break; case xtpThemeAccentPublisher: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013PublisherGrayDark); break; case xtpThemeAccentWord: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2013WordGrayDark); break; } } break; } CXTPGridView::SetTheme(xtpGridThemeOffice2013, TRUE); } break; case xtpThemeDlgOffice2016: { CPostRedraw pr(pMainFrame); switch (nColor) { case xtpThemeColor2016Black: { switch (nAccent) { case xtpThemeAccentAccess: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016AccessBlack); break; case xtpThemeAccentExcel: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016ExcelBlack); break; case xtpThemeAccentOneNote: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016OneNoteBlack); break; case xtpThemeAccentOutlook: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016OutlookBlack); break; case xtpThemeAccentPowerPoint: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016PowerPointBlack); break; case xtpThemeAccentPublisher: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016PublisherBlack); break; case xtpThemeAccentWord: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016WordBlack); break; } } break; case xtpThemeColor2016White: { switch (nAccent) { case xtpThemeAccentAccess: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016AccessWhite); break; case xtpThemeAccentExcel: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016ExcelWhite); break; case xtpThemeAccentOneNote: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016OneNoteWhite); break; case xtpThemeAccentOutlook: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016OutlookWhite); break; case xtpThemeAccentPowerPoint: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016PowerPointWhite); break; case xtpThemeAccentPublisher: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016PublisherWhite); break; case xtpThemeAccentWord: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016WordWhite); break; } } break; case xtpThemeColor2016Colorful: { switch (nAccent) { case xtpThemeAccentAccess: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016AccessColorful); break; case xtpThemeAccentExcel: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016ExcelColorful); break; case xtpThemeAccentOneNote: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016OneNoteColorful); break; case xtpThemeAccentOutlook: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016OutlookColorful); break; case xtpThemeAccentPowerPoint: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016PowerPointColorful); break; case xtpThemeAccentPublisher: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016PublisherColorful); break; case xtpThemeAccentWord: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016WordColorful); break; } } break; case xtpThemeColor2016GrayDark: { switch (nAccent) { case xtpThemeAccentAccess: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016AccessDarkGray); break; case xtpThemeAccentExcel: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016ExcelDarkGray); break; case xtpThemeAccentOneNote: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016OneNoteDarkGray); break; case xtpThemeAccentOutlook: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016OutlookDarkGray); break; case xtpThemeAccentPowerPoint: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016PowerPointDarkGray); break; case xtpThemeAccentPublisher: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016PublisherDarkGray); break; case xtpThemeAccentWord: pMainFrame->SetTheme(xtpThemeOffice2013, xtpIniOffice2016WordDarkGray); break; } } break; } CXTPGridView::SetTheme(xtpGridThemeOffice2013, TRUE); } break; case xtpThemeDlgVisualStudio2015: { CPostRedraw pr(pMainFrame); switch (nColor) { case xtpThemeColor2015Blue: pMainFrame->SetTheme(xtpThemeVisualStudio2015, xtpIniVisualStudio2015Blue); break; case xtpThemeColor2015Dark: pMainFrame->SetTheme(xtpThemeVisualStudio2015, xtpIniVisualStudio2015Dark); break; case xtpThemeColor2015Light: pMainFrame->SetTheme(xtpThemeVisualStudio2015, xtpIniVisualStudio2015Light); break; } CXTPGridView::SetTheme(xtpGridThemeVisualStudio2015, TRUE); } break; case xtpThemeDlgVisualStudio2017: { CPostRedraw pr(pMainFrame); switch (nColor) { case xtpThemeColor2017Blue: pMainFrame->SetTheme(xtpThemeVisualStudio2017, xtpIniVisualStudio2017Blue); break; case xtpThemeColor2017BlueExtra: pMainFrame->SetTheme(xtpThemeVisualStudio2017, xtpIniVisualStudio2017BlueExtra); break; case xtpThemeColor2017Dark: pMainFrame->SetTheme(xtpThemeVisualStudio2017, xtpIniVisualStudio2017Dark); break; case xtpThemeColor2017Light: pMainFrame->SetTheme(xtpThemeVisualStudio2017, xtpIniVisualStudio2017Light); break; } CXTPGridView::SetTheme(xtpGridThemeVisualStudio2017, TRUE); } break; case xtpThemeDlgVisualStudio2019: { CPostRedraw pr(pMainFrame); switch (nColor) { case xtpThemeColor2019Blue: pMainFrame->SetTheme(xtpThemeVisualStudio2019, xtpIniVisualStudio2019Blue); break; case xtpThemeColor2019BlueExtra: pMainFrame->SetTheme(xtpThemeVisualStudio2019, xtpIniVisualStudio2019BlueExtra); break; case xtpThemeColor2019Dark: pMainFrame->SetTheme(xtpThemeVisualStudio2019, xtpIniVisualStudio2019Dark); break; case xtpThemeColor2019Light: pMainFrame->SetTheme(xtpThemeVisualStudio2019, xtpIniVisualStudio2019Light); break; } CXTPGridView::SetTheme(xtpGridThemeVisualStudio2019, TRUE); } break; case xtpThemeDlgVisualStudio2022: { CPostRedraw pr(pMainFrame); switch (nColor) { case xtpThemeColor2022Blue: pMainFrame->SetTheme(xtpThemeVisualStudio2022, xtpIniVisualStudio2022Blue); break; case xtpThemeColor2022BlueExtra: pMainFrame->SetTheme(xtpThemeVisualStudio2022, xtpIniVisualStudio2022BlueExtra); break; case xtpThemeColor2022Dark: pMainFrame->SetTheme(xtpThemeVisualStudio2022, xtpIniVisualStudio2022Dark); break; case xtpThemeColor2022Light: pMainFrame->SetTheme(xtpThemeVisualStudio2022, xtpIniVisualStudio2022Light); break; } CXTPGridView::SetTheme(xtpGridThemeVisualStudio2022, TRUE); } break; case xtpThemeDlgNativeWindows10: { CPostRedraw pr(pMainFrame); switch (nColor) { case xtpThemeColorWindows10Dark: XTPGetApplication()->SetAmbientProperty(xtpApplicationAccentColor, static_cast(nAccent)); pMainFrame->SetTheme(xtpThemeNativeWindows10, xtpIniWindows10Dark); break; case xtpThemeColorWindows10Light: XTPGetApplication()->SetAmbientProperty(xtpApplicationAccentColor, static_cast(nAccent)); pMainFrame->SetTheme(xtpThemeNativeWindows10, xtpIniWindows10Light); break; } CXTPGridView::SetTheme(xtpGridThemeNativeWindows10, TRUE); } break; case xtpThemeDlgNativeWindows11: { CPostRedraw pr(pMainFrame); switch (nColor) { case xtpThemeColorWindows11Dark: pMainFrame->SetTheme(xtpThemeNativeWindows11, xtpIniWindows11Dark); break; case xtpThemeColorWindows10Light: pMainFrame->SetTheme(xtpThemeNativeWindows11, xtpIniWindows11Light); break; } CXTPGridView::SetTheme(xtpGridThemeNativeWindows11, TRUE); } break; case int(xtpThemeDlgCustom + 1): // Office 2003 (Luna) { pMainFrame->SetTheme(xtpThemeOffice2003); CXTPGridView::SetTheme(xtpGridThemeOffice2003Luna); } break; case int(xtpThemeDlgCustom + 2): // Explorer { pMainFrame->SetTheme(xtpThemeNativeWinXP); CXTPGridView::SetTheme(xtpGridThemeExplorer); } break; case int(xtpThemeDlgCustom + 3): // Test Paint Manager { pMainFrame->SetTheme(xtpThemeOffice2000); GetGridCtrl().SetPaintManager(new CTestGridPaintManager()); } break; } UpdateGridIcons(); ShowReadOnlyLockIcons(m_bShowReadOnlyLockIcons); return 0; } #if defined(_XTP_INCLUDE_SKINFRAMEWORK) && !defined(_XTP_EXCLUDE_SKINFRAMEWORK) void CGridSampleView::SetSkin(CGridSampleApp::AppSkin skin) { // Set the theme to Office XP so it is obvious the skin has // been applied to the application. THEME_COLOR theme(xtpThemeDlgOfficeXP); OnThemeChanged(0, XTPToLPARAM(&theme)); TCHAR szPath[MAX_PATH + 1]; ::GetModuleFileName(NULL, szPath, _countof(szPath)); ::PathRemoveFileSpec(szPath); theApp.m_skin = skin; switch (skin) { case CGridSampleApp::skinNone: XTPSkinManager()->LoadSkin(NULL, NULL); break; case CGridSampleApp::skinOffice2007: ::PathAppend(szPath, _T("Styles\\Office2007.cjstyles")); VERIFY(XTPSkinManager()->LoadSkin(szPath)); break; case CGridSampleApp::skinOffice2010: ::PathAppend(szPath, _T("Styles\\Office2010.cjstyles")); VERIFY(XTPSkinManager()->LoadSkin(szPath)); break; case CGridSampleApp::skinVista: ::PathAppend(szPath, _T("Styles\\Vista.cjstyles")); VERIFY(XTPSkinManager()->LoadSkin(szPath)); break; } } # define IMPLEMENT_APPSKIN(Skin) \ void CGridSampleView::OnViewSkin##Skin() \ { \ SetSkin(CGridSampleApp::skin##Skin); \ } \ void CGridSampleView::OnUpdateViewSkin##Skin(CCmdUI* pCmdUI) \ { \ pCmdUI->SetCheck(CGridSampleApp::skin##Skin == theApp.m_skin ? 1 : 0); \ } IMPLEMENT_APPSKIN(None) IMPLEMENT_APPSKIN(Office2007) IMPLEMENT_APPSKIN(Office2010) IMPLEMENT_APPSKIN(Vista) #endif void CGridSampleView::ShowReadOnlyLockIcons(BOOL bShow) { GetGridCtrl().GetPaintManager()->m_bShowLockIcon = bShow; // GetGridCtrl().GetPaintManager()->m_bUseShellIcon = bShow; } void CGridSampleView::UpdateGridIcons() { CXTPGridControl* pWndGrid = &GetGridCtrl(); ASSERT_VALID(pWndGrid); if (!pWndGrid) return; pWndGrid->GetImageManager()->RemoveAll(); int nWidth = 0; CString type = _T("RT_SVG"); CXTPImageManager* imgMgr = pWndGrid->GetImageManager(); nWidth = XTP_DPI_X(16); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_SMALL_DOCUMENT, 0, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_SMALL_EXCLAMATION_BLUE, 1, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_SMALL_BOOKMARK, 2, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_SMALL_MAIL, 3, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_SMALL_MAIL_OPEN, 4, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_SMALL_MAIL_ARROW_LEFT, 5, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_SMALL_EXCLAMATION_RED, 6, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_SMALL_PIN_BLUE, 7, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_SMALL_PIN_RED, 8, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_SMALL_BUTTON_ARROW_DOWN, 9, nWidth); nWidth = XTP_DPI_X(32); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_LARGE_DOCUMENT, 0, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_LARGE_EXCLAMATION_BLUE, 1, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_LARGE_BOOKMARK, 2, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_LARGE_MAIL, 3, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_LARGE_MAIL_OPEN, 4, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_LARGE_MAIL_ARROW_LEFT, 5, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_LARGE_EXCLAMATION_RED, 6, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_LARGE_PIN_BLUE, 7, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_LARGE_PIN_RED, 8, nWidth); imgMgr->SetVectorIcon(type, IDR_SVG_GRID_LARGE_BUTTON_ARROW_DOWN, 9, nWidth); } // Before self destroying destroy all child forms void CGridSampleView::OnDestroy() { SaveGridState(); if (m_pTaskFrame) m_pTaskFrame->DestroyWindow(); if (m_pPropertiesFrame) m_pPropertiesFrame->DestroyWindow(); if (m_pHeaderFooterFrame) m_pHeaderFooterFrame->DestroyWindow(); if (m_pWndMerge) { m_pWndMerge->DestroyWindow(); } if (m_pWndSelection) { m_pWndSelection->DestroyWindow(); } CView::OnDestroy(); } // Preview is a text message which is shown for every row, // if GridControl is in Preview mode. // In this sample preview text is equal to Message text, // but it doesn't have to be always used in such way void CGridSampleView::OnEnablePreview() { GetGridCtrl().EnablePreviewMode(!GetGridCtrl().IsPreviewMode()); GetGridCtrl().Populate(); } void CGridSampleView::OnUpdateEnablePreview(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsPreviewMode()); } void CGridSampleView::OnGroupBy() { GetGridCtrl().ShowGroupBy(!GetGridCtrl().IsGroupByVisible()); } void CGridSampleView::OnUpdateGroupBy(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsGroupByVisible()); } void CGridSampleView::OnGridMarkup() { CXTPMarkupContext* pMarkupContext = GetGridCtrl().GetMarkupContext(); BOOL bEnabled = pMarkupContext != NULL; bEnabled = !bEnabled; // enable ALL GetGridCtrl().EnableMarkup(bEnabled); pMarkupContext = GetGridCtrl().GetMarkupContext(); if (pMarkupContext) { pMarkupContext->SetDefaultSmoothingMode(xtpMarkupSmoothingHighQuality); pMarkupContext->SetDefaultTextSmoothing(TRUE); GetGridCtrl().GetColumns()->GetAt(COLUMN_SUBJECT)->SetCaption(cstrMarkupShortSample); GetGridCtrl() .GetRecords() ->GetAt(9) ->GetItem(COLUMN_SUBJECT) ->SetCaption(cstrMarkupShortSample); GetGridCtrl().GetRecords()->GetAt(9)->GetItemPreview()->SetCaption(cstrMarkupLongSample); GetGridCtrl().RedrawControl(); } else { GetGridCtrl().GetColumns()->GetAt(COLUMN_SUBJECT)->SetCaption(_T("Subject")); GetGridCtrl() .GetRecords() ->GetAt(9) ->GetItem(COLUMN_SUBJECT) ->SetCaption(_T("[Codejock] Newsletter")); GetGridCtrl().GetRecords()->GetAt(9)->GetItemPreview()->SetCaption( _T("An in-between week here at Codejock. VSLive was last week, TechEd is in a couple ") _T("of weeks; Last month's article winners have been awarded and this month's voting ") _T("is just starting; Last week was Winter and this week is forecast to be Summer. It ") _T("makes a developer want to just kick back and crank some code right? Right?")); GetGridCtrl().RedrawControl(); } } void CGridSampleView::OnUpdateTestMarkup(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetMarkupContext() != NULL); } // Toggles shady style for group heading void CGridSampleView::OnGroupShade() { GetGridCtrl().ShadeGroupHeadings(!GetGridCtrl().IsShadeGroupHeadingsEnabled()); } void CGridSampleView::OnUpdateGroupShade(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsShadeGroupHeadingsEnabled()); } // Toggles bold style for group heading void CGridSampleView::OnGroupBold() { GetGridCtrl().SetGroupRowsBold(!GetGridCtrl().IsGroupRowsBold()); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateGroupBold(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsGroupRowsBold()); } void CGridSampleView::OnAutoGrouping() { if (GetGridCtrl().GetColumns()->GetGroupsOrder()->GetCount() == 0) { CXTPGridColumn* pColFrom = GetGridCtrl().GetColumns()->Find(COLUMN_FROM); GetGridCtrl().GetColumns()->GetGroupsOrder()->Clear(); GetGridCtrl().GetColumns()->GetGroupsOrder()->Add(pColFrom); } else { GetGridCtrl().GetColumns()->GetGroupsOrder()->Clear(); } GetGridCtrl().Populate(); } void CGridSampleView::OnUpdateAutoGrouping(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetColumns()->GetGroupsOrder()->GetCount() > 0); } void CGridSampleView::OnInitialUpdate() { CView::OnInitialUpdate(); CMainFrame* pWnd = (CMainFrame*)AfxGetMainWnd(); if (m_wndSubList.GetSafeHwnd() == NULL) { m_wndSubList.SubclassDlgItem(IDC_COLUMNLIST, &pWnd->m_wndFieldChooser); GetGridCtrl().GetColumns()->GetGridHeader()->SetSubListCtrl(&m_wndSubList); } if (m_wndFilterEdit.GetSafeHwnd() == NULL) { m_wndFilterEdit.SubclassDlgItem(IDC_FILTEREDIT, &pWnd->m_wndFilterEdit); GetGridCtrl().GetColumns()->GetGridHeader()->SetFilterEditCtrl(&m_wndFilterEdit); } ShowReadOnlyLockIcons(m_bShowReadOnlyLockIcons); } void CGridSampleView::LoadGridState() { #ifdef XML_STATE CXTPPropExchangeXMLNode px(TRUE, 0, _T("GridControl")); if (!px.LoadFromFile(_T("c:\\GridControl.xml"))) return; GetGridCtrl().DoPropExchange(&px); CXTPPropExchangeSection secOthers(px.GetSection(_T("Others"))); BOOL bMultilineSample = FALSE; PX_Bool(&secOthers, _T("MultilineSample"), bMultilineSample, FALSE); m_bMultilineSample = !bMultilineSample; OnGridControlMultilineSample(); #else UINT nBytes = 0; LPBYTE pData = 0; if (!AfxGetApp()->GetProfileBinary(_T("GridControl"), _T("State"), &pData, &nBytes)) return; CMemFile memFile(pData, nBytes); CArchive ar(&memFile, CArchive::load); try { GetGridCtrl().SerializeState(ar); } catch (COleException* pEx) { pEx->Delete(); } catch (CArchiveException* pEx) { pEx->Delete(); } ar.Close(); memFile.Close(); delete[] pData; // others m_bMultilineSample = !AfxGetApp()->GetProfileInt(_T("GridControl"), _T("MultilineSample"), 0); OnGridControlMultilineSample(); #endif } void CGridSampleView::SaveGridState() { #ifdef XML_STATE CXTPPropExchangeXMLNode px(FALSE, 0, _T("GridControl")); GetGridCtrl().DoPropExchange(&px); CXTPPropExchangeSection secOthers(px.GetSection(_T("Others"))); BOOL bMultilineSample = m_bMultilineSample; PX_Bool(&secOthers, _T("MultilineSample"), bMultilineSample, FALSE); // Save All Records // CXTPPropExchangeSection secRecords(px.GetSection(_T("Records"))); // GetGridCtrl().GetRecords()->DoPropExchange(&secRecords); px.SaveToFile(_T("c:\\GridControl.xml")); #else CMemFile memFile; CArchive ar(&memFile, CArchive::store); GetGridCtrl().SerializeState(ar); ar.Flush(); DWORD nBytes = (DWORD)memFile.GetPosition(); LPBYTE pData = memFile.Detach(); AfxGetApp()->WriteProfileBinary(_T("GridControl"), _T("State"), pData, nBytes); ar.Close(); memFile.Close(); free(pData); AfxGetApp()->WriteProfileInt(_T("GridControl"), _T("MultilineSample"), m_bMultilineSample); #endif } #define ID_REMOVE_ITEM 1 #define ID_SORT_ASC 2 #define ID_SORT_DESC 3 #define ID_SORT_NO 99 #define ID_GROUP_BYTHIS 4 #define ID_SHOW_GROUPBOX 5 #define ID_SHOW_FIELDCHOOSER 6 #define ID_COLUMN_BESTFIT 7 #define ID_COLUMN_ARRANGEBY 100 #define ID_COLUMN_ALIGMENT 200 #define ID_COLUMN_ALIGMENT_TEXT 210 #define ID_COLUMN_ALIGMENT_LEFT 211 #define ID_COLUMN_ALIGMENT_RIGHT 212 #define ID_COLUMN_ALIGMENT_CENTER 213 #define ID_COLUMN_ALIGMENT_ICON 220 #define ID_COLUMN_ICON_ALIGMENT_LEFT 221 #define ID_COLUMN_ICON_ALIGMENT_RIGHT 222 #define ID_COLUMN_ICON_ALIGMENT_CENTER 223 #define ID_COLUMN_SHOW 500 CString LoadResourceString(UINT nID) { CString str; VERIFY(str.LoadString(nID)); return str; } // When user does a right click on column header, generate popup menu // Procedure contains handlers of pressing all buttons in popup menu void CGridSampleView::OnGridColumnRClick(NMHDR* pNotifyStruct, LRESULT* /*result*/) { XTP_NM_GRIDRECORDITEM* pItemNotify = (XTP_NM_GRIDRECORDITEM*)pNotifyStruct; _ASSERTE(pItemNotify->pColumn); CPoint ptClick = pItemNotify->pt; CMenu menu; VERIFY(menu.CreatePopupMenu()); // create main menu items menu.AppendMenu(MF_STRING, ID_SORT_ASC, LoadResourceString(IDS_SORTASC)); menu.AppendMenu(MF_STRING, ID_SORT_DESC, LoadResourceString(IDS_SORTDESC)); menu.AppendMenu(MF_STRING, ID_SORT_NO, LoadResourceString(IDS_SORT_NO)); menu.AppendMenu(MF_SEPARATOR, (UINT)-1, (LPCTSTR)NULL); menu.AppendMenu(MF_STRING, ID_GROUP_BYTHIS, LoadResourceString(IDS_GROUPBYFIELD)); menu.AppendMenu(MF_STRING, ID_SHOW_GROUPBOX, LoadResourceString(IDS_GROUPBYBOX)); menu.AppendMenu(MF_SEPARATOR, (UINT)-1, (LPCTSTR)NULL); menu.AppendMenu(MF_STRING, ID_REMOVE_ITEM, LoadResourceString(IDS_REMOVECOL)); menu.AppendMenu(MF_STRING, ID_SHOW_FIELDCHOOSER, LoadResourceString(IDS_FIELDCHOOSER)); menu.AppendMenu(MF_SEPARATOR, (UINT)-1, (LPCTSTR)NULL); menu.AppendMenu(MF_STRING, ID_COLUMN_BESTFIT, LoadResourceString(IDS_BESTFIT)); if (GetGridCtrl().IsGroupByVisible()) { menu.CheckMenuItem(ID_SHOW_GROUPBOX, MF_BYCOMMAND | MF_CHECKED); } if (GetGridCtrl().GetGridHeader()->IsShowItemsInGroups()) { menu.EnableMenuItem(ID_GROUP_BYTHIS, MF_BYCOMMAND | MF_DISABLED); } CXTPGridColumns* pColumns = GetGridCtrl().GetColumns(); CXTPGridColumn* pColumn = pItemNotify->pColumn; // create arrange by items CMenu menuArrange; VERIFY(menuArrange.CreatePopupMenu()); int nColumnCount = pColumns->GetCount(); int nColumn; for (nColumn = 0; nColumn < nColumnCount; nColumn++) { CXTPGridColumn* pCol = pColumns->GetAt(nColumn); if (pCol && pCol->IsVisible()) { CString sCaption = pCol->GetCaption(); if (!sCaption.IsEmpty()) menuArrange.AppendMenu(MF_STRING, ID_COLUMN_ARRANGEBY + nColumn, sCaption); } } menuArrange.AppendMenu(MF_SEPARATOR, 60, (LPCTSTR)NULL); menuArrange.AppendMenu(MF_STRING, ID_COLUMN_ARRANGEBY + nColumnCount, LoadResourceString(IDS_SHOWINGROUPS)); menuArrange.CheckMenuItem(ID_COLUMN_ARRANGEBY + nColumnCount, MF_BYCOMMAND | ((GetGridCtrl().GetGridHeader()->IsShowItemsInGroups()) ? MF_CHECKED : MF_UNCHECKED)); menu.InsertMenu(0, MF_BYPOSITION | MF_POPUP, (UINT_PTR)menuArrange.m_hMenu, LoadResourceString(IDS_ARRANGEBY)); // create columns items CMenu menuColumns; VERIFY(menuColumns.CreatePopupMenu()); for (nColumn = 0; nColumn < nColumnCount; nColumn++) { CXTPGridColumn* pCol = pColumns->GetAt(nColumn); CString sCaption = pCol->GetCaption(); // if (!sCaption.IsEmpty()) menuColumns.AppendMenu(MF_STRING, ID_COLUMN_SHOW + nColumn, sCaption); menuColumns.CheckMenuItem(ID_COLUMN_SHOW + nColumn, MF_BYCOMMAND | (pCol->IsVisible() ? MF_CHECKED : MF_UNCHECKED)); } menu.InsertMenu(0, MF_BYPOSITION | MF_POPUP, (UINT_PTR)menuColumns.m_hMenu, LoadResourceString(IDS_COLUMNS)); // create alignment submenu CMenu menuAlign; VERIFY(menuAlign.CreatePopupMenu()); //// create Text alignment menu CMenu menuAlignText; VERIFY(menuAlignText.CreatePopupMenu()); menuAlignText.AppendMenu(MF_STRING, ID_COLUMN_ALIGMENT_LEFT, LoadResourceString(IDS_ALIGNLEFT)); menuAlignText.AppendMenu(MF_STRING, ID_COLUMN_ALIGMENT_RIGHT, LoadResourceString(IDS_ALIGNRIGHT)); menuAlignText.AppendMenu(MF_STRING, ID_COLUMN_ALIGMENT_CENTER, LoadResourceString(IDS_ALIGNCENTER)); int nAlignOption = 0; switch (pColumn->GetAlignment() & xtpColumnTextMask) { case xtpColumnTextLeft: nAlignOption = ID_COLUMN_ALIGMENT_LEFT; break; case xtpColumnTextRight: nAlignOption = ID_COLUMN_ALIGMENT_RIGHT; break; case xtpColumnTextCenter: nAlignOption = ID_COLUMN_ALIGMENT_CENTER; break; } menuAlignText.CheckMenuItem(nAlignOption, MF_BYCOMMAND | MF_CHECKED); menuAlign.InsertMenu(1, MF_BYPOSITION | MF_POPUP, (UINT_PTR)menuAlignText.m_hMenu, LoadResourceString(IDS_TEXT)); //// create Icon alignment menu CMenu menuAlignIcon; VERIFY(menuAlignIcon.CreatePopupMenu()); menuAlignIcon.AppendMenu(MF_STRING, ID_COLUMN_ICON_ALIGMENT_LEFT, LoadResourceString(IDS_ALIGNLEFT)); menuAlignIcon.AppendMenu(MF_STRING, ID_COLUMN_ICON_ALIGMENT_RIGHT, LoadResourceString(IDS_ALIGNRIGHT)); menuAlignIcon.AppendMenu(MF_STRING, ID_COLUMN_ICON_ALIGMENT_CENTER, LoadResourceString(IDS_ALIGNCENTER)); nAlignOption = 0; switch (pColumn->GetAlignment() & xtpColumnIconMask) { case xtpColumnIconLeft: nAlignOption = ID_COLUMN_ICON_ALIGMENT_LEFT; break; case xtpColumnIconRight: nAlignOption = ID_COLUMN_ICON_ALIGMENT_RIGHT; break; case xtpColumnIconCenter: nAlignOption = ID_COLUMN_ICON_ALIGMENT_CENTER; break; } menuAlignIcon.CheckMenuItem(nAlignOption, MF_BYCOMMAND | MF_CHECKED); menuAlign.InsertMenu(2, MF_BYPOSITION | MF_POPUP, (UINT_PTR)menuAlignIcon.m_hMenu, LoadResourceString(IDS_ICON)); /// menu.InsertMenu(11, MF_BYPOSITION | MF_POPUP, (UINT_PTR)menuAlign.m_hMenu, LoadResourceString(IDS_ALIGNMENT)); // track menu #ifndef _XTP_INCLUDE_COMMANDBARS int nMenuResult = menu.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_RIGHTBUTTON, ptClick.x, ptClick.y, this, NULL); #else int nMenuResult = CXTPCommandBars::TrackPopupMenu(&menu, TPM_NONOTIFY | TPM_RETURNCMD | TPM_LEFTALIGN | TPM_RIGHTBUTTON, ptClick.x, ptClick.y, this, NULL); #endif // arrange by items if (nMenuResult >= ID_COLUMN_ARRANGEBY && nMenuResult < ID_COLUMN_ALIGMENT) { for (int nColumn = 0; nColumn < nColumnCount; nColumn++) { CXTPGridColumn* pCol = pColumns->GetAt(nColumn); if (pCol && pCol->IsVisible()) { if (nMenuResult == ID_COLUMN_ARRANGEBY + nColumn) { nMenuResult = ID_SORT_ASC; pColumn = pCol; break; } } } // group by item if (ID_COLUMN_ARRANGEBY + nColumnCount == nMenuResult) { GetGridCtrl().GetGridHeader()->ShowItemsInGroups( !GetGridCtrl().GetGridHeader()->IsShowItemsInGroups()); } } // process Alignment options if (nMenuResult > ID_COLUMN_ALIGMENT_TEXT && nMenuResult < ID_COLUMN_ALIGMENT_ICON) { int nAlign = pColumn->GetAlignment(); nAlign &= ~(xtpColumnTextLeft | xtpColumnTextCenter | xtpColumnTextRight); int nHeadAlign = pColumn->GetHeaderAlignment(); nHeadAlign &= ~(xtpColumnTextLeft | xtpColumnTextCenter | xtpColumnTextRight); nHeadAlign |= xtpColumnTextWordBreak; switch (nMenuResult) { case ID_COLUMN_ALIGMENT_LEFT: pColumn->SetAlignment(nAlign | xtpColumnTextLeft); pColumn->SetHeaderAlignment(nHeadAlign | xtpColumnTextLeft); break; case ID_COLUMN_ALIGMENT_RIGHT: pColumn->SetAlignment(nAlign | xtpColumnTextRight); pColumn->SetHeaderAlignment(nHeadAlign | xtpColumnTextRight); break; case ID_COLUMN_ALIGMENT_CENTER: pColumn->SetAlignment(nAlign | xtpColumnTextCenter); pColumn->SetHeaderAlignment(nHeadAlign | xtpColumnTextCenter); break; } GetGridCtrl().AdjustLayout(); } // process Alignment options if (nMenuResult > ID_COLUMN_ALIGMENT_ICON && nMenuResult < ID_COLUMN_SHOW) { int nAlign = pColumn->GetAlignment(); nAlign &= ~(xtpColumnIconLeft | xtpColumnIconCenter | xtpColumnIconRight); int nHeadAlign = pColumn->GetHeaderAlignment(); nHeadAlign &= ~(xtpColumnIconLeft | xtpColumnIconCenter | xtpColumnIconRight); switch (nMenuResult) { case ID_COLUMN_ICON_ALIGMENT_LEFT: pColumn->SetAlignment(nAlign | xtpColumnIconLeft); pColumn->SetHeaderAlignment(nHeadAlign | xtpColumnIconLeft); break; case ID_COLUMN_ICON_ALIGMENT_RIGHT: pColumn->SetAlignment(nAlign | xtpColumnIconRight); pColumn->SetHeaderAlignment(nHeadAlign | xtpColumnIconRight); break; case ID_COLUMN_ICON_ALIGMENT_CENTER: pColumn->SetAlignment(nAlign | xtpColumnIconCenter); pColumn->SetHeaderAlignment(nHeadAlign | xtpColumnIconCenter); break; } } // process column selection item if (nMenuResult >= ID_COLUMN_SHOW) { CXTPGridColumn* pCol = pColumns->GetAt(nMenuResult - ID_COLUMN_SHOW); if (pCol) { pCol->SetVisible(!pCol->IsVisible()); } } // other general items switch (nMenuResult) { case ID_REMOVE_ITEM: pColumn->SetVisible(FALSE); GetGridCtrl().Populate(); break; case ID_SORT_ASC: case ID_SORT_DESC: if (pColumn && pColumn->IsSortable()) { pColumns->SetSortColumn(pColumn, nMenuResult == ID_SORT_ASC); GetGridCtrl().Populate(); } break; case ID_SORT_NO: pColumns->GetSortOrder()->Clear(); break; case ID_GROUP_BYTHIS: if (pColumns->GetGroupsOrder()->IndexOf(pColumn) < 0) { pColumns->GetGroupsOrder()->Add(pColumn); } GetGridCtrl().ShowGroupBy(TRUE); GetGridCtrl().Populate(); break; case ID_SHOW_GROUPBOX: GetGridCtrl().ShowGroupBy(!GetGridCtrl().IsGroupByVisible()); break; case ID_SHOW_FIELDCHOOSER: OnShowFieldChooser(); break; case ID_COLUMN_BESTFIT: GetGridCtrl().GetColumns()->GetGridHeader()->BestFit(pColumn); break; } GetGridCtrl().AdjustScrollBars(); } BOOL IsSet(int nReason, int nFlag) { return (nFlag == (nFlag & nReason)); } void CGridSampleView::OnGridGroupOrderChanged(NMHDR* pNotifyStruct, LRESULT* pResult) { XTP_NM_GRIDCOLUMNORDERCHANGED* pItemNotify = reinterpret_cast( pNotifyStruct); BOOL bColumnGroupOrderChanged = IsSet(pItemNotify->nReason, xtpGridColumnGroupOrderChanged); BOOL bColumnRemovedFromGroupby = IsSet(pItemNotify->nReason, xtpGridColumnRemovedFromGroupby); } void CGridSampleView::OnGridGiveFeedback(NMHDR* pNotifyStruct, LRESULT* pResult) { XTP_NM_GRIDGIVEFEEDBACK* pItemNotify = reinterpret_cast( pNotifyStruct); switch (pItemNotify->dropEffect) { case DROPEFFECT_NONE: break; case DROPEFFECT_COPY: break; case DROPEFFECT_MOVE: // SetCursor(LoadCursor(NULL,IDC_CROSS)); *pResult = 1; break; case DROPEFFECT_LINK: break; } } void CGridSampleView::OnGridBeginDrag(NMHDR* /*pNotifyStruct*/, LRESULT* /*result*/) { } // When user does a right click on row with a group name, generate popup menu // Procedure contains handlers of pressing all buttons in popup menu void CGridSampleView::OnGridItemRClick(NMHDR* pNotifyStruct, LRESULT* /*result*/) { XTP_NM_GRIDRECORDITEM* pItemNotify = (XTP_NM_GRIDRECORDITEM*)pNotifyStruct; if (!pItemNotify->pRow) return; CMenu menu; if (pItemNotify->pRow->IsGroupRow()) { VERIFY(menu.LoadMenu(IDR_MENU_CONTEXT_GROUP)); } else { VERIFY(menu.LoadMenu(IDR_MENU_CONTEXT_ROW)); } // track menu #ifndef _XTP_INCLUDE_COMMANDBARS int nMenuResult = menu.GetSubMenu(0)->TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_RIGHTBUTTON, pItemNotify->pt.x, pItemNotify->pt.y, this, NULL); #else int nMenuResult = CXTPCommandBars::TrackPopupMenu(menu.GetSubMenu(0), TPM_NONOTIFY | TPM_RETURNCMD | TPM_LEFTALIGN | TPM_RIGHTBUTTON, pItemNotify->pt.x, pItemNotify->pt.y, this, NULL); #endif // general items processing switch (nMenuResult) { case ID_POPUP_COLLAPSEALLGROUPS: { pItemNotify->pRow->GetControl()->CollapseAll(); break; } case ID_POPUP_EXPANDALLGROUPS: { pItemNotify->pRow->GetControl()->ExpandAll(); break; } case ID_POPUP_MARK_READ: { CMessageRecord* pRecord = DYNAMIC_DOWNCAST(CMessageRecord, pItemNotify->pRow->GetRecord()); if (pRecord->SetRead(TRUE)) { GetGridCtrl().Populate(); } break; } case ID_POPUP_MARK_UNREAD: { CMessageRecord* pRecord = DYNAMIC_DOWNCAST(CMessageRecord, pItemNotify->pRow->GetRecord()); if (pRecord->SetRead(FALSE)) { GetGridCtrl().Populate(); } break; } } } // Set reaction on clicking hyperlink in some of GridControl cells void CGridSampleView::OnGridHyperlinkClick(NMHDR* pNotifyStruct, LRESULT* /*result*/) { XTP_NM_GRIDRECORDITEM* pItemNotify = (XTP_NM_GRIDRECORDITEM*)pNotifyStruct; if (!pItemNotify->pRow || !pItemNotify->pColumn) return; // if click on Hyperlink in Item if (pItemNotify->nHyperlink >= 0) TRACE(_T("Hyperlink Click : \n row %d \n col %d \n Hyperlink %d\n"), pItemNotify->pRow->GetIndex(), pItemNotify->pColumn->GetItemIndex(), pItemNotify->nHyperlink); } // Handles clicking GridControl row. // If "Checked" item is clicked, change "Checked" attribute for current record void CGridSampleView::OnGridItemClick(NMHDR* pNotifyStruct, LRESULT* /*result*/) { XTP_NM_GRIDRECORDITEM* pItemNotify = (XTP_NM_GRIDRECORDITEM*)pNotifyStruct; if (!pItemNotify->pRow || !pItemNotify->pColumn) return; TRACE(_T("Click on row %d, col %d\n"), pItemNotify->pRow->GetIndex(), pItemNotify->pColumn->GetItemIndex()); // MD - another way to fix wrong reaction on column checkbox click - comment line // GetGridCtrl().Populate(); instead of adding condition if (!bCheckBoxClicked)in function // CXTPGridRecordItem::OnClick if (pItemNotify->pColumn->GetItemIndex() == COLUMN_CHECK) { // GetGridCtrl().Populate(); // Here we can have more reasonable reaction on Checked / Unchecked field state changed } } // Handles key pressing. If pressed key is RETURN, then change "Read" attribute // of current record to True. // Keys like Up/Down are handled by the control itself with the // default behavior. void CGridSampleView::OnGridKeyDown(NMHDR* pNotifyStruct, LRESULT* /*result*/) { LPNMKEY lpNMKey = (LPNMKEY)pNotifyStruct; if (!GetGridCtrl().GetFocusedRow()) return; if (lpNMKey->nVKey == VK_RETURN) { CMessageRecord* pRecord = DYNAMIC_DOWNCAST(CMessageRecord, GetGridCtrl().GetFocusedRow()->GetRecord()); if (pRecord) { if (pRecord->SetRead(TRUE)) { GetGridCtrl().Populate(); } } } } // Handles double clicking GridControl item. // If "Read" attribute is False, changes it to True void CGridSampleView::OnGridItemDblClick(NMHDR* pNotifyStruct, LRESULT* /*result*/) { XTP_NM_GRIDRECORDITEM* pItemNotify = (XTP_NM_GRIDRECORDITEM*)pNotifyStruct; if (pItemNotify->pRow) { TRACE(_T("Double Click on row %d\n"), pItemNotify->pRow->GetIndex()); CMessageRecord* pRecord = DYNAMIC_DOWNCAST(CMessageRecord, pItemNotify->pRow->GetRecord()); if (pRecord) { if (pRecord->SetRead(TRUE)) { GetGridCtrl().Populate(); } } } } // FieldChooser is used to add or remove fields (i.e. columns) using drag-and-drop. // FieldChooser is an analog of a pool with column headers of none-used columns void CGridSampleView::OnShowFieldChooser() { CMainFrame* pMainFrm = (CMainFrame*)AfxGetMainWnd(); if (pMainFrm) { BOOL bShow = !pMainFrm->m_wndFieldChooser.IsVisible(); pMainFrm->ShowControlBar(&pMainFrm->m_wndFieldChooser, bShow, FALSE); } } // Tree View form demonstrates how hierarchy of GridControl rows is shown in "tree" style void CGridSampleView::OnTreeViewDlg() { CTreeViewDlg dlgTreeView; dlgTreeView.DoModal(); } // Tree Edit form demonstrates how hierarchy of GridControl rows is edited in "tree" style void CGridSampleView::OnTreeEditDlg() { CTreeEditDlg dlgTreeEdit; dlgTreeEdit.DoModal(); } // Formula form demonstrates how grouprow and formulas work void CGridSampleView::OnFormulaDlg() { CFormulaDlg dlgFormula; dlgFormula.DoModal(); } ///////////////////////////////////////////////////////////////////////////// // Quality assurance ///////////////////////////////////////////////////////////////////////////// void CGridSampleView::OnTestEmpty() { CEmptyDlg dlgEmpty; dlgEmpty.DoModal(); } void CGridSampleView::OnTestConstraints() { CConstraintsDlg dlgConstraints; dlgConstraints.DoModal(); } void CGridSampleView::OnTestNotifications() { CTestNotificationsDlg dlgNotifications; dlgNotifications.DoModal(); } void CGridSampleView::OnTestPopup() { CTestPopupDlg dlgPopup; dlgPopup.DoModal(); } void CGridSampleView::OnTestAlternateBackground() { CTestAlternateBackgroundDlg dlgAlternateBackground; dlgAlternateBackground.DoModal(); } void CGridSampleView::OnTestDragDrop() { CTestDragDropDlg dlgDragDrop; dlgDragDrop.DoModal(); } void CGridSampleView::OnTestHitTest() { CTestHitTestDlg dlgHitTest; dlgHitTest.DoModal(); } void CGridSampleView::OnTestHeaderAlignment() { CTestHeaderAlignmentDlg dlgHeaderAlignment; dlgHeaderAlignment.DoModal(); } void CGridSampleView::OnTestComboBox() { CTestComboBoxDlg dlgComboBox; dlgComboBox.DoModal(); } void CGridSampleView::OnTestItemTypes() { CTestItemTypesDlg dlgItemTypes; dlgItemTypes.DoModal(); } void CGridSampleView::OnTestMarkup() { CTestMarkupDlg dlgMarkup; dlgMarkup.DoModal(); } void CGridSampleView::OnTestEnsureVisible() { CTestEnsureVisibleDlg dlgEnsureVisible; dlgEnsureVisible.DoModal(); } void CGridSampleView::OnTestColumns() { CTestColumnsDlg dlgColumns; dlgColumns.DoModal(); } void CGridSampleView::OnTestExpand() { CTestExpandDlg dlgExpand; dlgExpand.DoModal(); } // If enabled -- allows automatic formating. void CGridSampleView::OnGridControlAutomaticformattingsample() { m_bAutomaticFormating = !m_bAutomaticFormating; GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateGridControlAutomaticformattingsample(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_bAutomaticFormating); } // Adds a few sample Records to GridControl. void CGridSampleView::AddSampleRecords() { COleDateTime odtSent(COleDateTime::GetCurrentTime()); COleDateTime odtCreated(COleDateTime::GetCurrentTime()); COleDateTime odtReceived(COleDateTime::GetCurrentTime()); CString strFrom; CString strMessage; CString strSubject; CString strEmpty(_T(" ")); CString strForumLink = _T(" ([url]http://www.codejock.com[/url])"); CXTPGridControl& wndGrid = GetGridCtrl(); strFrom = _T("postmaster@mail.codejock.com"); strMessage = _T("Simple Preview Text"); strSubject = _T("Message waiting your approval..."); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, FALSE, FALSE, strFrom, strSubject, odtSent, 7, TRUE, 5, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 0.8; odtReceived -= 0.8; strMessage = _T("Breaks words. Lines are automatically broken between words if a word would ") _T("extend past the edge of the rectangle specified by the lpRect parameter. A ") _T("carriage return-linefeed sequence also breaks the line."); strSubject = _T("Hi Mary Jane"); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, FALSE, FALSE, _T("Peter Parker"), _T("RE: ") + strSubject, odtSent, 14, FALSE, 4.3, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 0.8; odtReceived -= 0.8; strSubject = _T(""); strMessage = _T("If you have several conditions to be tested together, and you know that one ") _T("is more likely to pass or fail than the others, you can use a feature called ") _T("'short circuit evaluation' to speed the execution of your script. When ") _T("JScript evaluates a logical expression, it only evaluates as many ") _T("sub-expressions as required to get a result."); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, TRUE, FALSE, _T("James Howlett"), _T("RE:") + strSubject, odtSent, 24, FALSE, 56, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 0.8; odtReceived -= 0.8; strFrom = _T("Bruce Banner [bbanner@codejock.com]"); strMessage = _T("The MSDN Visual Studio 2015 Library also provides information on the tools ") _T("and technologies available with the Visual Studio suite."); strSubject = _T("Informational tools and technologies"); wndGrid.AddRecord(new CMessageRecord(msgImportanceLow, TRUE, TRUE, strFrom, _T("Re: ") + strSubject, odtSent, 14, TRUE, 12.2, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 0.8; odtReceived -= 0.8; strMessage = _T("The Visual Studio Enterprise Edition includes all of the features available ") _T("with the Visual Studio development tools. When installing the Visual Studio ") _T("Enterprise Edition, you can elect to install enterprise features for use ") _T("with these tools. In addition, Visual Basic and Visual C++ are available in ") _T("separate enterprise editions."); strSubject = _T("Download GDI+ latest version"); wndGrid.AddRecord(new CMessageRecord(msgImportanceHigh, FALSE, FALSE, _T("QueryReply"), _T("Re: ") + strSubject, odtSent, 13, FALSE, 1.345, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 0.8; odtReceived -= 0.8; strMessage = _T("The following table (email_example1@address.com) indicates whether a given ") _T("feature is available with a given tool. If you (email_example2@address.com) ") _T("acquired a separate enterprise edition of Visual Basic or Visual C++, you ") _T("can use this table also to identify which of the Visual Studio enterprise ") _T("features you received with your purchase. (Visual J++ and Visual InterDev ") _T("are not offered as separate enterprise editions.) In addition, some of these ") _T("features are available in professional editions with a subset of their ") _T("enterprise edition functionality."); strSubject = _T("Available features"); wndGrid.AddRecord(new CMessageRecord(msgImportanceLow, TRUE, FALSE, _T("James Howlett"), strSubject, odtSent, 24, FALSE, 5.4321, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 0.8; odtReceived -= 0.8; strMessage = _T("Visual Studio contains many development tools for building your application."); strSubject = _T("Re: WIN32_FIND_DATA help "); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, FALSE, TRUE, _T("Matthew Murdock"), strSubject, odtSent, 14, TRUE, 45, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 8; odtReceived -= 0.8; strMessage = _T("To learn more about how each development tool implements data access, see ") _T("the following documentation topics."); strSubject = _T("Re: Licensing "); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, TRUE, FALSE, _T("Louis Lane"), strSubject, odtSent, 13, TRUE, 0.5, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 8; odtReceived -= 0.8; strMessage = _T("Introduces the Data Access Guide, which discusses data access and provides ") _T("links to information on related tools and technologies."); strSubject = _T("Message waiting your approval..."); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, FALSE, FALSE, _T("postmaster@mail.codejock.com"), strSubject, odtSent, 7, TRUE, 10, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 80; odtReceived -= 0.8; strFrom = _T("Codejock"); strSubject = _T("[Codejock] Newsletter"); strMessage = _T("An in-between week here at Codejock. VSLive was last week, TechEd is in a ") _T("couple of weeks; Last month's article winners have been awarded and this ") _T("month's voting is just starting; Last week was Winter and this week is ") _T("forecast to be Summer. It makes a developer want to just kick back and crank ") _T("some code right? Right?"); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, FALSE, FALSE, strFrom, strSubject, odtSent, 7, TRUE, 10, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 7; strFrom = _T("Codejock Software") + strForumLink; strSubject = _T("Good Answer! Capture message send from Net Send"); strMessage = _T("Congratulations! Your answer has been accepted by SuperMan! You've earned ") _T("720 Expert Points and have been rewarded with a grade of A. These points ") _T("will be added to your overall Expert Point total and to your Expert Point ") _T("total in the Programming Topic Area."); CXTPGridRecord* pRecord = wndGrid.AddRecord( new CMessageRecord(msgImportanceNormal, FALSE, FALSE, strFrom, strSubject, odtSent, 8, FALSE, 720, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 7; odtReceived -= 14; strFrom = _T("Codejock Team"); strSubject = _T("Codejock Sitewide update"); strMessage = _T("You have acquired this Codejock update because you requested to be on the ") _T("list. Honest! An explanation is at the bottom of this email, and also info ") _T("on how to be extracted from the list."); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, FALSE, FALSE, strFrom, strSubject, odtSent, 46, FALSE, 28, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 7; strFrom = _T("Codejock Software"); strSubject = _T("Comment Added: Using a resource dll"); strMessage = _T("A comment has been added to this question by: somebody. Click the following ") _T("URL to read the new comment:"); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, FALSE, FALSE, strFrom, strSubject, odtSent, 5, FALSE, 30, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 7; odtReceived -= 14; strFrom = _T("Bruce Wayne"); strSubject = _T("Comment Added: Fabulous looking Grid control! This is brilliant!"); strMessage = _T("A comment has been added to this question by: Robin. Click the following URL ") _T("to read the new comment:"); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, FALSE, FALSE, strFrom, strSubject, odtSent, 5, FALSE, 20, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 7; strFrom = _T("Codejock Software"); strSubject = _T("Good Answer!: stl containers"); strMessage = _T("Congratulations! Your proposed answer has been accepted by TheBeast! You've ") _T("earned 300 Expert points and have been rewarded with a grade of B."); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, FALSE, FALSE, strFrom, strSubject, odtSent, 4, FALSE, 2, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 7; odtReceived -= 14; strFrom = _T("Codejock Software"); strSubject = _T("Codejock Software: Lost Member Name or Password"); strMessage = _T("You are receiving this email because you reported that you could not ") _T("remember your Codejock Software Member Name or password."); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, FALSE, FALSE, strFrom, strSubject, odtSent, 7, FALSE, 1, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 7; strFrom = _T("Codejock"); strSubject = _T("New projects available on Codejock"); strMessage = _T("New projects are now available for the following on Codejock! * Mathematical ") _T("and Computer Modelling"); wndGrid.AddRecord(new CMessageRecord(msgImportanceNormal, FALSE, FALSE, strFrom, strSubject, odtSent, 9, FALSE, 12, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage)); odtSent -= 7; strFrom = _T("Kyle Rayner"); strSubject = _T("info"); strMessage = _T("OR-Library is a collection of test data sets for a variety of problem areas. ") _T("These test data sets can be accessed via emailing to Codejock a message ") _T("containing the name of the required file, or via ftp/WWW using the addresses ") _T("given at the bottom of this file."); CMessageRecord* pMessage = new CMessageRecord(msgImportanceNormal, FALSE, FALSE, strFrom, strSubject, odtSent, 67, FALSE, 10, odtReceived, odtCreated, strSubject, strEmpty, strMessage, strEmpty, strEmpty, strEmpty, strEmpty, strEmpty, strMessage); wndGrid.AddRecord(pMessage); odtSent -= 7; odtReceived -= 14; } // Set horizontal grid lines style. // Following styles are available: // No Grid lines; // Small dots // Large Dots // Dashes // Solid void CGridSampleView::OnGridHorizontal(UINT nID) { GetGridCtrl().SetGridStyle(FALSE, (XTPGridGridStyle)(nID - ID_GRID_HORIZONTAL_NOGRIDLINES)); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateGridHorizontal(CCmdUI* pCmdUI) { pCmdUI->SetCheck(((int)pCmdUI->m_nID - ID_GRID_HORIZONTAL_NOGRIDLINES) == GetGridCtrl().GetGridStyle(FALSE)); } // Set vertical grid lines style. // Following styles are available: // No Grid lines; // Small dots // Large Dots // Dashes // Solid void CGridSampleView::OnGridVertical(UINT nID) { GetGridCtrl().SetGridStyle(TRUE, (XTPGridGridStyle)(nID - ID_GRID_VERTICAL_NOGRIDLINES)); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateGridVertical(CCmdUI* pCmdUI) { pCmdUI->SetCheck(((int)pCmdUI->m_nID - ID_GRID_VERTICAL_NOGRIDLINES) == GetGridCtrl().GetGridStyle(TRUE)); } // Allow or forbid column resize void CGridSampleView::OnOptionsAllowcolumnresize() { GetGridCtrl().GetGridHeader()->AllowColumnResize( !GetGridCtrl().GetGridHeader()->IsAllowColumnResize()); } void CGridSampleView::OnUpdateOptionsAllowcolumnresize(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetGridHeader()->IsAllowColumnResize()); } // Allow or forbid columns removal void CGridSampleView::OnOptionsAllowcolumnsremove() { GetGridCtrl().GetGridHeader()->AllowColumnRemove( !GetGridCtrl().GetGridHeader()->IsAllowColumnRemove()); } void CGridSampleView::OnUpdateOptionsAllowcolumnsremove(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetGridHeader()->IsAllowColumnRemove()); } // Allow or forbid columns reordering void CGridSampleView::OnGridheaderAllowColumnReorder() { GetGridCtrl().GetGridHeader()->AllowColumnReorder( !GetGridCtrl().GetGridHeader()->IsAllowColumnReorder()); } void CGridSampleView::OnUpdateGridHeaderAllowColumnReorder(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetGridHeader()->IsAllowColumnReorder()); } // Allow or forbid simultaneous selection of several records void CGridSampleView::OnOptionsMultipleselection() { GetGridCtrl().SetMultipleSelection(!GetGridCtrl().IsMultipleSelection()); } void CGridSampleView::OnUpdateOptionsMultipleselection(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsMultipleSelection()); } // Allow or forbid records grouping void CGridSampleView::OnOptionsShowitemsingroups() { GetGridCtrl().GetGridHeader()->ShowItemsInGroups( !GetGridCtrl().GetGridHeader()->IsShowItemsInGroups()); if (!GetGridCtrl().GetGridHeader()->IsShowItemsInGroups()) { GetGridCtrl().GetColumns()->GetGroupsOrder()->Clear(); GetGridCtrl().Populate(); } } void CGridSampleView::OnUpdateOptionsShowitemsingroups(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetGridHeader()->IsShowItemsInGroups()); } void CGridSampleView::OnOptionsShowFooter() { GetGridCtrl().ShowFooter(!GetGridCtrl().IsFooterVisible()); } void CGridSampleView::OnUpdateOptionsShowFooter(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsFooterVisible() ? 1 : 0); } // Allow or forbid automatic columns resizing void CGridSampleView::OnOptionsAutomaticcolumnsizing() { GetGridCtrl().GetGridHeader()->SetAutoColumnSizing( !GetGridCtrl().GetGridHeader()->IsAutoColumnSizing()); #if defined(_XTP_INCLUDE_COMMANDBARS) if (GetGridCtrl().GetGridHeader()->IsAutoColumnSizing()) { SetScrollBarCtrl(NULL, TRUE); m_wndHScrollBar.ShowWindow(SW_HIDE); } else { SetScrollBarCtrl(&m_wndHScrollBar, TRUE); } #endif GetGridCtrl().AdjustScrollBars(); } void CGridSampleView::OnUpdateOptionsAutomaticcolumnsizing(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetGridHeader()->IsAutoColumnSizing()); } void CGridSampleView::OnSetFocus(CWnd* pOldWnd) { CView::OnSetFocus(pOldWnd); GetGridCtrl().SetFocus(); } void CGridSampleView::OnTestSmoothScroll() { if (m_pWndSmoothScroll) { m_pWndSmoothScroll->ActivateFrame(); return; } CCreateContext contextT; // if no context specified, generate one from the // currently selected client if possible. contextT.m_pLastView = NULL; contextT.m_pCurrentFrame = NULL; contextT.m_pNewDocTemplate = NULL; contextT.m_pCurrentDoc = NULL; contextT.m_pNewViewClass = RUNTIME_CLASS(CSmoothScrollView); m_pWndSmoothScroll = new CSmoothScrollFrame(this); DWORD dwStyle = WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE; m_pWndSmoothScroll->LoadFrame(IDR_SMOOTHSCROLL, dwStyle, 0, &contextT); m_pWndSmoothScroll->InitialUpdateFrame(NULL, FALSE); m_pWndSmoothScroll->ShowWindow(SW_SHOW); } void CGridSampleView::OnTestTasklist() { if (m_pTaskFrame) { m_pTaskFrame->ActivateFrame(); return; } CCreateContext contextT; // if no context specified, generate one from the // currently selected client if possible. contextT.m_pLastView = NULL; contextT.m_pCurrentFrame = NULL; contextT.m_pNewDocTemplate = NULL; contextT.m_pCurrentDoc = NULL; contextT.m_pNewViewClass = RUNTIME_CLASS(CTaskListView); m_pTaskFrame = new CTaskListFrame(this); DWORD dwStyle = WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE; m_pTaskFrame->LoadFrame(IDR_TASKLIST, dwStyle, 0, &contextT); m_pTaskFrame->InitialUpdateFrame(NULL, FALSE); m_pTaskFrame->ShowWindow(SW_SHOW); } void CGridSampleView::OnTestMerge() { if (m_pWndMerge) { m_pWndMerge->ActivateFrame(); } else { CCreateContext context; context.m_pLastView = NULL; context.m_pCurrentFrame = NULL; context.m_pNewDocTemplate = NULL; context.m_pCurrentDoc = NULL; context.m_pNewViewClass = RUNTIME_CLASS(CMergeView); m_pWndMerge = new CMergeFrame(this); m_pWndMerge->LoadFrame(IDR_MERGE, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, 0, &context); m_pWndMerge->InitialUpdateFrame(NULL, FALSE); m_pWndMerge->ShowWindow(SW_SHOW); } } void CGridSampleView::OnTestSelection() { if (m_pWndSelection) { m_pWndSelection->ActivateFrame(); } else { CCreateContext context; context.m_pLastView = NULL; context.m_pCurrentFrame = NULL; context.m_pNewDocTemplate = NULL; context.m_pCurrentDoc = NULL; context.m_pNewViewClass = RUNTIME_CLASS(CSelectionView); m_pWndSelection = new CSelectionFrame(this); m_pWndSelection->LoadFrame(IDR_TASKLIST, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, 0, &context); m_pWndSelection->InitialUpdateFrame(NULL, FALSE); m_pWndSelection->ShowWindow(SW_SHOW); } } void CGridSampleView::OnTestProperties() { if (m_pPropertiesFrame) { m_pPropertiesFrame->ActivateFrame(); return; } CCreateContext contextT; // if no context specified, generate one from the // currently selected client if possible. contextT.m_pLastView = NULL; contextT.m_pCurrentFrame = NULL; contextT.m_pNewDocTemplate = NULL; contextT.m_pCurrentDoc = NULL; contextT.m_pNewViewClass = RUNTIME_CLASS(CPropertiesView); m_pPropertiesFrame = new CPropertiesFrame(this); DWORD dwStyle = WS_OVERLAPPEDWINDOW | MFS_SYNCACTIVE; if (!m_pPropertiesFrame->Create(0, _T("Properties"), dwStyle, CRect(0, 0, 400, 350), this, 0, 0L, &contextT)) { return; // will self destruct on failure normally } m_pPropertiesFrame->InitialUpdateFrame(NULL, FALSE); m_pPropertiesFrame->CenterWindow(this); m_pPropertiesFrame->ShowWindow(SW_SHOW); } void CGridSampleView::OnTestPerfomance() { CPerfomanceTestDlg dlg; dlg.DoModal(); } void CGridSampleView::OnGridControlMultilineSample() { m_bMultilineSample = !m_bMultilineSample; // Custom implementation (from old version). // For new versions of the GridControl this feature is built-in. //----------------------------------------------------------------------------- // if (m_bMultilineSample) // { // GetGridCtrl().SetPaintManager(new CGridMultilinePaintManager()); // GetGridCtrl().EnableToolTips(FALSE); // } // else // { // GetGridCtrl().SetPaintManager(new CXTPGridPaintManager()); // GetGridCtrl().EnableToolTips(TRUE); // } //----------------------------------------------------------------------------- int nCount = GetGridCtrl().GetColumns()->GetCount(); for (int i = 0; i < nCount; i++) { CXTPGridColumn* pColumn = GetGridCtrl().GetColumns()->GetAt(i); if (pColumn) { int nAlign = pColumn->GetAlignment(); nAlign = m_bMultilineSample ? (nAlign | DT_WORDBREAK) : (nAlign & (~DT_WORDBREAK)); pColumn->SetAlignment(nAlign); } } GetGridCtrl().GetPaintManager()->SetFixedRowHeight(!m_bMultilineSample); GetGridCtrl().GetPaintManager()->m_bUseColumnTextAlignment = TRUE; // GetGridCtrl().AdjustScrollBars(); } void CGridSampleView::OnUpdateGridControlMultilineSample(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_bMultilineSample); } void CGridSampleView::OnGridBeforePaste(NMHDR* pNotifyStruct, LRESULT* result) { *result = 1; // this result prevent grid changes //*result = 0; //this result allows to change Grid _ASSERTE(pNotifyStruct); XTP_NM_GRID_BEFORE_COPYPASTE* pnmCopyPaste = (XTP_NM_GRID_BEFORE_COPYPASTE*)pNotifyStruct; _ASSERTE(pnmCopyPaste); // CMessageRecord* pRecord = (CMessageRecord*)*pnmCopyPaste->ppRecord; CXTPGridColumns* pColumns = GetGridCtrl().GetColumns(); if (pColumns == NULL) return; const int nColumnCount = pColumns->GetVisibleColumnsCount(); for (int nCol = 0; nCol < nColumnCount; nCol++) { CXTPGridColumn* pColumn = pColumns->GetVisibleAt(nCol); CXTPGridRecordItem* pItem = pRecord->GetItem(pColumn); if (pItem == NULL) continue; // MD - test how to change text in already copied internal grid row CString strItem = pItem->GetCaption(pColumn); // strItem += "ABC";//UNCOMMENT TO TRY pItem->SetCaption(strItem); // MD - test passed if Paste going outside (like copy from Excel) } *result = 0; // this result allows to change Grid } void CGridSampleView::OnGridBeforePasteFromText(NMHDR* pNotifyStruct, LRESULT* result) { *result = 1; // this result prevent grid changes //*result = 0; //this result allows to change Grid _ASSERTE(pNotifyStruct); XTP_NM_GRID_BEFORE_COPYPASTE* pnmCopyPaste = (XTP_NM_GRID_BEFORE_COPYPASTE*)pNotifyStruct; if (!pnmCopyPaste || !pnmCopyPaste->ppRecord || !pnmCopyPaste->parStrings) { _ASSERTE(FALSE); return; } CMessageRecord* pRecord = new CMessageRecord(); if (pRecord == NULL) return; *pnmCopyPaste->ppRecord = pRecord; CXTPGridColumns* pColumns = GetGridCtrl().GetColumns(); if (pColumns == NULL) { return; } int nDataCount = (int)pnmCopyPaste->parStrings->GetSize(); const int nColumnCount = pColumns->GetVisibleColumnsCount(); for (int nCol = 0; nCol < nColumnCount; nCol++) { CXTPGridColumn* pColumn = pColumns->GetVisibleAt(nCol); CXTPGridRecordItem* pItem = pRecord->GetItem(pColumn); if (pItem == NULL) continue; if (nCol < nDataCount) { CString strItem = pnmCopyPaste->parStrings->GetAt(nCol); // MD - test // strItem += "-123"; //UNCOMMENT TO TRY // MD - test passed if Paste going outside (like copy from Excel) pItem->SetCaption(strItem); } } *result = 0; // this result allows to change Grid } void CGridSampleView::OnOptionsFreezecolumns0() { GetGridCtrl().SetFreezeColumnsCount(0); GetGridCtrl().AdjustScrollBars(); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateOptionsFreezecolumns0(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetFreezeColumnsCount() == 0 ? 1 : 0); } void CGridSampleView::OnOptionsFreezecolumns1() { GetGridCtrl().SetFreezeColumnsCount(1); GetGridCtrl().AdjustScrollBars(); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateOptionsFreezecolumns1(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetFreezeColumnsCount() == 1 ? 1 : 0); } void CGridSampleView::OnOptionsFreezecolumns2() { GetGridCtrl().SetFreezeColumnsCount(2); GetGridCtrl().AdjustScrollBars(); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateOptionsFreezecolumns2(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetFreezeColumnsCount() == 2 ? 1 : 0); } void CGridSampleView::OnOptionsFreezecolumns3() { GetGridCtrl().SetFreezeColumnsCount(3); GetGridCtrl().AdjustScrollBars(); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateOptionsFreezecolumns3(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetFreezeColumnsCount() == 3 ? 1 : 0); } void CGridSampleView::OnGridControlRighttoleft() { GetGridCtrl().SetLayoutRTL(GetGridCtrl().GetExStyle() & WS_EX_LAYOUTRTL ? FALSE : TRUE); } void CGridSampleView::OnUpdateGridControlRighttoleft(CCmdUI* pCmdUI) { if (!XTPSystemVersion()->IsLayoutRTLSupported()) { pCmdUI->Enable(FALSE); } else { pCmdUI->SetCheck(GetGridCtrl().GetExStyle() & WS_EX_LAYOUTRTL ? TRUE : FALSE); } } void CGridSampleView::OnOptionsFreezecolumnsDivider1() { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); nStyle &= ~(xtpGridFreezeColsDividerBold | xtpGridFreezeColsDividerThin); nStyle |= xtpGridFreezeColsDividerThin; GetGridCtrl().GetPaintManager()->SetFreezeColsDividerStyle(nStyle); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnOptionsFreezecolumnsDivider2() { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); nStyle &= ~(xtpGridFreezeColsDividerBold | xtpGridFreezeColsDividerThin); nStyle |= xtpGridFreezeColsDividerBold; GetGridCtrl().GetPaintManager()->SetFreezeColsDividerStyle(nStyle); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateOptionsFreezecolumnsDivider1(CCmdUI* pCmdUI) { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); pCmdUI->SetCheck((nStyle & xtpGridFreezeColsDividerThin) != 0); } void CGridSampleView::OnUpdateOptionsFreezecolumnsDivider2(CCmdUI* pCmdUI) { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); pCmdUI->SetCheck((nStyle & xtpGridFreezeColsDividerBold) != 0); } void CGridSampleView::OnOptionsFreezecolumnsDividerHeader() { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); nStyle ^= xtpGridFreezeColsDividerHeader; GetGridCtrl().GetPaintManager()->SetFreezeColsDividerStyle(nStyle); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateOptionsFreezecolumnsDividerHeader(CCmdUI* pCmdUI) { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); pCmdUI->SetCheck((nStyle & xtpGridFreezeColsDividerHeader) != 0); } void CGridSampleView::OnOptionsFreezecolumnsDividerNone() { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); nStyle = (nStyle & (xtpGridFreezeColsDividerHeader)); GetGridCtrl().GetPaintManager()->SetFreezeColsDividerStyle(nStyle); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateOptionsFreezecolumnsDividerNone(CCmdUI* pCmdUI) { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); pCmdUI->SetCheck((nStyle & ~xtpGridFreezeColsDividerHeader) == 0); } void CGridSampleView::OnOptionsFreezecolumnsDividerShade() { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); nStyle ^= xtpGridFreezeColsDividerShade; GetGridCtrl().GetPaintManager()->SetFreezeColsDividerStyle(nStyle); GetGridCtrl().RedrawControl(); } void CGridSampleView::OnUpdateOptionsFreezecolumnsDividerShade(CCmdUI* pCmdUI) { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); pCmdUI->SetCheck((nStyle & xtpGridFreezeColsDividerShade) != 0); } void CGridSampleView::OnTestHeaderFooter() { if (m_pHeaderFooterFrame) { m_pHeaderFooterFrame->ActivateFrame(); return; } CCreateContext contextT; // if no context specified, generate one from the // currently selected client if possible. contextT.m_pLastView = NULL; contextT.m_pCurrentFrame = NULL; contextT.m_pNewDocTemplate = NULL; contextT.m_pCurrentDoc = NULL; contextT.m_pNewViewClass = RUNTIME_CLASS(CHeaderFooterView); m_pHeaderFooterFrame = new CHeaderFooterFrame(this); DWORD dwStyle = WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE; m_pHeaderFooterFrame->LoadFrame(IDR_HEADERFOOTER, dwStyle, 0, &contextT); m_pHeaderFooterFrame->InitialUpdateFrame(NULL, FALSE); m_pHeaderFooterFrame->ShowWindow(SW_SHOW); } BOOL CGridSampleView::OnFindInGrid() { // CString sIn(_T("James HOWLETT")); // CString sIn(_T("james howlett")); // CString sIn(_T("James ")); CString sIn(_T("ames ")); // CString sIn(_T("JaMes hOWlETT")); CString sOut; int iR, iC; CXTPGridControl& wndGrid = GetGridCtrl(); int iCols = wndGrid.GetColumns()->GetCount(); int iRows = wndGrid.GetRows()->GetCount(); iR = iRows - 1; iC = iCols - 1; CXTPGridRecordItem* pItem = wndGrid.GetRecords()->FindRecordItem(0, iRows - 1, 0, iCols - 1, 0, 0, sIn, // xtpGridTextSearchExactPhrase //| xtpGridTextSearchMatchCase //| xtpGridTextSearchExactStart); // was == 3 - now 11 if (pItem) { sOut.Format(_T("R=%d C=%d %s"), pItem->GetRecord()->GetIndex(), pItem->GetIndex(), pItem->GetCaption(NULL).operator LPCTSTR()); AfxMessageBox(sIn + _T(" <- ExactStart -> ") + sOut); pItem->SetTextColor(RGB(255, 0, 0)); } else AfxMessageBox(sIn + _T(" <- ExactStart -> Not Found")); sIn = _T("James HOWLETT"); pItem = wndGrid.GetRows()->FindRecordItemByRows(0, iRows - 1, 0, iCols - 1, 0, 0, sIn, // xtpGridTextSearchExactPhrase //| xtpGridTextSearchMatchCase //| xtpGridTextSearchExactStart); // was == 3 - // now 11 if (pItem) { sOut.Format(_T("R=%d C=%d %s"), pItem->GetRecord()->GetIndex(), pItem->GetIndex(), pItem->GetCaption(NULL).operator LPCTSTR()); AfxMessageBox(sIn + _T(" <- ByRows|ExactStart -> ") + sOut); pItem->SetTextColor(RGB(255, 0, 0)); } else AfxMessageBox(sIn + _T(" <- ByRows|ExactStart -> Not Found")); sIn = _T("query"); pItem = wndGrid.GetRecords()->FindRecordItem(0, iRows - 1, 0, iCols - 1, 0, 0, sIn, // xtpGridTextSearchExactPhrase //| xtpGridTextSearchMatchCase //| xtpGridTextSearchExactStart); // was == 3 - now // 11 if (pItem) { sOut.Format(_T("R=%d C=%d %s"), pItem->GetRecord()->GetIndex(), pItem->GetIndex(), pItem->GetCaption(NULL).operator LPCTSTR()); AfxMessageBox(sIn + _T(" <- ExactStart -> ") + sOut); pItem->SetTextColor(RGB(255, 0, 0)); } else AfxMessageBox(sIn + _T(" <- ExactStart -> Not Found")); sIn = _T("James Howlett"); pItem = wndGrid.GetRecords()->FindRecordItem(0, iRows - 1, 0, iCols - 1, 0, 0, sIn, xtpGridTextSearchMatchCase); // == 2 if (pItem) { sOut.Format(_T("R=%d C=%d %s"), pItem->GetRecord()->GetIndex(), pItem->GetIndex(), pItem->GetCaption(NULL).operator LPCTSTR()); AfxMessageBox(sIn + _T(" <- MatchCase -> ") + sOut); pItem->SetTextColor(RGB(255, 0, 0)); } else AfxMessageBox(sIn + _T(" <- MatchCase -> Not Found")); pItem = wndGrid.GetRecords()->FindRecordItem(0, iRows - 1, 0, iCols - 1, 0, 0, sIn, xtpGridTextSearchExactPhrase); // == 1 if (pItem) { iR = pItem->GetRecord()->GetIndex(); iC = pItem->GetIndex(); sOut.Format(_T("R=%d C=%d %s"), iR, iC, pItem->GetCaption(NULL).operator LPCTSTR()); AfxMessageBox(sIn + _T(" <- ExactPhrase -> ") + sOut); pItem->SetTextColor(RGB(255, 0, 0)); } else AfxMessageBox(sIn + _T(" <- ExactPhrase -> Not Found")); sIn = _T("ruce W"); pItem = wndGrid.GetRecords()->FindRecordItem(0, iRows - 1, 0, iCols - 1, iR, iC + 1, sIn, 0); if (pItem) { iR = pItem->GetRecord()->GetIndex(); iC = pItem->GetIndex(); sOut.Format(_T("R=%d C=%d %s"), iR, iC, pItem->GetCaption(NULL).operator LPCTSTR()); AfxMessageBox(sIn + _T(" <- S (FindNext)-> ") + sOut); pItem->SetTextColor(RGB(255, 0, 0)); } else AfxMessageBox(sIn + _T(" <- S (FindNext)-> Not Found")); sIn = _T("Reply"); pItem = wndGrid.GetRecords()->FindRecordItem(0, iRows - 1, 0, iCols - 1, iR, iC, sIn, xtpGridTextSearchBackward); if (pItem) { iR = pItem->GetRecord()->GetIndex(); iC = pItem->GetIndex(); sOut.Format(_T("R=%d C=%d %s"), iR, iC, pItem->GetCaption(NULL).operator LPCTSTR()); AfxMessageBox(sIn + _T(" <- Backward (FindNext)-> ") + sOut); pItem->SetTextColor(RGB(255, 0, 0)); } else AfxMessageBox(sIn + _T(" <- Backward (FindNext)-> Not Found")); return TRUE; } void CGridSampleView::OnGridControlDevtest() { OnFindInGrid(); } void CGridSampleView::OnFilePrintPreview() { #ifdef _XTP_INCLUDE_COMMANDBARS // In derived classes, implement special window handling here // Be sure to Unhook Frame Window close if hooked. // must not create this on the frame. Must outlive this function CPrintPreviewState* pState = new CPrintPreviewState; // DoPrintPreview's return value does not necessarily indicate that // Print preview succeeded or failed, but rather what actions are necessary // at this point. If DoPrintPreview returns TRUE, it means that // OnEndPrintPreview will be (or has already been) called and the // pState structure will be/has been deleted. // If DoPrintPreview returns FALSE, it means that OnEndPrintPreview // WILL NOT be called and that cleanup, including deleting pState // must be done here. if (!DoPrintPreview(XTP_IDD_PREVIEW_DIALOGBAR, this, RUNTIME_CLASS(CXTPPreviewView), pState)) { // In derived classes, reverse special window handling here for // Preview failure case TRACE0("Error: DoPrintPreview failed.\n"); AfxMessageBox(AFX_IDP_COMMAND_FAILURE); delete pState; // preview failed to initialize, delete State now } #else CXTPGridView::OnFilePrintPreview(); #endif } void CGridSampleView::OnGridWYSIWYG() { CXTPGridControl& wndGrid = GetGridCtrl(); BOOL bWYSIWYG = !wndGrid.GetPaintManager()->IsColumnWidthWYSIWYG(); wndGrid.GetPaintManager()->SetColumnWidthWYSIWYG(bWYSIWYG); m_pPrintOptions->m_bRepeatFooterRows = TRUE; m_pPrintOptions->m_bRepeatHeaderRows = TRUE; wndGrid.RedrawControl(); // Make WYSIWYG marker visible } void CGridSampleView::OnUpdateGridWYSIWYG(CCmdUI* pCmdUI) { CXTPGridControl& wndGrid = GetGridCtrl(); pCmdUI->SetCheck(wndGrid.GetPaintManager()->IsColumnWidthWYSIWYG()); } void CGridSampleView::OnGridIconview() { CXTPGridControl& wndGrid = GetGridCtrl(); wndGrid.AssignIconViewPropNumAndIconNum(3, 3, TRUE, XTP_DPI_X(25)); wndGrid.SetIconView(!wndGrid.IsIconView()); } void CGridSampleView::OnUpdateGridIconview(CCmdUI* pCmdUI) { CXTPGridControl& wndGrid = GetGridCtrl(); pCmdUI->SetCheck(wndGrid.IsIconView()); } ///////////////////////////////////////////////////////////////////////////// // Grid behavior ///////////////////////////////////////////////////////////////////////////// #if _XTPLIB_VERSION_PREFIX >= 1511 void CGridSampleView::OnBehaviorCodejockDefault() { m_behavior = xtpGridBehaviorCodejockDefault; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorCodejockDefault); } void CGridSampleView::OnBehaviorCodejock1502() { m_behavior = xtpGridBehaviorCodejock1502; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorCodejock1502); } void CGridSampleView::OnBehaviorCodejock1501() { m_behavior = xtpGridBehaviorCodejock1501; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorCodejock1501); } void CGridSampleView::OnBehaviorCodejock1342() { m_behavior = xtpGridBehaviorCodejock1342; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorCodejock1342); } void CGridSampleView::OnBehaviorOutlook2003() { m_behavior = xtpGridBehaviorOutlook2003; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorOutlook2003); } void CGridSampleView::OnBehaviorOutlook2007() { m_behavior = xtpGridBehaviorOutlook2007; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorOutlook2007); } void CGridSampleView::OnBehaviorOutlook2010() { m_behavior = xtpGridBehaviorOutlook2010; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorOutlook2010); } void CGridSampleView::OnBehaviorExcel2003() { m_behavior = xtpGridBehaviorExcel2003; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorExcel2003); } void CGridSampleView::OnBehaviorExcel2007() { m_behavior = xtpGridBehaviorExcel2007; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorExcel2007); } void CGridSampleView::OnBehaviorExcel2010() { m_behavior = xtpGridBehaviorExcel2010; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorExcel2010); } void CGridSampleView::OnBehaviorCustom() { m_behavior = 100; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorOutlook2003); # if _XTPLIB_VERSION_PREFIX >= 1520 GetGridCtrl().GetBehavior()->Row->MouseUp->Right->None->bFocusRowTemporarily = FALSE; # else GetGridCtrl().GetBehavior()->Row->MouseUp->Right->bFocusRowTemporarily = FALSE; # endif } void CGridSampleView::OnUpdateBehaviorCodejockDefault(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorCodejockDefault == m_behavior ? 1 : 0); } void CGridSampleView::OnUpdateBehaviorCodejock1502(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorCodejock1502 == m_behavior ? 1 : 0); } void CGridSampleView::OnUpdateBehaviorCodejock1501(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorCodejock1501 == m_behavior ? 1 : 0); } void CGridSampleView::OnUpdateBehaviorCodejock1342(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorCodejock1342 == m_behavior ? 1 : 0); } void CGridSampleView::OnUpdateBehaviorOutlook2003(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorOutlook2003 == m_behavior ? 1 : 0); } void CGridSampleView::OnUpdateBehaviorOutlook2007(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorOutlook2007 == m_behavior ? 1 : 0); } void CGridSampleView::OnUpdateBehaviorOutlook2010(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorOutlook2010 == m_behavior ? 1 : 0); } void CGridSampleView::OnUpdateBehaviorExcel2003(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorExcel2003 == m_behavior ? 1 : 0); } void CGridSampleView::OnUpdateBehaviorExcel2007(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorExcel2007 == m_behavior ? 1 : 0); } void CGridSampleView::OnUpdateBehaviorExcel2010(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorExcel2010 == m_behavior ? 1 : 0); } void CGridSampleView::OnUpdateBehaviorCustom(CCmdUI* pCmdUI) { pCmdUI->SetCheck(100 == m_behavior ? 1 : 0); } #endif ///////////////////////////////////////////////////////////////////////////// void CGridSampleView::OnGridLockExpand() { #if _XTPLIB_VERSION_PREFIX >= 1511 GetGridCtrl().LockExpand(!GetGridCtrl().IsLockExpand()); GetGridCtrl().RedrawControl(); #endif } void CGridSampleView::OnUpdateGridLockExpand(CCmdUI* pCmdUI) { #if _XTPLIB_VERSION_PREFIX >= 1511 pCmdUI->SetCheck(GetGridCtrl().IsLockExpand() ? 1 : 0); #else pCmdUI->Enable(FALSE); // Not supported #endif } ///////////////////////////////////////////////////////////////////////////// // Watermark ///////////////////////////////////////////////////////////////////////////// void CGridSampleView::OnGridWatermark() { CXTPGridControl& wndGrid = GetGridCtrl(); m_bWatermark = !m_bWatermark; if (m_bWatermark) { CBitmap bmpWatermark; if (bmpWatermark.LoadBitmap(IDB_CODEJOCKGEAR)) { wndGrid.SetWatermarkBitmap(bmpWatermark, 64); wndGrid.SetWatermarkAlignment(xtpGridWatermarkCenter | xtpGridWatermarkVCenter); wndGrid.GetPaintManager()->m_bPrintWatermark = TRUE; } } else { wndGrid.SetWatermarkBitmap(HBITMAP(NULL), 0); wndGrid.GetPaintManager()->m_bPrintWatermark = FALSE; } wndGrid.RedrawControl(); } void CGridSampleView::OnUpdateGridWatermark(CCmdUI* pCmdUI) { pCmdUI->Enable(TRUE); pCmdUI->SetCheck(m_bWatermark ? 1 : 0); } ///////////////////////////////////////////////////////////////////////////// // Double buffering ///////////////////////////////////////////////////////////////////////////// void CGridSampleView::OnGridDoubleBuffering() { #if _XTPLIB_VERSION_PREFIX >= 1511 CXTPGridControl& wndGrid = GetGridCtrl(); wndGrid.EnableDoubleBuffering(!wndGrid.IsDoubleBuffering()); wndGrid.RedrawControl(); #endif } void CGridSampleView::OnUpdateGridDoubleBuffering(CCmdUI* pCmdUI) { #if _XTPLIB_VERSION_PREFIX >= 1511 pCmdUI->Enable(TRUE); pCmdUI->SetCheck(GetGridCtrl().IsDoubleBuffering() ? 1 : 0); #else // Not supported pCmdUI->Enable(FALSE); // Can not be changed pCmdUI->SetCheck(1); // Always on #endif } ///////////////////////////////////////////////////////////////////////////// // Scrolling (Horizontal) ///////////////////////////////////////////////////////////////////////////// void CGridSampleView::OnScrollingHorizontalBlockCount() { #if _XTPLIB_VERSION_PREFIX >= 1521 GetGridCtrl().SetScrollMode(xtpGridOrientationHorizontal, xtpGridScrollModeBlockCount); GetGridCtrl().RedrawControl(); #endif } void CGridSampleView::OnScrollingHorizontalBlockSize() { #if _XTPLIB_VERSION_PREFIX >= 1521 GetGridCtrl().SetScrollMode(xtpGridOrientationHorizontal, xtpGridScrollModeBlockSize); GetGridCtrl().RedrawControl(); #endif } void CGridSampleView::OnScrollingHorizontalSmooth() { #if _XTPLIB_VERSION_PREFIX >= 1511 GetGridCtrl().SetScrollMode(xtpGridOrientationHorizontal, xtpGridScrollModeSmooth); GetGridCtrl().RedrawControl(); #endif } void CGridSampleView::OnUpdateScrollingHorizontalBlockCount(CCmdUI* pCmdUI) { #if _XTPLIB_VERSION_PREFIX >= 1521 CXTPGridControl& wndGrid = GetGridCtrl(); BOOL bSmooth = xtpGridScrollModeBlockCount == wndGrid.GetScrollMode(xtpGridOrientationHorizontal); pCmdUI->Enable(TRUE); pCmdUI->SetCheck(bSmooth ? 1 : 0); #else // Not supported pCmdUI->Enable(FALSE); pCmdUI->SetCheck(0); #endif } void CGridSampleView::OnUpdateScrollingHorizontalBlockSize(CCmdUI* pCmdUI) { #if _XTPLIB_VERSION_PREFIX >= 1521 CXTPGridControl& wndGrid = GetGridCtrl(); BOOL bSmooth = xtpGridScrollModeBlockSize == wndGrid.GetScrollMode(xtpGridOrientationHorizontal); pCmdUI->Enable(TRUE); pCmdUI->SetCheck(bSmooth ? 1 : 0); #else // Not supported pCmdUI->Enable(FALSE); pCmdUI->SetCheck(0); #endif } void CGridSampleView::OnUpdateScrollingHorizontalSmooth(CCmdUI* pCmdUI) { #if _XTPLIB_VERSION_PREFIX >= 1511 CXTPGridControl& wndGrid = GetGridCtrl(); BOOL bSmooth = xtpGridScrollModeSmooth == wndGrid.GetScrollMode(xtpGridOrientationHorizontal); pCmdUI->Enable(TRUE); pCmdUI->SetCheck(bSmooth ? 1 : 0); #else // Not supported pCmdUI->Enable(FALSE); pCmdUI->SetCheck(0); #endif } ///////////////////////////////////////////////////////////////////////////// // Scrolling (Vertical) ///////////////////////////////////////////////////////////////////////////// void CGridSampleView::OnScrollingVerticalBlockCount() { #if _XTPLIB_VERSION_PREFIX >= 1521 GetGridCtrl().SetScrollMode(xtpGridOrientationVertical, xtpGridScrollModeBlockCount); #endif } void CGridSampleView::OnScrollingVerticalSmooth() { #if _XTPLIB_VERSION_PREFIX >= 1511 GetGridCtrl().SetScrollMode(xtpGridOrientationVertical, xtpGridScrollModeSmooth); #endif } void CGridSampleView::OnUpdateScrollingVerticalBlockCount(CCmdUI* pCmdUI) { #if _XTPLIB_VERSION_PREFIX >= 1521 CXTPGridControl& wndGrid = GetGridCtrl(); BOOL bSmooth = xtpGridScrollModeBlockCount == wndGrid.GetScrollMode(xtpGridOrientationVertical); pCmdUI->Enable(TRUE); pCmdUI->SetCheck(bSmooth ? 1 : 0); #else // Not supported pCmdUI->Enable(FALSE); pCmdUI->SetCheck(0); #endif } void CGridSampleView::OnUpdateScrollingVerticalSmooth(CCmdUI* pCmdUI) { #if _XTPLIB_VERSION_PREFIX >= 1511 CXTPGridControl& wndGrid = GetGridCtrl(); BOOL bSmooth = xtpGridScrollModeSmooth == wndGrid.GetScrollMode(xtpGridOrientationVertical); pCmdUI->Enable(TRUE); pCmdUI->SetCheck(bSmooth ? 1 : 0); #else // Not supported pCmdUI->Enable(FALSE); pCmdUI->SetCheck(0); #endif } ///////////////////////////////////////////////////////////////////////////// // Grid Color ///////////////////////////////////////////////////////////////////////////// #if _XTPLIB_VERSION_PREFIX >= 1520 void CGridSampleView::OnGridColorRed() { m_wndGrid.GetPaintManager()->SetGridColor(RGB(255, 0, 0)); m_wndGrid.RedrawControl(); } void CGridSampleView::OnGridColorGreen() { m_wndGrid.GetPaintManager()->SetGridColor(RGB(0, 255, 0)); m_wndGrid.RedrawControl(); } void CGridSampleView::OnGridColorBlue() { m_wndGrid.GetPaintManager()->SetGridColor(RGB(0, 0, 255)); m_wndGrid.RedrawControl(); } void CGridSampleView::OnUpdateGridColorRed(CCmdUI* pCmdUI) { pCmdUI->SetCheck(RGB(255, 0, 0) == m_wndGrid.GetPaintManager()->GetGridColor() ? 1 : 0); } void CGridSampleView::OnUpdateGridColorGreen(CCmdUI* pCmdUI) { pCmdUI->SetCheck(RGB(0, 255, 0) == m_wndGrid.GetPaintManager()->GetGridColor() ? 1 : 0); } void CGridSampleView::OnUpdateGridColorBlue(CCmdUI* pCmdUI) { pCmdUI->SetCheck(RGB(0, 0, 255) == m_wndGrid.GetPaintManager()->GetGridColor() ? 1 : 0); } #endif