The Advanced CMarkup product starts with the CMarkup Developer version and bundles in the full MFC source code of three Visual Studio 6.0 projects. These programs all use CMarkup intensively and are a valuable resource for programmers implementing the numerous kinds of functionality they cover. The Advanced Developer component source code is not available for evaluation, but the programs are free so you are strongly encouraged when applicable to try out the programs under the conditions you would be using the components. And if you have specific requirements you are counting on, please ask before purchasing. When you purchase an Advanced CMarkup Developer License you get: |
These Visual Studio projects utilize the developer version of CMarkup, and they contain a treasure trove of useful C++ MFC source code including reusable classes encapsulating editing, printing, sockets, buffers, markup viewing, animation, message nodes, and dialog threads.
The Advanced CMarkup Developer License symbol is displayed by source code components only available to Advanced CMarkup Developers. |
This is not a typical component package because it is the entire source code for these freeware programs. All of these features are demonstrated in action, allowing you to learn by example which is perhaps the deepest, most reliable kind of documentation. A few of the classes are lightly documented (follow the links below), but may change slightly from release to release within reason.
The carefully designed classes and project architectures are meant to be small, compact and easy to understand with descriptive names and straight to the point implementation to match expectations of Visual Studio developers. Code snippets and pseudo code are provided below to give a sense of what is involved.
Any one of the major classes and feature points in the Advanced CMarkup Developer sources represents fifty to as many as several hundred hours of development as well as reuse and testing in various scenarios. So it is a worthwhile purchase for any one of the following features.
1. CDataEdit a large text edit control. This is a CDataEdit m_edit; // OnCreate if ( ! m_edit.Create( this, IDC_EDIT_EG ) ) return -1; m_edit.SetWordWrap( false ); | ||
2. CMarkupEditorTreeCtrl m_tree; CImageList m_ilTree; // OnCreate if ( ! m_tree.Create( this, IDC_TREE_EG ) ) return -1; m_ilTree.Create( IDB_IL_TREE, 16, 0, RGB(255,255,255) ); m_tree.SetImageList( &m_ilTree ); | ||
3. CMudCtrl an HTML-like control. This is a <B>Title</B>
<I>Please</I> <A href="home.htm" flags="56">click</A>.
| ||
4. XML formatting. Use the code supplied in // Start tag csTagName = xml.GetTagName(); SmartAppend( csNew, nNewBufLen, CString("<"+csTagName) ); nAttr = 0; while ( ! (csAttr= xml.GetAttribName(nAttr++)).IsEmpty() ) { xml.GetAttribOffsets( csAttr, &nStart, &nLen ); ... | ||
5. CAnimationEngine m_ae; GetClientRect( &m_rect ); CPaintDC dc( this ); m_ae.SetScreen( dc, m_rect ); CAnimationItem* pItemCake = NULL; pItemCake = &m_ae.CreateItem( csLetter ); pItemCake->SetFont( "36,Verdana" ); pItemCake->FadeOut(); pItemCake->SetStart( m_ae.RandPt(90) ); pItemCake->SetFrames( 300 ); | ||
6. // Main service CNodeHandler m_nodehandler; m_nodehandler.StartNode( csNodeName ); CString csLoc = m_nodehandler.GetLoc(); // Monitor CNodeHandler m_nodehandler; m_nodehandler.Attach(); m_nodehandler.NotifyMonitor( m_hWnd ); m_nodehandler.GetAppList( xml ); // Client application CNodeHandler m_nodehandler; m_nodehandler.Attach(); m_nodehandler.Register( csAppID ); while ( m_nodehandler.Retrieve(&xmlMsg) ) { csStatus = xmlMsg.FindGetData( "/*/Payload/Status" ); ... | ||
7. Character set encoding functions. The firstobject XML editor contains code to enumerate system supported encodings and display Unicode and ANSI encoding information on characters. | ||
8. // MainFrame::OnCreate if ( ! m_wndOutBar.Create( _T("OutBar"),this,ID_BAR_EG) ) { TRACE0("Failed to create output bar\n"); return -1; } EnableDocking( CBRS_ALIGN_ANY ); m_wndOutBar.EnableDocking( CBRS_ALIGN_ANY ); ShowControlBar( &m_wndOutBar, FALSE, FALSE ); DockControlBar( &m_wndOutBar, AFX_IDW_DOCKBAR_BOTTOM ); UINT nDockState = m_wndOutBar.SetPosState(csState); if ( nDockState && nDockState != AFX_IDW_DOCKBAR_FLOAT ) DockControlBar( &m_wndOutBar, nDockState ); | ||
9. | ||
10. CBuffer a binary handling class. This class has thread-safe reference copying so that you can efficiently assign CBuffer buf1; buf1.Set( pRaw, nRawSize ); CBuffer buf2( buf1 ); buf2 = "JKL"; CString csHex = buf2.GetViewable(); // "4A4B4C" | ||
11. A CMarkup object as a multi-thread data repository. The firstobject News Reader uses CMarkup as a feed repository which is accessed by dialog threads, download threads, and even the screen saver thread. The application also demonstrates a single instance implementation that works whether the News Reader is started up by Windows as a screen saver, screen saver settings dialog, or by the user as the News Reader. In all cases the integrity of the single data repository is maintained. | ||