// MarkupSampleDlg.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 "MarkupSample.h" #include "MarkupSampleDlg.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMarkupSampleDlg dialog CMarkupSampleDlg::CMarkupSampleDlg(CWnd* pParent /*=NULL*/) : CXTPResizeDialog(CMarkupSampleDlg::IDD, pParent) { //{{AFX_DATA_INIT(CMarkupSampleDlg) //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMarkupSampleDlg::DoDataExchange(CDataExchange* pDX) { CXTPResizeDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMarkupSampleDlg) DDX_Control(pDX, IDC_TREE_MARKUP, m_wndTree); DDX_Control(pDX, IDC_BUTTON_MORE, m_btnMore); DDX_Control(pDX, IDC_CHECK_MARKUP, m_wndCheckBox); DDX_Control(pDX, IDC_BUTTON_MARKUP, m_wndButton); DDX_Control(pDX, IDC_RADIO_MARKUP, m_wndRadio); DDX_Control(pDX, IDC_STATIC_MARKUP, m_wndStatic); DDX_Control(pDX, IDC_LIST_MARKUP, m_wndList); DDX_Control(pDX, IDC_TABCONTROL, m_wndTabControl); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMarkupSampleDlg, CXTPResizeDialog) //{{AFX_MSG_MAP(CMarkupSampleDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_COMMAND(ID_MORE_POPUPCONTROL, OnMorePopupcontrol) ON_COMMAND(ID_MORE_UNICODESUPPORT, OnMoreUnicodesupport) ON_COMMAND(ID_MORE_TIPOFTHEDAY, OnMoreTipoftheDay) ON_WM_ERASEBKGND() ON_COMMAND(ID_MORE_TASKDIALOG, OnMoreTaskdialog) //}}AFX_MSG_MAP ON_CBN_DROPDOWN(IDC_BUTTON_MORE, OnMoreDropDown) ON_NOTIFY(TCN_SELCHANGE, IDC_TABCONTROL, OnTabControlSelChanged) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMarkupSampleDlg message handlers void HyperlinkClick(CXTPMarkupObject* pSender, CXTPMarkupMouseEventArgs* /*pArgs*/) { AfxMessageBox(_T("Hyperlink Clicked")); } void CMarkupSampleDlg::OnHyperlinkClick(CXTPMarkupObject* pSender, CXTPMarkupRoutedEventArgs* pArgs) { if (pSender->IsKindOf(MARKUP_TYPE(CXTPMarkupHyperlink))) { CXTPMarkupString* pTag = MARKUP_DYNAMICCAST(CXTPMarkupString, ((CXTPMarkupHyperlink*)pSender)->GetTag()); if (pTag) { TRACE(_T("Tag = %ls"), (LPCWSTR)*pTag); CString str; str.Format(_T("Hyperlink Clicked. Tag = %ls"), (LPCWSTR)*pTag); AfxMessageBox(str); } else AfxMessageBox(_T("Hyperlink Clicked")); pArgs->SetHandled(); } } BOOL CMarkupSampleDlg::OnInitDialog() { CXTPResizeDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. _ASSERTE((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); _ASSERTE(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 default font for all dialog controls. SendMessageToDescendants(WM_SETFONT, (WPARAM)(HFONT)XTPFontManager()->GetFont()); // 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 UINT nIDFavorite = 10; XTPImageManager()->SetIcons(_T("FAVORITES.PNG"), &nIDFavorite, 1, 0); UINT nIDHelp = 12; XTPImageManager()->SetIcons(_T("HELP.BMP"), &nIDHelp, 1, 0); m_wndStatic.SetMarkupText( _T("") _T("") _T(" Change Case") _T(" Change all the selected text ") _T("to UPPERCASE, lowercase, or other common capitalizations.") _T(" ") _T(" ") _T(" ") _T(" Press F1 for more help.") _T(" ") _T("") _T("")); UINT nIDLove = 13; XTPImageManager()->SetIcons(_T("LOVE.PNG"), &nIDLove, 1, 0); m_wndRadio.EnableMarkup(); m_wndCheckBox.EnableMarkup(); m_wndButton.EnableMarkup(); HTREEITEM hItemRoot = m_wndTree.AddItem(_T("Personal Folders"), -1, -1, TVI_ROOT); m_wndTree.AddItem(_T("Deleted Items"), -1, -1, hItemRoot); m_wndTree.AddItem(_T("Drafts"), -1, -1, hItemRoot); m_wndTree.AddItem(_T("Inbox "), -1, -1, hItemRoot); m_wndTree.AddItem(_T("Junk E-mail "), -1, -1, hItemRoot); m_wndTree.AddItem(_T("Node with a long text that requires ") _T("scrolling"), -1, -1, hItemRoot); m_wndTree.AddItem(_T("Outbox"), -1, -1, hItemRoot); m_wndTree.Expand(hItemRoot, TVE_EXPAND); // m_wndTabControl.SetAppearance(xtpTabAppearanceStateButtons); m_wndTabControl.SetAppearance(xtpTabAppearanceVisualStudio2003); m_wndTabControl.GetPaintManager()->m_clientFrame = xtpTabFrameSingleLine; m_wndTabControl.EnableMarkup(); m_wndTabControl.InsertItem(0, _T("ListBox (3 ") _T("Items)")); m_wndTabControl.InsertItem(1, _T("ListBox (9 ") _T("Items)")); // Add handlers for hyperlinks m_wndStatic.GetMarkupContext()->AddHandler( CXTPMarkupHyperlink::m_pClickEvent, CreateMarkupClassDelegate(this, &CMarkupSampleDlg::OnHyperlinkClick)); m_wndRadio.GetMarkupContext()->AddHandler( CXTPMarkupHyperlink::m_pClickEvent, CreateMarkupClassDelegate(this, &CMarkupSampleDlg::OnHyperlinkClick)); m_wndCheckBox.GetMarkupContext()->AddHandler( CXTPMarkupHyperlink::m_pClickEvent, CreateMarkupClassDelegate(this, &CMarkupSampleDlg::OnHyperlinkClick)); m_wndList.GetMarkupContext()->AddHandler( CXTPMarkupHyperlink::m_pClickEvent, CreateMarkupClassDelegate(this, &CMarkupSampleDlg::OnHyperlinkClick)); m_btnMore.SetPushButtonStyle(xtpButtonDropDown); SetResize(IDC_LIST_MARKUP, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_BOTTOMRIGHT); SetResize(IDC_TABCONTROL, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPRIGHT); SetResize(IDC_LABEL_TREEVIEW, XTP_ANCHOR_BOTTOMLEFT, XTP_ANCHOR_BOTTOMLEFT); SetResize(IDC_TREE_MARKUP, XTP_ANCHOR_BOTTOMLEFT, XTP_ANCHOR_BOTTOMCENTER); SetResize(IDC_LABEL_STATIC, XTP_ANCHOR_BOTTOMCENTER, XTP_ANCHOR_BOTTOMRIGHT); SetResize(IDC_STATIC_MARKUP, XTP_ANCHOR_BOTTOMCENTER, XTP_ANCHOR_BOTTOMRIGHT); SetResize(IDC_LABEL_BUTTONS, XTP_ANCHOR_BOTTOMLEFT, XTP_ANCHOR_BOTTOMLEFT); SetResize(IDC_RADIO_MARKUP, XTP_ANCHOR_BOTTOMLEFT, XTP_ANCHOR_BOTTOMLEFT); SetResize(IDC_CHECK_MARKUP, XTP_ANCHOR_BOTTOMLEFT, XTP_ANCHOR_BOTTOMLEFT); SetResize(IDC_BUTTON_MARKUP, XTP_ANCHOR_BOTTOMLEFT, XTP_ANCHOR_BOTTOMLEFT); SetResize(IDC_BUTTON_MORE, XTP_ANCHOR_BOTTOMCENTER, XTP_ANCHOR_BOTTOMCENTER); SetResize(IDOK, XTP_ANCHOR_BOTTOMCENTER, XTP_ANCHOR_BOTTOMCENTER); return TRUE; // return TRUE unless you set the focus to a control } void CMarkupSampleDlg::AddListItem(LPCTSTR lpszMarkup) { XTP_MARKUP_LISTITEM* pItem = new XTP_MARKUP_LISTITEM(&m_wndList); pItem->Resolve(lpszMarkup); m_wndList.AddString((LPCTSTR)pItem); } void CMarkupSampleDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CXTPResizeDialog::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 CMarkupSampleDlg::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 { CXTPResizeDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CMarkupSampleDlg::OnQueryDragIcon() { return (HCURSOR)m_hIcon; } void CMarkupSampleDlg::OnMoreDropDown() { CMenu menu; VERIFY(menu.LoadMenu(IDR_MENU_MORE)); CXTPWindowRect rc(GetDlgItem(IDC_BUTTON_MORE)); TrackPopupMenu(menu.GetSubMenu(0)->GetSafeHmenu(), 0, rc.left, rc.bottom, 0, m_hWnd, 0); } void CMarkupSampleDlg::OnMorePopupcontrol() { CXTPPopupControl* pPopup = new CXTPPopupControl(); pPopup->SetTransparency(200); pPopup->SetTheme(xtpPopupThemeOffice2003); pPopup->AllowMove(TRUE); pPopup->SetAnimateDelay(500); pPopup->SetPopupAnimation(); pPopup->SetShowDelay(5000); pPopup->SetAutoDelete(TRUE); pPopup->EnableMarkup(TRUE); pPopup->GetMarkupContext()->SetDelegate(L"OnClick", CreateMarkupFunctionDelegate(&HyperlinkClick)); CXTPPopupItem* pItemText = (CXTPPopupItem*)pPopup->AddItem( new CXTPPopupItem(CRect(8, 12, 500, 130))); LPCTSTR lpszMarkup = _T("") _T(" ") _T(" ") _T(" ") _T(" ") _T(" ") _T(" ") _T(" ") _T(" ") _T(" ") _T(" ") _T(" ") _T(" ") _T(" ") _T(" ") _T(" FTSE ") _T("100") _T(" FTSE ") _T("TechMark") _T(" Dow ") _T("Jones") _T(" S&P 500") _T(" Dollar") _T(" Euro") _T(" 5,990.12") _T(" 804.10") _T(" 8,322.12") _T(" 860") _T(" 1.56") _T(" 1.59") _T(" +50.1") _T(" -0.4") _T(" +78") _T(" +15.43") _T(" +0.06") _T(" -0.11") _T(""); pItemText->SetMarkupText(lpszMarkup); pItemText->FitToContent(); CSize sz(pItemText->GetRect().Size()); // close icon. CXTPPopupItem* pItemIcon = (CXTPPopupItem*)pPopup->AddItem( new CXTPPopupItem(CRect(sz.cx + 10, 10, sz.cx + 10 + 16, 10 + 16))); pPopup->GetImageManager()->SetIcon(IDI_POPUP_CLOSE, IDI_POPUP_CLOSE); pItemIcon->SetIconIndex(IDI_POPUP_CLOSE); pItemIcon->SetButton(TRUE); pItemIcon->SetID(XTP_ID_POPUP_CLOSE); pPopup->SetPopupSize(CSize(sz.cx + 30, sz.cy + 20)); pPopup->Show(this); } void CMarkupSampleDlg::OnMoreUnicodesupport() { // It is important to NOT PASS utf8 XAML as Unicode for Unicode builds, // as MSXML won't understand mixing claimed UTF-8 XML encoding // and UTF-16 charset of the source data. Same is true for any other encoding. m_wndStatic.SetMarkupText( "" "" "" "" "Markup supports Unicode text in ANSI " "applications.Use UTF-8 encode to enter it:" "Languages: العربية (ar) • Azərbaycan (az) " "• Български (bg) • Català (ca) • Česky (cs) • Deutsch (de) • Ελληνικά (el) • English (en) " "• Esperanto (eo) • Español (es) • فارسی (fa) • Suomi (fi) • Français (fr) • 日本語 (ja) • " "한국어 (ko) • Lietuvių (lt) • മലയാളം (ml) • Македонски (mk) • नेपाल भाषा (new) • ਪੰਜਾਬੀ " "(pa) • Polski (pl) • Português (pt) • Română (ro) • Русский (ru) • Svenska (sv) • தமிழ் " "(ta) • ไทย (th) • Türkçe (tr) • Українська (uk) • Tiếng Việt (vi) • 中文 (zh)" "" "" ""); } void CMarkupSampleDlg::OnTabControlSelChanged(NMHDR* pHeader, LRESULT* pResult) { m_wndList.ResetContent(); if (m_wndTabControl.GetCurSel() == 0) { AddListItem( _T("") _T("") _T("") _T("") _T("") _T("") _T(" Link") _T("") _T("")); AddListItem( _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("")); AddListItem( _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("")); } if (m_wndTabControl.GetCurSel() == 1) { AddListItem(_T("Inbox")); AddListItem(_T("Unread Mail (4730)")); AddListItem(_T("For Follow Up [21]")); AddListItem(_T("Sent Items")); AddListItem( _T("We ") _T("have been using the Xtreme Toolkit for a very short while in our company and ") _T("already now the investment has paid for itself in terms of productivity gain. We ") _T("have been down the road of using various non-commercial packages but time is ") _T("quickly wasted on patching up these 'semi-products' for stability...Thank you for ") _T("a great product!")); AddListItem(_T("Centered Text")); AddListItem( _T("Some Text ") _T(" Some another text")); AddListItem(_T("Stack Panel")); AddListItem( _T("Grid ") _T("Text Column 1, Row 1") _T("Grid Text Column 1, Row ") _T("2Grid Text Column 2, ") _T("Row 1Grid ") _T("Text Column 2, Row 2")); } }; BOOL CMarkupSampleDlg::OnEraseBkgnd(CDC* pDC) { BOOL bResult = CXTPResizeDialog::OnEraseBkgnd(pDC); #if 0 CXTPMarkupContext* pContext = XTPMarkupCreateContext(NULL, TRUE); CXTPMarkupUIElement* pElement = XTPMarkupParseText(pContext, _T("CodejockSoftware")); XTPMarkupRenderElement(pElement, pDC->GetSafeHdc(), CXTPClientRect(this)); XTPMarkupReleaseElement(pElement); XTPMarkupReleaseContext(pContext); #endif return bResult; } void CMarkupSampleDlg::OnMoreTaskdialog() { CXTPTaskDialog td; td.SetMainInstruction( _T("Main Instruction")); td.SetContent( _T("Content Contet Content ") _T("Link")); td.EnableMarkup(); td.DoModal(); } void CMarkupSampleDlg::OnMoreTipoftheDay() { CXTPTipOfTheDay td; td.EnableMarkup(TRUE); td.GetMarkupContext()->AddHandler( CXTPMarkupHyperlink::m_pClickEvent, CreateMarkupClassDelegate(this, &CMarkupSampleDlg::OnHyperlinkClick)); td.AddTip(_T("That Tip of the ") _T("Day supports Markup?")); td.AddTip(_T("Second Tip with Hyperlink")); td.DoModal(); }