// PropertyGridDlg.cpp : implementation file // // This file is a part of the XTREME TOOLKIT PRO MFC class library. // (c)1998-2008 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 "PropertyGrid.h" #include "PropertyGridDlg.h" #include "AboutDlg.h" #include "CustomItems.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPropertyGridDlg dialog CPropertyGridDlg::CPropertyGridDlg(CWnd* pParent /*=NULL*/) : CPropertyGridDlgBase(CPropertyGridDlg::IDD, pParent) , m_bHelpVisible(TRUE) , m_bToolBarVisible(FALSE) , m_bCustomColors(FALSE) , m_bVerbsVisible(FALSE) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_nSort = 0; m_bCollapse = FALSE; m_bDoubleFont = FALSE; m_bWinXPTheme = FALSE; m_nTheme = 0; m_bTabItems = FALSE; m_bHighlightChanged = FALSE; m_bShowButtons = FALSE; m_bRightToLeft = FALSE; // Enable/Disable XP GUI Mode XTAuxData().bXPMode = TRUE; } void CPropertyGridDlg::DoDataExchange(CDataExchange* pDX) { CPropertyGridDlgBase::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPropertyGridDlg) DDX_Control(pDX, IDC_COMBO_THEME, m_cmbTheme); DDX_Control(pDX, IDC_COMBO_BORDER, m_cmbBorder); DDX_Control(pDX, IDC_PLACEHOLDER, m_wndPlaceHolder); DDX_CBIndex(pDX, IDC_COMBO_THEME, m_nTheme); DDX_Check(pDX, IDC_CHK_TABITEMS, m_bTabItems); //}}AFX_DATA_MAP DDX_Check(pDX, IDC_CHK_HELP, m_bHelpVisible); DDX_Check(pDX, IDC_CHK_VERBS, m_bVerbsVisible); DDX_Check(pDX, IDC_CHK_TOOLBAR, m_bToolBarVisible); DDX_Check(pDX, IDC_CHK_DOUBLE, m_bDoubleFont); DDX_Radio(pDX, IDC_SORT_CATEGORIES, m_nSort); DDX_Check(pDX, IDC_CHK_CUSTOMCOLORS, m_bCustomColors); DDX_Check(pDX, IDC_CHK_HIGHLIGHT, m_bHighlightChanged); DDX_Check(pDX, IDC_CHECK_SHOWBUTTONS, m_bShowButtons); DDX_Check(pDX, IDC_CHK_RIGHTTOLEFT, m_bRightToLeft); } BEGIN_MESSAGE_MAP(CPropertyGridDlg, CPropertyGridDlgBase) //{{AFX_MSG_MAP(CPropertyGridDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_SWITCHSTATE, OnButtonSwitchstate) ON_CBN_SELCHANGE(IDC_COMBO_THEME, OnSelchangeComboTheme) ON_CBN_SELCHANGE(IDC_COMBO_BORDER, OnSelchangeComboBorder) ON_BN_CLICKED(IDC_CHK_TABITEMS, OnChkTabitems) //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_CHK_TOOLBAR, OnClickedChkToolbar) ON_BN_CLICKED(IDC_CHK_HELP, OnClickedChkHelp) ON_BN_CLICKED(IDC_CHK_VERBS, OnClickedChkVerbs) ON_BN_CLICKED(IDC_CHK_DOUBLE, OnClickedChkDouble) ON_BN_CLICKED(IDC_CHK_WINXPTHEME, OnClickedWinXPTheme) ON_BN_CLICKED(IDC_CHK_HIGHLIGHT, OnClickedHighlightChanged) ON_BN_CLICKED(IDC_SORT_CATEGORIES, OnClickedSort) ON_BN_CLICKED(IDC_SORT_ALPHABETICAL, OnClickedSort) ON_BN_CLICKED(IDC_SORT_NOSORT, OnClickedSort) ON_BN_CLICKED(IDC_CHECK_SHOWBUTTONS, OnClickShowButtons) ON_BN_CLICKED(IDC_CHK_RIGHTTOLEFT, OnClickRightToLeft) ON_MESSAGE(XTPWM_PROPERTYGRID_NOTIFY, OnGridNotify) ON_BN_CLICKED(IDC_CHK_CUSTOMCOLORS, OnClickedCustomcolors) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPropertyGridDlg message handlers BOOL CPropertyGridDlg::OnInitDialog() { CPropertyGridDlgBase::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // get the size of the place holder, this will be used when creating the grid. CRect rc; m_wndPlaceHolder.GetWindowRect( &rc ); ScreenToClient( &rc ); // create the property grid. if ( m_wndPropertyGrid.Create( rc, this, IDC_PROPERTY_GRID ) ) { m_wndPropertyGrid.SetVariableItemsHeight(TRUE); LOGFONT lf; GetFont()->GetLogFont( &lf ); // create document settings category. CXTPPropertyGridItem* pSettings = m_wndPropertyGrid.AddCategory(_T("Document Settings")); pSettings->SetTooltip(_T("Document Settings Category")); // add child items to category. CXTPPropertyGridItem* pItemSaveOnClose = pSettings->AddChildItem(new CXTPPropertyGridItemBool(_T("SaveOnClose"), TRUE)); pSettings->AddChildItem(new CXTPPropertyGridItemFont(_T("WindowFont"), lf)); pSettings->AddChildItem(new CXTPPropertyGridItemSize(_T("WindowSize"), CSize(100, 100))); pSettings->Expand(); pItemSaveOnClose->Select(); // create global settings category. CXTPPropertyGridItem* pGlobals = m_wndPropertyGrid.AddCategory(_T("Global Settings")); // add child items to category. CXTPPropertyGridItem* pItemGreeting = pGlobals->AddChildItem(new CXTPPropertyGridItem(_T("Greeting Text"), _T("Welcome to your application!"))); pGlobals->AddChildItem(new CXTPPropertyGridItemNumber(_T("ItemsInMRUList"), 4)); CXTPPropertyGridItem* pItemRate = pGlobals->AddChildItem(new CXTPPropertyGridItemNumber(_T("MaxRepeatRate"), 10)); pGlobals->AddChildItem(new CXTPPropertyGridItemColor(_T("ToolbarColor"), RGB(255, 192,128))); pItemGreeting->SetReadOnly(TRUE); pItemRate->SetDescription(_T("The rate in milliseconds that the text will repeat.")); ////////////////////////////////////////////////////////////////////////// // Version category. CXTPPropertyGridItem* pVersion = m_wndPropertyGrid.AddCategory(_T("Version")); // add child items to category. CXTPPropertyGridItem* pItemVersion = pVersion->AddChildItem(new CXTPPropertyGridItem(_T("AppVersion"), _T("1.0"))); CXTPPropertyGridItem* pItemLanguage = pVersion->AddChildItem(new CXTPPropertyGridItem(ID_ITEM_VERSION_LANGUAGE, _T("English (United States)"))); pItemVersion->SetReadOnly(TRUE); pVersion->Expand(); CXTPPropertyGridItemConstraints* pList = pItemLanguage->GetConstraints(); pList->AddConstraint(_T("Neutral")); pList->AddConstraint(_T("Arabic")); pList->AddConstraint(_T("German")); pList->AddConstraint(_T("Chinese(Taiwan)")); pList->AddConstraint(_T("English (United Kingdom)")); pList->AddConstraint(_T("English (United States)")); pList->AddConstraint(_T("France")); pList->AddConstraint(_T("Russian")); pItemLanguage->SetFlags(xtpGridItemHasComboButton | xtpGridItemHasEdit); ////////////////////////////////////////////////////////////////////////// // Dynamic Options CXTPPropertyGridItem* pCategoryDynamic = m_wndPropertyGrid.AddCategory(_T("Dynamic Options")); CXTPPropertyGridItemBool* pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic->AddChildItem( new CXTPPropertyGridItemBool(_T("Advanced"), FALSE)); pItemBool->SetID(501); pItemBool->SetCheckBoxStyle(); pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic->AddChildItem( new CXTPPropertyGridItemBool(_T("Option 1"), FALSE)); pItemBool->SetHidden(TRUE); pItemBool->SetCheckBoxStyle(); pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic->AddChildItem( new CXTPPropertyGridItemBool(_T("Option 2"), FALSE)); pItemBool->SetHidden(TRUE); pItemBool->SetCheckBoxStyle(); pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic->AddChildItem( new CXTPPropertyGridItemBool(_T("Option 3"), FALSE)); pItemBool->SetHidden(TRUE); pItemBool->SetCheckBoxStyle(); pItemBool = (CXTPPropertyGridItemBool*)pCategoryDynamic->AddChildItem( new CXTPPropertyGridItemBool(_T("Option 4"), TRUE)); pItemBool->SetHidden(TRUE); pItemBool->SetCheckBoxStyle(); pItemBool->SetReadOnly(); // create standard items category. CXTPPropertyGridItem* pStandard = m_wndPropertyGrid.AddCategory(_T("Standard Items")); pStandard->AddChildItem(new CXTPPropertyGridItem(_T("String item"))); pStandard->AddChildItem(new CXTPPropertyGridItemMultilineString(_T("Multiline String item"), _T("1\r\n2"))); pStandard->AddChildItem(new CXTPPropertyGridItemNumber(_T("Integer item"))); pStandard->AddChildItem(new CXTPPropertyGridItemDouble(_T("Double item"))); pStandard->AddChildItem(new CXTPPropertyGridItemColor(_T("Color item"))); pStandard->AddChildItem(new CXTPPropertyGridItemBool(_T("Bool item"))); pStandard->AddChildItem(new CXTPPropertyGridItemFont(_T("Font item"), lf)); COleDateTime dates(1981, 1, 26, 0, 0, 0 ); pStandard->AddChildItem(new CXTPPropertyGridItemDate(_T("Date item"), dates)); pStandard->AddChildItem(new CXTPPropertyGridItemSize(_T("Size item"))); CXTPPropertyGridItem* pItem = pStandard->AddChildItem(new CXTPPropertyGridItemEnum(_T("Enum item"), 2)); pItem->GetConstraints()->AddConstraint(_T("Windows 98"), 1); pItem->GetConstraints()->AddConstraint(_T("Windows 2000"), 2); pItem->GetConstraints()->AddConstraint(_T("Windows XP"), 3); pItem = pStandard->AddChildItem(new CXTPPropertyGridItemFlags(_T("Flag item"), 1 + 2)); pItem->GetConstraints()->AddConstraint(_T("All Windows"), 1 + 2 + 4); pItem->GetConstraints()->AddConstraint(_T("Windows 98"), 1); pItem->GetConstraints()->AddConstraint(_T("Windows 2000"), 2); pItem->GetConstraints()->AddConstraint(_T("Windows XP"), 4); ////////////////////////////////////////////////////////////////////////// CXTPPropertyGridItem* pButtons = m_wndPropertyGrid.AddCategory(_T("Standard Buttons")); pItem = pButtons->AddChildItem(new CXTPPropertyGridItemBool(_T("Combo Button"))); pItem->SetFlags(xtpGridItemHasComboButton); pItem = pButtons->AddChildItem(new CXTPPropertyGridItem(_T("Expand Button"))); pItem->SetFlags(xtpGridItemHasEdit | xtpGridItemHasExpandButton); pItem = pButtons->AddChildItem(new CXTPPropertyGridItem(_T("2 Buttons"))); pItem->SetID(510); pItem->SetFlags(xtpGridItemHasEdit | xtpGridItemHasComboButton | xtpGridItemHasExpandButton); pItem->GetConstraints()->AddConstraint(_T("Windows 2000"), 1); pItem->GetConstraints()->AddConstraint(_T("Windows 98"), 2); pItem = pButtons->AddChildItem(new CXTPPropertyGridItem(_T("Text Button"))); CXTPPropertyGridInplaceButton* pButton = pItem->GetInplaceButtons()->AddButton(new CXTPPropertyGridInplaceButton(1)); pButton->SetCaption(_T("Find")); pItem = pButtons->AddChildItem(new CXTPPropertyGridItem(_T("Image Button"))); pButton = pItem->GetInplaceButtons()->AddButton(new CXTPPropertyGridInplaceButton(1)); pButton->SetIconIndex(100); UINT btnFilter[] = {100}; m_wndPropertyGrid.GetImageManager()->SetIcons(IDB_BITMAP_FILTER, btnFilter, 1, 0); pButton->SetTooltip(_T("Set Filter for item")); pItem = pButtons->AddChildItem(new CXTPPropertyGridItemNumber(_T("Spin And Slider"), 60)); pItem->AddSliderControl(); pItem->AddSpinButton(); ////////////////////////////////////////////////////////////////////////// CXTPPropertyGridItem* pMetrics = m_wndPropertyGrid.AddCategory(_T("Custom Metrics")); pItem = pMetrics->AddChildItem(new CXTPPropertyGridItem(_T("Value Colors"), _T(""))); pItem->GetValueMetrics()->m_clrFore = 0xFF; pItem->GetValueMetrics()->m_clrBack = RGB(235, 235, 235); pItem = pMetrics->AddChildItem(new CXTPPropertyGridItem(_T("Caption Colors"), _T(""))); pItem->GetCaptionMetrics()->m_clrFore = 0xFF0000; pItem->GetCaptionMetrics()->m_clrBack = RGB(235, 235, 235); pItem = pMetrics->AddChildItem(new CXTPPropertyGridItemEnum(_T("Images"), 2)); pItem->GetConstraints()->AddConstraint(_T("Green"), 0, 0); pItem->GetConstraints()->AddConstraint(_T("Red"), 1, 1); pItem->GetConstraints()->AddConstraint(_T("Yellow"), 2, 2); pItem->GetConstraints()->AddConstraint(_T("Blue"), 3, 3); pItem->GetValueMetrics()->m_nImage = 2; pItem->GetCaptionMetrics()->m_nImage = 4; m_wndPropertyGrid.GetImageManager()->SetMaskColor(0xC0C0C0); m_wndPropertyGrid.GetImageManager()->SetIcons(IDB_BITMAP_CONSTRAINTS, 0, 5, CSize(20, 14)); pItem = pMetrics->AddChildItem(new CXTPPropertyGridItem(_T("Variable Height"), _T("Item"))); pItem->SetHeight(32); pItem->SetFlags(xtpGridItemHasComboButton); pItem = pMetrics->AddChildItem(new CXTPPropertyGridItem(_T("MultiLine"), _T("Codejock Software\r\n428 Corunna Avenue\r\nOwosso, Michigan 48867 USA"))); pItem->SetMultiLinesCount(3); // create custom items category. CXTPPropertyGridItem* pCustom = m_wndPropertyGrid.AddCategory(_T("Custom Items")); // add child items to category. CXTPPropertyGridItem* pItemIcon = pCustom->AddChildItem(new CCustomItemIcon(_T("Icon"), m_hIcon)); CXTPPropertyGridItem* pItemDock = pCustom->AddChildItem(new CCustomItemChilds(_T("DockPadding"), CRect(100, 20, 400, 50))); pCustom->AddChildItem(new CCustomItemColor(_T("CustomCombolist"), RGB(0xFF, 0x80, 0x40))); pItemIcon->SetDescription(_T("This sample shows how to override draw function")); pItemDock->SetDescription(_T("This sample shows how to add item with childs")); pCustom->AddChildItem(new CCustomItemFileBox(_T("File Box"))); CXTPPropertyGridItem* pItemMaskEdit = pCustom->AddChildItem(new CXTPPropertyGridItem(_T("Mask Edit"), _T("Phone No: (816) 220-0000"))); pItemMaskEdit->SetMask(_T("Phone No: (000) 000-0000"), _T("Phone No: (___) ___-____")); CXTPPropertyGridItem* pItemPassword = pCustom->AddChildItem(new CXTPPropertyGridItem(_T("Password"), _T("Text"))); pItemPassword->SetPasswordMask(); COleDateTime date(1981, 1, 26, 0, 0, 0 ); pCustom->AddChildItem(new CXTPPropertyGridItemDate(_T("Date"), date)); pCustom->AddChildItem(new CCustomItemUpperCase(_T("UpperCase"))); pCustom->AddChildItem(new CCustomItemIPAddress(_T("IP Address"))); pCustom->AddChildItem(new CCustomItemMenu(_T("Popup Menu"))); pCustom->AddChildItem(new CCustomItemEdit(_T("Output"), _T("Debug"))); // add multi level tree node. CXTPPropertyGridItem* pCategoryOne = pCustom->AddChildItem(new CXTPPropertyGridItemCategory(_T("First Sub Category"))); CXTPPropertyGridItem* pCategoryTwo = pCategoryOne->AddChildItem(new CXTPPropertyGridItemCategory(_T("Second Sub Category 1"))); pCategoryTwo->AddChildItem(new CXTPPropertyGridItem(_T("Third Level 1"), _T(""))); pCategoryTwo->AddChildItem(new CXTPPropertyGridItem(_T("Third Level 2"), _T(""))); CXTPPropertyGridItem* pCategoryTwo2 = pCategoryOne->AddChildItem(new CXTPPropertyGridItemCategory(_T("Second Sub Category 2"))); pCategoryTwo2->AddChildItem(new CXTPPropertyGridItem(_T("Third Level 1"), _T(""))); CXTPPropertyGridItem* pItemOne = pCustom->AddChildItem(new CXTPPropertyGridItem(_T("First Level"), _T(""))); CXTPPropertyGridItem* pItemTwo = pItemOne->AddChildItem(new CXTPPropertyGridItem(_T("Second Level"), _T(""))); CXTPPropertyGridItem* pItemThird = pItemTwo->AddChildItem(new CXTPPropertyGridItem(_T("Third Level"), _T(""))); pItemThird->AddChildItem(new CXTPPropertyGridItem(_T("Fourth Level 1"), _T(""))); pItemThird->AddChildItem(new CXTPPropertyGridItem(_T("Fourth Level 2"), _T(""))); // create custom items category. pCustom = m_wndPropertyGrid.AddCategory(_T("Custom Buttons")); CXTPPropertyGridItem* pItemSpin = pCustom->AddChildItem(new CCustomItemSpin(_T("SpinButton"))); pItemSpin->SetDescription(_T("This sample shows how to add new button type")); pCustom->AddChildItem(new CCustomItemSlider(_T("Slider"))); CCustomItemCheckBox* pItemCheckBox = (CCustomItemCheckBox*)pCustom->AddChildItem(new CCustomItemCheckBox(_T("Check Box"))); pItemCheckBox->SetValue(_T("agree with conditions")); pItemCheckBox->SetBool(TRUE); pCustom->AddChildItem(new CCustomItemButton(_T("Left Origin"), FALSE, TRUE)); pCustom->AddChildItem(new CCustomItemButton(_T("Right Origin"), FALSE, TRUE)); pCustom->AddChildItem(new CCustomItemButton(_T("Pointer"), TRUE, TRUE)); pCustom->AddChildItem(new CCustomItemButton(_T("Gradient"), TRUE, FALSE)); } m_groupAppearance.SubclassDlgItem(IDC_GBOX_APPEAR, this); m_groupSort.SubclassDlgItem(IDC_GBOX_SORT, this); m_groupColor.SubclassDlgItem(IDC_GBOX_COLOR, this); // Set control resizing. SetResize(IDC_PROPERTY_GRID, SZ_TOP_LEFT, SZ_BOTTOM_RIGHT); SetResize(IDC_GBOX_APPEAR, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_CHK_TOOLBAR, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_CHK_HELP, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_CHK_VERBS, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_CHK_DOUBLE, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_CHK_TABITEMS, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_CHK_HIGHLIGHT, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_COMBO_THEME, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_GBOX_SORT, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_SORT_CATEGORIES, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_SORT_ALPHABETICAL, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_SORT_NOSORT, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_GBOX_COLOR, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_CHK_CUSTOMCOLORS, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_BUTTON_SWITCHSTATE, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_COMBO_BORDER, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_CHECK_SHOWBUTTONS, SZ_TOP_RIGHT, SZ_TOP_RIGHT); SetResize(IDC_CHK_RIGHTTOLEFT, SZ_TOP_RIGHT, SZ_TOP_RIGHT); // Load window placement AutoLoadPlacement(_T("PropertyGridSample")); m_cmbTheme.AddString(_T("xtpGridThemeDefault")); m_cmbTheme.AddString(_T("xtpGridThemeNativeWinXP")); m_cmbTheme.AddString(_T("xtpGridThemeOffice2003")); m_cmbTheme.AddString(_T("xtpGridThemeCool")); m_cmbTheme.AddString(_T("xtpGridThemeSimple")); m_cmbTheme.AddString(_T("xtpGridThemeDelphi")); m_cmbTheme.AddString(_T("xtpGridThemeWhidbey")); m_cmbTheme.AddString(_T("xtpGridThemeOfficeXP")); m_cmbTheme.AddString(_T("xtpGridThemeOffice2007")); m_cmbTheme.SetCurSel(0); m_cmbBorder.AddString(_T("xtpGridBorderNone")); m_cmbBorder.AddString(_T("xtpGridBorderFlat")); m_cmbBorder.AddString(_T("xtpGridBorderStaticEdge")); m_cmbBorder.AddString(_T("xtpGridBorderClientEdge")); m_cmbBorder.SetCurSel(3); return TRUE; // return TRUE unless you set the focus to a control } void CPropertyGridDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CPropertyGridDlgBase::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CPropertyGridDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CPropertyGridDlgBase::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CPropertyGridDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CPropertyGridDlg::OnClickedChkToolbar() { UpdateData(); m_wndPropertyGrid.ShowToolBar(m_bToolBarVisible); } void CPropertyGridDlg::OnClickedChkHelp() { UpdateData(); m_wndPropertyGrid.ShowHelp(m_bHelpVisible); } void CPropertyGridDlg::OnClickedChkVerbs() { UpdateData(); if (m_bVerbsVisible) { m_wndPropertyGrid.GetVerbs()->Add(_T("Sample Verb"), 0); } else { m_wndPropertyGrid.GetVerbs()->RemoveAll(); } } void CPropertyGridDlg::OnClickedSort() { UpdateData(); m_wndPropertyGrid.SetPropertySort((XTPPropertyGridSortOrder)m_nSort); } LRESULT CPropertyGridDlg::OnGridNotify(WPARAM wParam, LPARAM lParam) { if (wParam == XTP_PGN_INPLACEBUTTONDOWN) { CXTPPropertyGridInplaceButton* pButton = (CXTPPropertyGridInplaceButton*)lParam; if (pButton->GetItem()->GetID() == 510 && pButton->GetID() == XTP_ID_PROPERTYGRID_EXPANDBUTTON) // 2 Buttons { AfxMessageBox(_T("Expand button")); return TRUE; } } if (wParam == XTP_PGN_SORTORDER_CHANGED) { m_nSort = m_wndPropertyGrid.GetPropertySort(); UpdateData(FALSE); TRACE(_T("SortOrder Changed.\n")); } if (wParam == XTP_PGN_ITEMVALUE_CHANGED) { CXTPPropertyGridItem* pItem = (CXTPPropertyGridItem*)lParam; TRACE(_T("Value Changed. Caption = %s, ID = %i, Value = %s\n"), pItem->GetCaption(), pItem->GetID(), pItem->GetValue()); if (DYNAMIC_DOWNCAST(CXTPPropertyGridItemEnum, pItem)) { if (pItem->GetMetrics(TRUE, FALSE)) { pItem->GetMetrics(TRUE, FALSE)->m_nImage = ((CXTPPropertyGridItemEnum*)pItem)->GetEnum(); } } if (pItem->GetID() == 501) // Dynamic Options { CXTPPropertyGridItems* pSiblingItems = pItem->GetParentItem()->GetChilds(); for (int i = 0; i < pSiblingItems->GetCount(); i++) { if (pSiblingItems->GetAt(i) != pItem) { pSiblingItems->GetAt(i)->SetHidden(!((CXTPPropertyGridItemBool*)pItem)->GetBool()); } } } } if (wParam == XTP_PGN_SELECTION_CHANGED) { CXTPPropertyGridItem* pItem = (CXTPPropertyGridItem*)lParam; if (pItem) { if (pItem->IsKindOf(RUNTIME_CLASS(CXTPPropertyGridItemColor))) { TRACE(_T("Color Item. Selection Changed. Item = %s\n"), pItem->GetCaption()); } if (pItem->GetID() == ID_ITEM_VERSION_LANGUAGE) { //pItem->SetDescription(pItem->GetDescription() + "!"); } } } if (wParam == XTP_PGN_EDIT_CHANGED) { CXTPPropertyGridInplaceEdit* pEdit = DYNAMIC_DOWNCAST(CXTPPropertyGridInplaceEdit, (CWnd*)lParam); if (pEdit && pEdit->GetItem()) { // Custom Validation if (pEdit->GetItem()->GetID() == ID_ITEM_VERSION_LANGUAGE) { CString str; pEdit->CEdit::GetWindowText(str); if (str.GetLength() > 30) { MessageBeep((UINT)-1); pEdit->SetSel(0, -1); pEdit->ReplaceSel(str.Left(30)); } } // Custom Validation if (pEdit->GetItem()->GetCaption() == _T("ItemsInMRUList")) { CString str; pEdit->CEdit::GetWindowText(str); int i = _ttoi(str); if (i > 20) { MessageBeep((UINT)-1); pEdit->SetSel(0, -1); pEdit->ReplaceSel(_T("20")); } } } } return 0; } void CPropertyGridDlg::OnClickedCustomcolors() { UpdateData(); if (m_bCustomColors) { m_wndPropertyGrid.SetCustomColors( RGB(200, 200, 200), 0, RGB(182, 210, 189), RGB(247, 243, 233), 0); } else m_wndPropertyGrid.SetStandardColors(); } void CPropertyGridDlg::OnOK() { CXTPPropertyGridItem* pItem = 0; pItem = m_wndPropertyGrid.FindItem(ID_ITEM_VERSION_LANGUAGE); TRACE(_T("%s - %s\n"), pItem->GetCaption(), pItem->GetValue()); pItem = m_wndPropertyGrid.FindItem(_T("SaveOnClose")); TRACE(_T("%s - %s\n"), pItem->GetCaption(), pItem->GetValue()); CPropertyGridDlgBase::OnOK(); } typedef void (CXTPPropertyGridItem::*ITEMFUNCTIONPTR)(); void _DoCollapseExpand(CXTPPropertyGridItems* pItems, ITEMFUNCTIONPTR pFunction) { for (int i = 0; i < pItems->GetCount(); i++) { CXTPPropertyGridItem* pItem = pItems->GetAt(i); if (pItem->HasChilds()) { (pItem->*pFunction)(); _DoCollapseExpand(pItem->GetChilds(), pFunction); } } } void CPropertyGridDlg::OnButtonSwitchstate() { if (m_bCollapse) { _DoCollapseExpand(m_wndPropertyGrid.GetCategories(), &CXTPPropertyGridItem::Collapse); } else { _DoCollapseExpand(m_wndPropertyGrid.GetCategories(), &CXTPPropertyGridItem::Expand); } m_bCollapse = !m_bCollapse; } void CPropertyGridDlg::OnClickedChkDouble() { UpdateData(); LOGFONT lfIcon; VERIFY( ::SystemParametersInfo( SPI_GETICONTITLELOGFONT, sizeof( lfIcon ), &lfIcon, 0 ) ); if (m_bDoubleFont) lfIcon.lfHeight *= 2; CFont fntNormal; fntNormal.CreateFontIndirect(&lfIcon ); m_wndPropertyGrid.SetFont(&fntNormal); } void CPropertyGridDlg::OnClickedWinXPTheme() { UpdateData(); m_wndPropertyGrid.SetTheme(m_bWinXPTheme? xtpGridThemeNativeWinXP: xtpGridThemeDefault); } void CPropertyGridDlg::OnSelchangeComboTheme() { UpdateData(); m_wndPropertyGrid.SetTheme((XTPPropertyGridPaintTheme)m_nTheme); } void CPropertyGridDlg::OnSelchangeComboBorder() { UpdateData(); m_wndPropertyGrid.SetBorderStyle((XTPPropertyGridBorderStyle)m_cmbBorder.GetCurSel()); } void CPropertyGridDlg::OnChkTabitems() { UpdateData(); m_wndPropertyGrid.NavigateItems(m_bTabItems); } void CPropertyGridDlg::OnClickedHighlightChanged() { UpdateData(); m_wndPropertyGrid.HighlightChangedItems(m_bHighlightChanged); } void CPropertyGridDlg::OnClickShowButtons() { UpdateData(); m_wndPropertyGrid.SetShowInplaceButtonsAlways(m_bShowButtons); } void CPropertyGridDlg::OnClickRightToLeft() { UpdateData(); m_wndPropertyGrid.SetLayoutRTL(m_bRightToLeft); }