Rogue Wave® Stingray Studio Version 12.0
Getting Started
Chapter 1 Introduction to Stingray Studio
Welcome to Stingray® Studio
Supported Platforms
Prerequisites to Using Stingray Studio
Product Documentation
Types of Documents
Knowledge Base
Type Conventions
Professional Services
Technical Support
Licensing Restrictions
Library Dependencies for Distribution
Stingray Studio 3rd-Party Software Use
Chapter 2 Building the Libraries
Build Wizard
How Does It Work?
To Run the Build Wizard
Build Wizard Limitations
Building from the Command Line with nmake
Using nmake Directly
Compiling with 1-Byte Structure Alignment
Cleaning Generated Object Files
Default Windows Defines
Manifest Files
Extending Stingray Libraries
How Stingray Imports and Exports Symbols
Using CustExtDefs.h in Stingray Extensions
Extending Stingray Classes Locally in an Executable
Solving Library Build Problems
Visual Studio Compilers
Run the Build Wizard
Stingray Studio Paths in Property Sheets
Property Sheets
Adding a Property Sheet
Editing an Existing Property Sheet
Select the Proper Build Configuration
Header Files across Stingray Studio Versions
Chapter 3 Directory Organization
Stingray Studio Directory Structure
Subsystems and Packages
Top-Level Directories
Include Files
Source Files
Samples
Location of Sample Code
Utilities
Documentation
Chapter 4 Migrating Applications to Stingray Studio
A New Environment
SFL Namespaces
SFL Compatibility With Earlier Component Releases
A New Directory Structure
Migrating to MSVC 2010 or Later from Earlier Versions
Global IDE Pathing
Property Sheets
Adding a Property Sheet
Editing an Existing Property Sheet
*.vcxproj Project Extension
Target Names
Setting Target Names
Build Configurations
Build Configurations Not Checked
Template Build Configurations
Managed Configurations
To Compile an MFC Executable or Regular DLL Using /clr
To Compile an MFC extension DLL Using /clr
Using Precompiled Headers
Using Visual Studio to Compile with an Older Platform Toolset
Targeting Windows XP
Choosing the Platform Toolset and Building the Library
Deploying to the Target Platform
Specific Issues
The Multi-byte Character Set is No Longer Available with MFC 12.0
Output Files Warnings
ADO Issues as of Windows 7.0 SP1 or Later
Troubleshooting
Chapter 5 Support for the MFC Feature Pack
Introduction
What is the FoundationEx library?
Features of the FoundationEx library
Application Features
Right to Left Layout Features
Frame Features
Docking Features
User Interface Features
Multi-Column Vertical Toolbars
Auto Recovery Features
Windows 7 Taskbar Features
Cache Classes
Most Recently Used Controls RibbonBar Panel
Custom Theme Colors
Office 2013 Look and Feel
Sample
Accents and Styles
Styles
Accents
Visual Manager Architecture
Backstage View Architecture
Creating the Backstage View’s FILE Tab
Flat Style RibbonBar Controls
Category Capitalization
Removing the Application Button from the RibbonBar's Resource
BackstageView Property Pages
Menu Text
Adding SFLBackstagePropertyPageEx Pages to an Application
Handling SFLBackstagePropertyPageEx Events and Messages
Routing Backstage Property Page Messages to CMainFrame
Mock Up Images
Print Button Demo
BackstageView Helper Functions
Custom Dialog and MessageBoxes
Example
References
Customization
Migration to Office 2013
Step 1: Changes to MainFrm.cpp
Step 2: Caps
Step 3: Application Style Setting
Step 4: Close Event
Step 5: File Tab Property Pages
Migration Essentials
Migration Prerequisites
Microsoft Visual Studio 2008 with Service Pack 1 or later installed
Stingray Studio 10.2 or later must be installed
Migration Requirements
File Paths
File Naming
Header File Changes
The _SFLEXDLL Preprocessor Macros
Migrating Existing Stingray Studio Applications to Use the FoundationEx Library
Description:
Class Migration Guide:
CWinApp/CWinAppEx
CFrameWnd/CFrameWndEx
CMDIFrameWnd/CMDIFrameWndEx/SECMDIFrameWnd/SECWorkbookWnd
CMDIChildWnd/CMDIChildWndEx/SECMDIChildWnd/SECWorksheet
SECFDIFrameWnd/SECFDIChildWnd => SFLFDIFrameWndEx/SFLFDIChildWndEx
SECToplevelFrame => SFLTopLevelFrameEx
CControlBar/SECControlBar => SFLDockablePaneEx
CToolBar/SECToolBar/SECCustomToolBar/CMFCToolBar => SFLToolBarEx
CMenuBar/SECMenuBar => SFLMenuBarEx
CStatusBar/CMFCStatusBar/SECStatusBar/SECCustomStatusBar => SFLStatusBarEx
SECDialogBar => SFLPaneDialogEx
Migrating a New Stingray Studio Application to Use the FoundationEx Library
Migrating Traditional MFC (non-MFC Feature Pack) Applications to Use the FoundationEx library
File > New > Project
Select MFC Standard Project Type
Select Menu and Toolbar
Finish the Application Wizard
Replace CWinApp with SFLWinAppEx
Replace CFrameWnd or CMDIFrameWnd with SFLFrameWndEx or SFLMDIFrameWndEx Respectively
Replace CMDIChildWnd with SFLMDIChildWndEx
Replace CControlBar with SFLDockablePaneEx
Unicode Build Configurations
Add a MenuBar
Migrating an MFC Feature Pack-based Application to Use the FoundationEx Library
Replace CWinAppEx with SFLWinAppEx
Replace CFrameWndEx or CMDIFrameWndEx with SFLFrameWndEx or SFLMDIFrameWndEx Respectively
Replace CMDIChildWndEx with SFLMDIChildWndEx
Replace CDockablePane with SFLDockablePaneEx
Unicode build configurations
Replace CMFCToolBar with SFLMenuBarEx
Replacing the Application Look and Feel
Tips and Troubleshooting
Creating Applications without a MenuBar
RWUXTheme Compatibility
Office 2007 Theme Issues
Conflicts with INT16
Multiple Toolbar Layout
Unique Toolbar IDs
Lay Out Toolbars Next to Each Other
SetRegistryKey() Conflicts
Crash in pMainFrame->LoadFrame(IDR_MAINFRAME)
Runtime Crash in afxregpath.cpp
Use of DECLARE_DYNAMIC() / IMPLEMENT_DYNAMIC()
Warning GetWindowMenuPopup failed!
Importing/Exporting Implementation
Resource Corruption
OnNcActivate() Illegal Call of Non-static Member Function
Chapter 6 Porting MFC Controls to the .NET® Platform with PInvoke
Overview
Migrating From MFC to .NET
Objective Views Sample
Additional Notes
Objective Grid Sample
Building the Objective Grid Sample
Testing the Objective Grid Sample
Next Steps
Using Compiler Option /clr
Chapter 7 MFC and WPF Interoperability
Introduction to MFC and WPF Interoperability Tools
FoundationEx .NET
Framework and References
Header Files and Namespaces
CLR Support
Exceptions
Optimization
FoundationEx .NET Sample
WPF Window Layouts
Canvas
Dock Panel
Grid
Stack Panel
Wrap Panel
XAML
Delegate Mapping
Creating XAML Controls in Code Behind
WPF Docking Panes
Overrides
CreateControl()
AdjustLayout()
Wrap Panel Access
Appendix A 3rd‑Party Licenses
Stingray Studio 3rd-Party Software Use
Autohide Source Code License
Base64 and Quoted-Printable Encoding/Decoding Source Code License
Regex v2.24 Library Source Code
TIFF Library Source Code
zlib Library v 0.95/1.23 Source Code
Stingray® Foundation
Chapter 1 Introduction to Stingray Foundation Library
Welcome to Stingray Foundation Library
Product Features
Location of Samples
Supported Platforms
Getting Help
Documentation
Knowledge Base
Professional Services
Technical Support
Licensing Restrictions
Chapter 2 Getting Started
Building the SFL Libraries
SFL Library Naming Conventions
SFL Build Configurations
Visual Studio Environment Setup for SFL
Building SFL Libraries with the Visual Studio Solution
Make Files and Building Directly with nmake
Cleaning SFL Build Targets
SFL Build Wizard
Chapter 3 Interface‑Based Programming
Introduction
IQueryGuid and guid_cast
GUID Maps
Reference Counting
Chapter 4 Design Patterns
Introduction
The Subject-Observer Pattern
The Composite Pattern
The Object Factory Pattern
Example
Polymorphic Iteration
The Polymorphic Iterator Templates
The Traversable Interfaces
The Traversable Mix-in Templates
Lifetime Management
MFC and COM Collections
Chapter 5 Properties Package
Introduction to SFL Properties
Property Objects
Property Containers
A Property Container Implementation
The Property Map
Property Accessors
Property Container Example
ActiveX Controls
ActiveX Property Containers
Using ActiveX Property Containers
Chapter 6 Events Package
Introduction to SFL Events
Event Objects
Windows Messages
The Event Factory
Windows Message Cracking
Event Routers
Default Event Router Implementation
ATL Integration
MFC Integration
Event Listeners
Dispatching Events
Adapter Classes
Using Event Listeners
Efficiency of Event Listeners vs. Message Maps
Chaining Event Routers
Custom Event Types
Chapter 7 Layout Manager
Layout Manager Framework
Issues with Resizable Windows
Layout Manager Architecture
Layout Nodes
Layout Recalculation Process
Recalculation
Realization
Node Creation
Node Initialization
Integration with ATL
Adding Layout Management to Your Applications
Layout Algorithms
Scale Layout
Relative Layout
Border-Client Layout
DC Layout Nodes
Splitter Layout
Borders and Edges
Examples
Chapter 8 Model View Controller
What is MVC?
The MVC Design Pattern
Model-View-Controller Relationship
The Subject-Observer Pattern in MVC
Additional Reading on MVC
Visual Components
Visual Component Interfaces
CMvcVisualComponent
CMvcVisualPart
Coordinate Mapping
CMvcLogicalPart
Wrappers (Decorators)
MvcWrapper_T
MvcBorderWrapper_T
MvcScrollWrapper_T
MFC Specifics
MVC Models
CMvcModel
Presentation Models
MFC Specifics
MVC Viewports
CMvcViewport
Associating Viewports with Windows
Getting a Device Context
Event Routing
Scrolling
Zooming
ATL Specifics
CMvcAtlWndViewport
CMvcClientViewport
MFC Specifics
MvcViewport
MvcScrollView_T
MvcBufferedWrapper_T
MVC Controllers
CMvcController
MFC Specifics
Connecting the Model, Viewport, and Controller
CMvcComponent
ATL Specifics
MVC Commands and Undo/Redo
CMvcCommand
Commands as Messages
IMvcUndoRedo
MvcTransactionModel
MVC Principles and Practice
Minimize Coupling
Avoid “Positional Awareness” in the Controller
Use Interface-Based Programming Techniques
Use Commands to Define the Model’s Services
Exploit Hierarchical Decomposition
Distinguish Between Architecture and Technology
Capture the System in the Model
Use MVC as a Widget Architecture
Distinguish Between Graphical and Non-Graphical Systems
Using MVC in MFC Applications
Define a Model Class
Define a Controller Class
Define a Viewport Class
Chapter 9 Print Package
The Print Package
Printable Objects
Print Documents
Printer Configurations
Printers
Print Jobs
Print Preview
Using Print Preview with ATL
Chapter 10 GDI Classes
SFL Graphics
GDI Objects
Creation and Destruction
Lifetime Management
Examples
Device Contexts
Device Context Creation and Destruction
MFC Compatibility
Chapter 11 String and Collection Classes
SFL Utility Classes
Enhanced String
Character Set Conversion
Casting
Formatting and Buffering
Type Definitions
API Structure Wrappers
MFC Compatibility Classes
Chapter 12 Developing Applications
Overview
Features and Benefits
Basic Architecture
HelloSFL
HelloSFL’s Application
HelloSFL’s Message Loop
HelloSFL’s Main Window
Application Classes
CApp
CMTIApp
Initializer Classes
Windowing Classes
Container Windows
CContainerImplBase
CContainerWindowImpl
CContainerDialogImpl
Frame Windows
Client Windows
MDI Support
CMDIChildImpl
CMDIClientWindow
CMDIFrame
CMDIFrameImpl
Common Dialogs
COpenFileDialog and CSaveAsFileDialog
CFontDialog
CColorDialog
CFindDialog and CReplaceDialog
User Interface Updating
User Interface Updating Essentials
Chapter 13 The AppWizard
Overview
Conclusion
Chapter 14 Persistence Framework
Persistence and Property Bags
COM Property Bags
Persistable Objects
SFL Property Bags
Data Types
IPersistenceStrategy Interface
Registry Property Bag
XML Property Bag
Examples
Using Property Bags in C++ Code
MVC Integration
Chapter 15 XML Serialization Architecture
Overview
Use of the MSXML6 SDK
Usage Example
Architecture Classes
The XML Document Adapter class
SECXMLArchive
Attributes
Insertion Operations
Extraction Operations
Serialize Variant
Hierarchical nesting support
IXMLSerialize
XML Formatters
Built-in Formatters
The XML Formatter Factory
Collection Class Formatters
Other MFC types Formatters
Creating Custom Formatters
XML Serialization Support in Objective Grid and Objective Chart
Base64 and Quoted-Printable Encoding Classes
Content Transfer Encoding
Base64
Quoted-Printable
SFL Content-Transfer-Encoding Classes
Class Hierarchy
SECCTEBase
SECBase64Encoder
SECQPEncoder
Usage
Non-Streaming Mode
Streaming Mode
XML Framework Tutorial
The starter application
The starter application classes
Modifying application data classes
Adding SFL XML Support
stdafx.h
Resource includes
XML-enabling the document class
Using the SECXMLDocAdapter_T wrapper class
Modifying the base application
Adding menu commands
Menu command handlers
Creating XML formatters
The CXShape base class formatter
Implementing CXShape::XMLSerialize()
Creating formatters for derived CXShape classes
The CXDiagram formatter
Implementation of CXDiagramFMT::XMLSerialize()
Finishing up
Objective Grid
Chapter 1 Introduction to Objective Grid
Chapter 1 Introduction to Objective Grid
Welcome to Objective Grid
Product Features
Supported Platforms
Location of Samples
Licensing Restrictions
Stingray Naming Conventions
File Redistribution
Getting Help
Documentation
Available Formats
Common Terms
PART I User’s Guide
Chapter 2 Design Overview
Design Introduction
The Style Object
The Range Object
The Parameter Object
Conclusion
Styles Architecture
Style Implementation
CGXGridCore - Styles Interface
CGXStyle - Class Interface
Drawing and Updating
CGXGridCore - Commands Interface
Accessor Methods
CGXGridCore - Drawing Overridables
Control Architecture
Current Cell Interface
Current Cell Notifications
Predefined Controls
Browser Architecture
CGXBrowserGrid - Interface
Current Record
Data Source Binding
ODBC Browser
ADO Browser
Formula Engine
Adding Formula Support to Your Application
Initializing the Grid With Data and Formulas
Changing Cell Data and Formulas at Run Time
Run-Time Initialization
Choosing Between Grid Types
Chapter 3 Technical Overview
Introduction
Class Summary
Drawing Classes
CGXGridCore
CGXView
CGXGridView
CGXGridWnd
CGXGridHandleView
CGXGridHandleWnd
CGXGridHint
Control Classes
CGXControl
CGXBitmapButton
CGXCheckBox
CGXCheckBoxEx
CGXCheckListComboBox
CGXComboBox
CGXComboBoxWnd
CGXCurrencyEdit
CGXDateTimeCtrl
CGXEditControl
CGXHeader
CGXHotSpotEdit
CGXListBox
CGXMaskControl
CGXPasswordControl
CGXProgressCtrl
CGXPushbutton
CGXRadioButton
CGXRadioButtonEx
CGXRichEditCtrl
CGXSpinEdit
CGXStatic
CGXTabbedComboBox
CGXTabbedComboBoxWnd
CGXVScrollEdit
CGXWndWrapper
CGXChild
CGXButton
CGXBitmapButtonChild
Style Classes
CGXStyle
CGXStylesMap
CGXStylesDialog
CGXStyleSheet
CGXFont, CGXBrush, CGXPen
CGXAbstractUserAttribute
CGXUserAttribute
Data Structures
CGXGridParam
CGXData
CGXProperties
CGXCommand
CGXAbstractControlFactory
CGXControlFactory
CGXGridDropTarget
CGXNoOleDataObjectProxy
CGXNoOleDataSourceProxy
CGXDisplayPropertiesDialog, CGXHeaderFooterDialog, CGXPrintPropertiesDialog
Saving, Restoring, and Customizing Colors
CGXRange
CGXRangeList
CGXPrintDevice
Browser Classes
CGXBrowserGrid
CGXBrowserView
CGXBrowserWnd
CGXBrowseParam
CGXDbParam
CGXDynamicRecordset
CGXODBCGrid
CGXRecordInfoBeam
CGXRecordInfoWnd
CGXRecordInfoSplitterWnd
CGXRecordView
CGXRecordWnd
CGXRecSetInfo
CGXAdoGrid
CGXAdoParam
CGXAdoRecordView
CGXAdoRecordWnd
Utility Classes
CGXDrawingAndFormatting
CGXLongOperation
CGXScrollTip
CGXSplitterWnd
CGXTabBeam
CGXTabInfo
CGXTabWnd
Formula Engine Classes
CGXFormulaSheet
CGXWorksheetFunctions
CGXDefaultWorksheetFunctions
CGXFormula
Plug-in Component Classes
CGXPluginComponent
CGXMouseWheelPlugin
CGXIntelliMousePlugin
CGXGridMouseWheelPlugin
CGXGridIntelliMousePlugin
CGXScrollTipPlugin
CGXCellTipPlugin
Chapter 4 Getting Started
Creating a Starter Application
Using the Objective Grid Static Libraries
Using the Objective Grid Extension DLLs
Converting an Application to Use the Objective Grid Extension DLL
Using Objective Grid in a Dialog Box
Objective Grid vs. ActiveX Controls
Using Objective Grid in a Dialog Template
Troubleshooting
Miscellaneous Tips
Checklist for Build Configurations
Miscellaneous Configurations
Objective Grid and VC++
Building and Using VC++ Libraries
Make Files and Building Directly with nmake
Known Issues in VC++ Unicode Libraries
Objective Grid AppWizard
Objective Grid Designer Utility
Setting Paths in Visual Studio
Objective Grid and Windows Look and Feel
Vista Look and Feel
XP Look and Feel
Using Objective Grid in a WinForm
Direct Use of Objective Grid in a WinForm
Use of Objective Grid in a .NET Control
Chapter 5 Using Objective Grid
Cell Value
Filling the Grid with Values
Getting Values from the Grid
Clearing Cell Values
Cell Attributes
Reusing Style Objects
Disabled and Read-Only Cells
What Are Disabled Cells?
What Are Read-Only Cells?
Covered Cells
Floating Cells
What Are Floating Cells?
Merged Cells
What Are Merged Cells?
Registration and Usage of Base Styles
Registration and Usage of User Attributes
Creating Custom Attributes
Controls
Registration and Usage of Controls
Columns and Rows
Column and Row Count
Column and Row Sizing
Using Code to Size
End User Resizing
Hidden Columns and Rows
Using Code to Hide
End User Hiding and Unhiding
Frozen Columns and Rows
Cell and Window Coordinates
Cell Coordinates
Window Coordinates
Device Context
Row Heights and Column Widths
Converting Between Cell and Window Coordinates
Hit-Testing
Grid Lines
Grid Line Drawing
Events
Keyboard Events
Keyboard Shortcuts
Deriving a Grid
Virtual Grids
Supplying Data
Storing Data
Formula Support
Undo and Redo
CGXGridCore - Undo/Redo interface
Transaction-Like Blocks of Commands
Long Operations
Sorting
Basic Sorting
Natural Sorting
Sorting Example
Pre-Built Dialogs for Accessing Objective Grid Objects
Display Settings Dialog
Header / Footer Dialog
Page Setup Dialog
Number Formatting
Value Types
Formatting Number Values for Static Cells
Suppressing the Display of Negative Values for Zero
Recognizing Locale Settings in Static Formatting
Miscellaneous
Using CGXDrawingAndFormatting
IntelliMouse Support
Rotated Text in Cells
Character Sets
Direct Copying and Moving of Cells
AutoScrolling
OLE Drag and Drop Integration
Enabling “Drag and Copy”
Scroll Tip Support
CellTip Support
Tools
Objective Grid Designer
What is the Objective Grid Designer?
The Grid Designer Components
Tutorial for Creating a Simple Sample Layout File
Creating Formula Sheets
Converting .OGL (regular CGXData) Files to .OGF (CGXFormula Sheet) files
Creating Layout Files for ODBC Queries
When Do I Use the Objective Grid Designer and When Do I Write Code?
Stingray AppWizard
Steps for Creating a Starter Application
Chapter 6 Reducing the Size of Your Application
How Objective Grid Affects the Size of Your Application
Using Objective Grid As a Shared DLL
Linking Objective Grid Statically
The Control Factory Class
Registration of Cell Types
Registration of Concrete Implementations for Grid Features
Registration of Window Classes
The Build Wizard
DLL Naming
Building the Libraries
Component Reference
Control Factory Class
Basic Cell Types
Advanced Cell Types
Edit Extensions
Basic Features
Mouse Actions
Spanned Cells
Printing
Data Exchange
Drawing
Date Time Formatting
Advanced Settings
Window Class Registration
Library Linking
WndView
Ole Drag and Drop
Nonstandard Cell types
Visual Components
Formula Support
Dialogs
Frame Window Classes
Collection Classes
Basic Classes
BrowserGrid
ADO Grid
ODBC Grid
Resources
A Note On the Implementation
Chapter 7 1stGrid Tutorial
Introduction
1stGrid - Step 1
Create a New 1stGrid Project
1stGrid AppWizard Options
1stGrid Project Settings
Modify 1stGrid's stdafx.h
Include Objective Grid Resources in 1stGrid
Modify the 1stGrid Application Implementation File
Modify 1stGrid View's Header File
Modify 1stGrid View's Implementation File
Override CMy1stGridView::OnInitialUpdate()
Compile and Run 1stGrid - Step 1
1stGrid - Step 2
Modify 1stGrid View's Menu Resource
Map the 1stGrid Menu Messages
Map the 1stGrid Accelerator Keys
More Formatting
Compile and Run 1stGrid - Step 2
1stGrid - Step 3
Modify the 1stGrid Document's Header File
Modify the 1stGrid Document's Implementation File
Modify the 1stGrid View's Implementation File
Add a Splitter Frame Class for 1stGrid
Change the 1stGrid View to the Splitter Frame Class
Compile and Run 1stGrid - Step 3
Chapter 8 DbQuery Tutorial
Introduction
DbQuery - Step 1
Create a New DbQuery Project
DbQuery AppWizard Options
DbQuery Project Settings
Modify DbQuery's stdafx.h
Include Objective Grid Resources in DbQuery
Modify the DbQuery Application Implementation File
Register a Database
Add a CRecordset Derived Class
Modify DbQuery View's Header File
Modify DbQuery View's Implementation File
Compile and Run DbQuery - Step 1
DbQuery - Step 2
Modify the View's Menu Resource
Map the DbQuery Menu Messages
Compile and Run DbQuery - Step 2
DbQuery - Step 3
Add a New Frame Class
Change the DbQuery View to the New Frame Class
Compile and Run DbQuery - Step 3
Chapter 9 DlgGrid Tutorial
Introduction
Create a New DlgGrid Project
DlgGrid AppWizard Options
DlgGrid Project Settings
Modify DlgGrid's stdafx.h
Include Objective Grid Resources in DlgGrid
Modify the DlgGrid Application Implementation File
Create a New CGXGridWnd Derived Class
Put a Custom Control on the Main Dialog Template
Modify CDlgGridDlg's Declaration
Include the Derived Grid's Header
Modify CDlgGridDlg::OnInitDialog()
Compile and Run DlgGrid
Chapter 10 VirtGrid Tutorial
Introduction
VirtGrid Overview
The Program
Initialization and Column Count
Row Count
Making the Virtual Connection Between Grid Object and Data Source
VirtGrid Conclusion
Chapter 11 Build and Runtime Troubleshooting
Troubleshooting
PART II Programmer’s Guide
Chapter 12 Advanced Design Overview
Advanced Design Overview Introduction
Objective Grid Defined
Objective Grid Core Architecture In Brief
Objective Grid Control Architecture
The pure CGXControl approach
Functions that are called from the grid and translate into calls to the edit window
Functions called from within the control which translate the call to the grid object
The Window Wrapper Approach
Control Sharing In the Grid
External State Functions
Current Cell State Functions
Objective Grid Integration With Document/View Architecture
Push Model Details
Undo/Redo Architecture
Other Issues Related to the Undo/Redo Architecture
Objective Grid Style Architecture
The styles map
Chapter 13 Objective Grid Concepts and Features
Programming Concepts
Extending Functionality in Objective Grid
Multiple Inheritance
Returning References
Automatic Linking
MFC Messages Versus Objective Grid Virtuals
Objective Grid and Windows XP Visual Styles
Grids
Database Grids
Hierarchical Grids
Tabbed Grids
Controls
CGXCheckBox, CGXCheckBoxEx
CGXCheckListComboBox
CGXProgressCtrl
CGXRadioButton & CGXRadioButtonEx
CGXTabbedComboBoxWnd
Giving Objective Grid an Excel XP Look
Headers
Color of Selected Cells
Defining the Color of Cell Headers
Chapter 14 The Formula Engine
Introduction
What is the Objective Grid Formula Engine?
Implementing the Formula Engine
Adding formula support
Storing expressions and values in cells
Formula Engine Support in CGXGridCore
Access to CGXFormulaSheet
Access to Cell Data
Drawing
Clipboard
Undo/Redo
Changes that cannot be undone
Display Formula Expression in Cells
Formula Engine Limitations
CGXFormulaSheet Class
Cell Values
Row and Column Coordinates
Sheet Settings
Recalculation
Named Ranges
Range Specification
Expression Evaluation
Clipboard Cut/Copy and Paste
Cell Operations
Cells and Ranges
Text Cell Values
Entering Text
Treating Numeric or Date Entries as Text
Entering Special Characters
Numeric Values
Entering Numeric Values
Changing the Numeric Format
Dates and Times
Entering Date and Time Values
Formulas
Entering Formulas
Built-in Functions
Tips
Ranges
Creating a Range Object
Named Ranges
Copying and Moving Cells
Copying Formulas
Moving Data
Deleting Rows and Columns
Calculations
How Objective Grid Calculates
Mode of Recalculation
Method of Recalculation
Foreground
As Needed
Iterative Calculations
Constraint Checking
Precision
Objective Grid Formulas
Formula Syntax
Formula Values
Formula Operators
Referencing Other Cells in Formulas
To reference a cell by address:
To reference a contiguous group of cells by address:
Cell Referencing in Objective Grid
Relative Reference
Absolute Reference
Named Ranges
Indirect (or Current Cell Offset) Reference
Constraint Expressions
Explicit Dependency
Built-in Functions
Mathematical Functions
Statistical Functions
Conditional Statistical Functions
String Functions
Logic Functions
Digital Logic Functions
Financial Functions
Date and Time Functions
Miscellaneous Functions
Embedded Tools
Using Objective Grid Built-in Functions
Arguments
Using Operators with Functions
Computed Cell References
Quick-Reference Guide to Built-in Functions
Mathematical Functions
Statistical Functions
Conditional Statistical Functions
String Functions
Logic Functions
Financial Functions
Date and Time Functions
Miscellaneous Functions
Embedded Tools
Error Messages
Types of Errors
Errors in Functions
Formula Syntax Errors
Formula Evaluation Errors
Error Messages Reference
Chapter 15 Advanced Concepts
Objective Grid DLL Architecture
Dynamic Link Libraries
MFC DLLs
Regular DLLs
Regular DLLs Linked Dynamically to MFC
Extension DLLs
Exporting Functions from Extension DLLs
Module State
Application Calls Grid Extension DLL
Your Regular DLL Links to the Grid Extension DLL. The Application Uses this DLL
Regular DLL Links to Grid Extension DLL. Application Tries to Use the Grid Directly
Module State and Cleanup
Manage State
Multithreaded Applications
Sharing Extended Functionality Across Classes
Shared Source
Plug-in Components
Motivation
Existing Approaches
Approach One
Approach Two
Summary of Existing Approaches
The Plug-in Approach
Message Dispatching
Reuse of Existing Code
Default Window Procedure
The CGXPluginComponent Class
Implementing a Sample Plug-in Component
Using the IntelliMouse Plug-in Component
Using the IntelliMouse Component with any View or Window
Using the IntelliMouse Component with CGXGridCore
Extending the Undo/Redo Mechanism
Print, Print Preview
Implementation
Setting Print and Print Preview Functionality in a CGXGridWnd-Derived Grid
Examples
Related Samples
Using This Product Outside MFC
Internationalization
Fonts
Far Eastern Languages
Resources
Struct Member Alignment
Chapter 16 Optimization
Grid Architecture Review
Initializing Formula Grids
Using Formula Sheet Methods
SetFormulaRowCol()
SetNumberRowCol() and SetTextRowCol()
Copying Cells
Populating the Grid
Improving Performance
Speeding Up Computations
Using Profiling in Visual Studio
Reducing Application Size
Chapter 17 CSliderCtrl Tutorial
Introduction
CSliderCtrl Overview
The CSliderCtrl Program
The Declaration
Activating and Deactivating the Control
Drawing the Active and Inactive State
Chapter 18 BrwsGrid Tutorial
Introduction
BrwsGrid Overview
The BrwsGrid Program
Initialization and Setting Column Count
Supplying the Row Count Dynamically
Managing Sorted Rows and Moved Columns
Supplying the Value To the Grid and Storing the Changes
Deleting Rows
Conclusion
Chapter 19 Dynamic Splitter Window Support
Introduction
Process
Chapter 20 Page Break and Scaled Printing Support
Introduction
Adding Page Break and Scaled Printing Support
Chapter 21 Database Engine Architecture
Introduction to Database Engine Architecture
Database Engine Architecture
DBEngine
Initializing APIs
Fetching APIs
Updating APIs
Miscellaneous APIs
Summary of Database Architecture
Layout Manager
Browser-Like Layout
Browser-Like Editing
Hierarchical Browser Layout Manager
Database Engine Grid
Hierarchical Database Engine Grid
Initializing the Grid with CGXDBEngine
ADOEngines
CGXADOEngine
CGXHierADOEngine
Database connectivity with Objective Grid
Microsoft Access
Enabling ODBC Source on x64
Microsoft SQL Server
Oracle
Re-Enabling DAO in Objective Grid
Chapter 22 Grid XML Serialization Architecture
Overview
Extensions
Formatters for Objective Grid Components
Tag Names for Data Components
Selective Linking via Build-Wizard
Usage Example
Sample
Chapter 23 XML Read/Write Library
Introduction
Library Purpose
Implementation
Macros and Tools Ease Development
Sample WRITE_MAP
Usage
Chapter 24 Hierarchical Grid Architecture
Introduction
Absolute Logical Coordinate Transformation
Regular Grid
Wrapped Grid
Seamless Current Cell Movement Between Wrapped Rows
Row/Column Layout Interfaces
Multiple Row Type Grid
Visually Resizing Columns
Row/Column Count API
Chapter 25 The ATL and Objective Grid
Introduction
Wrapping Objective Grid In an ATL ActiveX Control
Using Objective Grid Inside ATL Applications
Module State Issues
Chapter 26 Excel Data Exchange Support
Introduction
Structure of a BIFF 8 file
Basic Structure of a BIFF File
Record Identifier
Record Length
Structure of the Read/Write Mechanism
Shared and Unshared Data
Shared Objects
Unshared Objective Grid Data
Usage Samples
Sample 1
Sample 2
Advanced Section
Extending the Reader
Extending Tables
Supported Excel Fields
Background Color
Unwanted Black Background
Removing Background Color
Important Notes
Excel Automation with Objective Grid
Enabling Excel Integration in a Grid Project
Creating an ExcelGrid Sample
Using the Excel-Related Classes
Data And Style Exchange Classes
Notes for ExcelGrid Sample
Testing the ExcelGrid Sample
Benefits of Excel-Grid Integration
Chapter 27 GridEx Feature Pack Extension
Overview
Architecture
GridEx Features
System Requirements
Code Source and Sample Locations
Source Locations
Sample Locations
Tool Tips
Implementation
Setting Tool Tips in a Grid
Related Samples
Color Button
Implementation
Setting CGXColorButton in a Grid
Intercepting Calls in the CGXColorButton Control
User Interaction
Related Samples
Excel-Like Selection
Implementation
Setting an Excel-Like Selection in a Grid (for CGXGridView-Derived grid)
Excel-Like Selection Drawing Behaviors
Related Samples
Context Menu
Implementation
Setting a Context Menu in Grid
User Interaction
Related Samples
Excel-Like Headers
Implementation
Setting Excel-Style Headers in Grid
User Interaction
Related Samples
Use of Objective Grid as a Pseudo-3D Color Chart
Implementation
Sample
Objective Toolkit
Chapter 1 Introduction to Objective Toolkit
Welcome to Objective Toolkit
Product Features
MFC Extension Classes
Full Source Code
Compatibility and Build Options
Location of Samples
Supported Platforms
Getting Help
Documentation
Knowledge Base
Professional Services
Technical Support
Licensing Restrictions
Chapter 2 Objective Toolkit Quick Start
Overview
Installation
Building Objective Toolkit
Using the Build Wizard
To build a custom configuration version of the library
DLL naming issues
Compiler Flags
Build Target Naming Conventions
Build Configuration Options
To build the 32-bit or 64-bit libraries
Miscellaneous Build Issues
Using Multiple Library Configurations
Make Files and Building Directly with nmake
Components Requiring RTTI Support
Building the Samples
Automatic linking
To incorporate Objective Toolkit into your application
Distributing Objective Toolkit Applications
Basic Tutorial—MaskEdit Control
Using Component Headers to Increase Application Build Performance
The Component Headers
To use the component headers in your project
Chapter 3 The Objective Toolkit AppWizard
Overview
Creating a Skeleton Application
Chapter 4 Simple Controls
Overview
Browse Edit Controls
Browse Edit Classes
SECBrowseEditBase
SECBrowseFileEdit
SECBrowseDirEdit
Using the Browse Edit Classes
To incorporate the SECBrowseEdit classes into your code
Customizing the Browse Edit Control
Browse Edit Sample
Button Controls
Button Class Hierarchy
SECOwnerDrawButton
Using SECOwnerDrawButton
To attach an SECOwnerDrawButton to a button resource in a dialog
To create SECOwnerDrawButtons without using a button dialog resource
Customizing SECOwnerDrawButton
To extend the SECOwnerDrawButton class
SECBitmapButton
Using SECBitmapButton
To attach an SECBitmap Button to a dialog resource
To create SECBitmapButtons without using a button dialog resource
SECBitmapButton alignment
SECMenuButton
Using SECMenuButton
To attach an SECMenuButton to a dialog resource
To create SECMenuButtons without using a button dialog resource
SECMenuButton Menu Placement
SECWellButton
Using SECWellButton
To attach an SECWellButton to a dialog resource
To create SECWellButtons without using a button dialog resource
Customizing SECWellButton
Calculator Control
SECCalculator
SECPopupCalculator
Using SECCalculator
Customizing SECCalculator
Calculator Sample
Calendar Control
To incorporate the SECCalendar class into your code
SECCalendar Key Methods
Customizing SECCalendar
SECCalendar Sample
Color Well Control
SECColorWell
Using SECColorWell
Customizing SECColorWell
SECPopupColorWell
To incorporate SECPopupColorWell into your code
ColorWell Sample
Currency Edit Control
SECDropEdit
SECCurrencyEdit
Using SECCurrencyEdit
SECCurrencyEdit::Format
SECCurrencyEdit Messages
SECCurrencyEdit Sample
Date/Time Edit Control
SECDateTimeCtrl
SECDateTimeCtrl styles
SECDateTimeCtrl messages
SECDTGadget
Date Formats
Predefined Format Types
Format Strings
Null Data Entry Mode
Using SECDateTimeCtrl
Date/Time Edit Control Sample
List Box Edit Control
SECListBoxEditor
SECListBoxFileEditor
SECListBoxDirEditor
Using the List Box Edit Classes
Customizing the List Box Edit Classes
Extending the Editable List Box Classes
Editable List Box Sample
Marquee Control
Using SECMarquee
Customizing SECMarquee
Marquee Sample
Masked Edit Control
SECMaskEdit
Using SECMaskEdit
Creating a Mask to Use with SECMaskEdit
Mask Edit Sample
Extended Progress Control
Using SECProgressCtrl
Customizing SECProgressCtrl
Extending SECProgressCtrl
Enhanced ComboBox with AutoComplete
The Enhanced ComboBox Class
Using SECComboBoxEx
Chapter 5 Look and Feel Styles
Overview
Microsoft Vista Classic Style
Visual Studio .NET/Office XP Style
Enabling .NET/Office XP Styles
Microsoft Office 2003 Style
Enabling Office 2003 Styles
Customizable Visual Styles
Chapter 6 Customizable Toolbars
Overview
The Customizable Toolbar Classes
SECCustomToolBar
SECToolBarManager
SECToolBarsBase
SECToolBarsDlg
SECNewToolBar
SECToolBarsPage
SECToolBarCmdPage
SECToolBarSheet
The Toolbar Button Classes
SECStdBtn
SECStdMenuBtn
SECTwoPartBtn
SECTBTextBtn
SECWndBtn
SECComboBtn
Comparing SECToolbar to SECCustomToolBar
Toolbar Button Map
STD_BUTTON
STD_MENU_BUTTON
TEXT_BUTTON
TEXT_BUTTON_EX
TWOPART_BUTTON
COMBO_BUTTON
Toolbar Button Styles
Button style macros
Button State Macros
Creating New Button Types
Customization Dialogs
Creating SECCustomToolBars—Arguments and Cautions
The Effect of Modifying Toolbars on Persistence
Using the Customizable Toolbar Classes
To incorporate customizable toolbars into your application
To implement toolbars with the flat cool look with a toolbar manager
To implement toolbars with the flat cool look without a toolbar manager
To implement button groups
To use multiple toolbar bitmap resources with the toolbar manager
To find a button on a customizable toolbar
To use the button map
To implement a text button
To implement a text button with styles
To implement a combo button
To implement a twopart button
To implement a bitmap button using styles
To make a customizable toolbar dockable
To reposition customizable toolbars at run time
To obtain a pointer to a specific customizable toolbar
To iterate the customizable toolbars
To implement the toolbar customization dialog
To invoke the toolbar customization dialog with a toolbar button
To hide and show customizable toolbars
To set the docking order of customizable toolbars
To changing the font for text buttons
To save and restore customizable toolbars
To draw owner-draw controls embedded in a vertically docked toolbar
Chapter 7 Menu Bars
Overview
Menu Bar Classes
SECMenuBar
SECMDIMenuBar
Customizing the Display of Menu Pop-ups
Menu Button Map Macros
WM_EXTENDCONTEXTMENU
Using the Menu Bar Classes
To Incorporate Objective Toolkit Menubars Into Your Code—Simple Case
To Incorporate Objective Toolkit Menubars Into Your Code--Advanced Case
To Implement SECMenuBar Or SECMDIMenuBar Without a Toolbar Manager
To remove the close button from a floating menu
To switch between menus
To use bitmap menus without the cool-look toolbars
To use bitmap menus in context menus
MenuBar Sample
Chapter 8 Docking Windows
Overview
Features of Docking Windows
Flat-Style Drawing
Auto-Hide Docking Windows
Features
Vertical Frame Docking
Auto-Hide Pins
Vertical/Horizontal Text
Floating Grippers
Icons
Active Windows
Creating Auto-Hide Docking Windows
The Docking Window Classes
Docking Window Frame Classes
SECFrameWnd
SECMDIFrameWnd
SECMDIChildWnd
Docking Window Control Bar Classes
SECControlBar
SECDialogBar
SECControlBarManager
SECDockState
Message Routing Issues
Extended ControlBar Styles
Embedding CViews in Docking Windows
Using the Docking Window Architecture
To create an application with Objective Toolkit docking windows
To incorporate Objective Toolkit docking windows into an existing MDI application
To incorporate Objective Toolkit docking windows into an existing SDI application
To use Objective Toolkit docking windows inside an OLE IP server
To create a docking window based on a dialog resource
To create a docking window not based on a dialog resource
To set the style of a docking window
To make a docking window dockable
To create a non-dockable control bar
To dock a docking window that is floating
To float a docking window that is docked
To make an SECDialogBar size diagonally when floated
To receive notifications when the docked state of a docking window changes
To hide a docking window
To control the docking location of a docking window
To determine where a docking window is docked
To determine the row and column of a docked window
To modify a control bar’s context menu
To add a toolbar to a control bar
To access controls in the docking window inside a message handler
To route messages to the client area of SECControlBar
Customizing Objective Toolkit Docking Windows
Key Extended Control Bar Members
Docking Windows Sample
Chapter 9 Image Classes
Overview
The Image Classes
SECImage
SECDib
SECGif
SECJpeg
SECPcx
SECTarga
SECTiff
SECImage Format
Using the Image Classes
To read an image from a file
To view GIF/TIFF images
To display an image
To convert an image
To copy an image
To manipulate an image
To write an image to a file
To convert to a CBitmap object
To convert from a CBitmap object
To create from a CDC object
To load an image from a resource
To stream image data
Key Image Methods
Image Sample
Chapter 10 MDI Alternatives
Overview
Benefits of MDI Alternatives
Multiple Top-level Interface (MTI)
MTI Class – SECToplevelFrame
Using MTI
To convert an existing SDI application to MTI
To convert an existing MDI application to MTI
To create a new MTI-based application
Customizing MTI
To load the document into the initial, empty frame
Message Dispatching in an MTI Application
Other Uses For SECToplevelFrame
MTI Sample
Floating Document Interface (FDI)
Differences between FDI and MTI
FDI Classes
SECFDIChildWnd
SECFDIFrameWnd
Using FDI
To convert an existing SDI application to FDI
To convert an existing MDI application to FDI
To create a new FDI-based application
FDI Sample
Workbook Document Interface (WDI)
Adding Flat Style Drawing to the Workbook Window
Adding Flat Style Drawing to the Shortcut Window
Adding Flat Style Drawing to the 3D Tab Control Window
WDI Classes
SECWorkbookWnd
SECWorksheetWnd
SECWorkbookClientWnd
To convert an existing MDI application to WDI
Customizing WDI
To change the tab display order
To draw a different worksheet tab label
To change the icon
To change the appearance of the tabs
Key WDI Methods and Data Members
Chapter 11 Shortcut Bar
Overview
The Shortcut Bar Classes
SECShortcutBar
SECBar
SECListBar
SECShortcutListCtrl
Shortcut Bar Styles
Shortcut Bar Notification Messages
Shortcut Bar Callbacks
Using SECShortcutBar
To incorporate an SECShortcutBar into your application
To add selectable icons to a shortcut bar
To embed a window in a shortcut bar
To change the way the bars are drawn
To allow shortcut bars to behave like buttons
To enable context menus in a shortcut bar
To have the shortcut bars display the focus rectangle
To enable/disable animated scrolling
To receive notifications when an icon in the SECShortcutListCtrl is clicked
To determine which icon is clicked in an SECListBar window
To change the orientation of the shortcut bar at run time
To embed an SECShortcutBar into a splitter pane
Shortcut Bar Samples
Chapter 12 Framework‑Tailored Shortcut Bars
Overview
The Shortcut Bar Classes
ATL
MFC
Shortcut Bar Styles
Using the Shortcut Bar
Using the Windowed Shortcut Bar
Using the Non-Windowed Shortcut Bar
Setting visual aspects of the shortcut bar
Adding a context menu to the shortcut bar
Shortcut Bar Sample
Chapter 13 Tabbed Windows
Overview
The Tabbed Window Classes
SECTabControlBase
SECTabControl
SEC3DTabControl
SECTabWndBase
SECTabWnd
SEC3DTabWnd
Tabbed Window Styles
Tab Control Notification Messages
Using SECTabWnd and SEC3DTabWnd
To add SECTabWnd or SEC3DTabWnd to a frame window
To add a tabbed window to a dialog
Removing the 2D Tab Scroll Buttons
To put 3D tabs on the side or top of the tabbed window
To enable scroll bars in the 2D tabbed window
To add keyboard accelerator support
To add a window to the tabbed window
To create and add a view to the tabbed window
To remove a tab
To access the CWnd associated with a tab
To change the font of a tab
To receive user event notifications from the tabbed window
To get a pointer to the SECTabWnd from a contained view
To insert a splitter window into a tabbed window
Problem with Tabbed Windows in Docking Views
Tabbed Window Sample
Chapter 14 Tree Control & Tree View
Overview
The Tree Control Classes
SECTreeCtrl
SECListCtrl
The Tree View Classes
SECTreeView
SECListView
Tree Control Data Structures
TV_ITEM
NM_TREEVIEW
TV_HITTESTINFO
Tree Item States
Tree Control/Tree View Styles
Tree Control Notifications
Using the Tree Control Classes
To create a tree control in a dialog
To create a tree control dynamically
To add a tree item
To create multiple columns
To set the text on subitems of multi-column trees
To create a standard image list for tree items
To create a state image list for tree items
To create a tree item with a state image
To change a state image on a tree item
To add an overlay image to a tree item
To find out which items are selected
To specify different colors for tree items
To specify different fonts for tree items
To update the tree control
To incorporate SECTreeCtrl into an application already using CtreeCtrl
Tree Control Samples
Chapter 15 User Interface Extensions
Overview
Bitmapped Dialog
Using SECBitmapDialog
To incorporate the SECBitmapDialog class into your code
To set the image used by the SECBitmapDialog class
Customizing SECBitmapDialog
Gradient Caption Extension
The Gradient Caption Classes
SECFrameWnd
SECMDIFrameWnd
Using the Gradient Caption Feature
Keyboard Shortcuts
The Keyboard Shortcut Classes
SECShortcutTable
SECCommandList
SECShortcutDlg
Using the Keyboard Shortcut Classes
To incorporate keyboard shortcuts into your application
To update menus
To allow or disallow certain keyboard combinations
Setting Up Commands
Excluded IDs
Saving the Shortcuts
Keyboard Shortcut Notes
Keyboard Shortcut Sample
Splash Window
The SECSplashWnd Class
Using SECSplashWnd
SECSplashWnd Samples
Custom Status Bar
Using SECCustomStatusBar
To incorporate SECCustomStatusBar into your code
To display the progress bar over the status bar
Customizing SECCustomStatusBar
To customize panes with the PANEINFOEX structure
To extend the SECCustomStatusBar class
Thumbnail Classes
The Thumbnail Classes
SECTNBitmap
SECTNDC
SECTNDocument
SECTNFileDialog
SECTNView
SECTNWinApp
Using the Thumbnail Classes
Thumbnail Sample
Tip of the Day Dialog
The SECTipOfDay Class
SECTipOfDay Resource IDs
Using SECTipOfDay
To create a modal tip of the day dialog
To create a modeless tip of the day dialog
To change the caption of the tip of the day dialog
To hide buttons on the tip of the day dialog
SECTipOfDay Sample
Tray Icon Class
To incorporate the Tray Icon Class into your application
To add notification handlers for mouse events
To animate a tray icon
Tray Icon Sample
User-Tools Menu
The User-Tools Menu Classes
SECUserTool
SECUserToolsDlg
Using the User-Tools Menu Classes
User-Tool Menu Sample
Workspace Manager
The Workspace Manager Classes
SECWorkspaceManager versus SECWorkspaceManagerEx
Support for Dynamically Created Controlbars
Multiple Views per Document, Multiple Views Per Frame
Using SECWorkspaceManagerEx
To add workspace management to your application
To load and store the workspace state automatically
To add application specific information to the workspace state
To store the WDI workbook state in the workspace state
Using SECWorkspaceManager
Workspace Manager Samples
Full-Screen View
The Full-Screen View Class
SECFullScreenView Styles
Using the SECFullScreenView Class
To incorporate the SECFullScreenView class into your application
To set or retrieve the full-screen view mode styles
To terminate full-screen view mode
To use full-screen view mode with docking windows
To change the default full-screen view toolbar styles
SECFullScreenView Sample
Chapter 16 Utility Classes
Overview
Compressed File I/O
SECCompressFile
Using SECCompressFile
SECCompressFile Sample
Encrypted File I/O
Electronic Codebook (ECB)
Output Feedback Mode (OFB)
The SECCryptoFile Classes
SECCryptoFile
SECBlackBox
The Encryption Algorithm
Password Transformation
The Stream Cipher
The Cipher Modes
Limitations
Using SECCryptoFile
To encrypt data to a file
To read an encrypted file
SECCryptoFile Sample
Safe Multi-Threaded Trace Output
Use of the Multi-Threaded Logging Class
File System Access
SECFileSystem
Using SECFileSystem
To copy a file
To copy multiple files
To compare two files
To delete a file
To delete multiple files
To get information about a file
To parse filename information on a file
To get a list of files in a directory
To create a directory
To change the working directory
SECFileSystem Sample
Random Number Generation
The SECRandom Class
Using SECRandom
To generate an unsigned random number (0 to 32767)
To set the range of the random numbers generated
To generate weighted random values
Key SECRandom Methods
SECRandom Sample
Formula Engine
Features of the Formula Scanner
Use of the Formula Engine Class
Win32 Registry Access
The SECRegistry Class
Using SECRegistry
To open the registry
To open a subkey
To enumerate registry keys
To enumerate values within a key
To read a value
To create a key
To delete a key
To recursively delete keys
To close a registry connection
SECRegistry Sample
Chapter 17 Data Extraction Classes
Overview
Building the Libraries
Using Regular Expression Libraries
Data Extraction Framework
Example: Setting Up a Scanner
Introduction to the Deals Sample
Declaring the Processor
Implementation Details
Token Definitions
States
Sub Expressions
Defining the Listener
Optional Overrides
OnMatch() Implementation
Note on Exceptions
Chapter 18 View Classes
Overview
The Zoom and Pan View Classes
SECZoomView
SECPanView
SECPanWnd
Zoom Modes
Using the View Classes
To incorporate zooming support into an application
To incorporate panning support into an application
To incorporate a panning overview window to an application
Key Zooming Methods
Key Panning Methods
Zooming/Panning Sample
Chapter 19 ActiveScript Hosting Framework
Overview
Overview of JavaScript
VBScript
Hosting an Active Script
ActiveScript Classes
SECAAppObj
SECAFormObj
SECAScriptHost
SECAScriptOccManager
ActiveScriptErrorHandler
Using the ActiveScript Framework
ActiveScript and Type-libraries
To prevent the Objective Toolkit library from automatically including ScriptHost.tlb as resource
To incorporate scripting into your application
ActiveScript Sample
Chapter 20 ActiveHost Form Scripting and Editing Framework
Overview
ActiveHost Classes
SECScriptHostDoc
SECScriptHostView
SECAFloatDocTemplate
SECADlgFrame
Using the ActiveHost Form Editing Framework
To incorporate ActiveHost into your application
The ActiveHost Sample
Chapter 21 Advanced Docking Windows
Overview
Advanced Docking Windows Architecture
Advanced Docking Windows Features
Docking Inside an MDI Child Frame
Floating MultiDock Mode
Realtime Drag Mode
Alternate Border Layout Logic
Advanced Docking Configurations
Advanced Docking Windows Splitter Styles
Using the Advanced Docking Windows Architecture
To incorporate advanced docking windows into your application
To create dockable device context nodes
To use docking insertion constraints
To adjust the border sizing
To use ‘real-time’ drag mode
To use floating multidock mode
To use alternate border layout logic
To integrate a dockable node inside an MDI child frame
Advanced Docking Windows Examples
Chapter 22 Docking Views
Overview
Features of Docking Views
Issues when Docking a CView
Docking Views Options
The Docking Views Classes
SECDockableFrame
SECFrameBar
SECMDIChildWnd
SECMultiDocTemplate
Architectural Overview
Docking Views Containment Model
WM_SYSCOMMANDEX
Docking Views and MDI Alternatives
Using the Docking Views Architecture
To incorporate docking views into your application
To set docking view styles
To toggle the presence of the docking button on a dockable view frame
To disable right mouse double-clicks on the docking view caption bar
To create an initially docked view
To start an application with no initial view
To put a splitter in a docking view
To dock a view
To float a view as an MDI child
To obtain a pointer to the view
To control the initial size and position of a docking view as it is docked
Chapter 23 Layout Manager Framework
Overview
Issues with Resizable Windows
Benefits of the Objective Toolkit Layout Manager
Objective Toolkit Layout Manager: MFC Integration
Objective Toolkit Layout Manager: Strong Architecture
Objective Toolkit Layout Manager: Ease of Integration
Layout Manager Architecture
Layout Nodes
Window Listeners
Layout Factory
Splitter Node
Layout Algorithms
Alignment Layout
Scale Layout
Grid Layout
GridBag Layout
Relative Layout
Using the Layout Manager
Adding Layout Management to Your Applications
Layout Manager Examples
Scale Layout in a Dialog
Relative Layout in a Dialog
Grid Layout, Alignment Layout and Splitter in a Formview
To specify min/max sizes for layout nodes
To implement a custom layout manager
Layout Manager Sample
Chapter 24 Microsoft Agent Extensions
Overview
Overview of Microsoft Agent Technology
Agent Extension Classes
SECAgentCharacterExPtr
IAgentApp
SECAgentApp
SECAgentCharAct
SECAgentNotifySink
Using the Agent Extension Classes In Your Applications
Agent Extensions Sample
Chapter 25 Namespace Extension Wizard
Overview
Installing Stingray Namespace Extension Wizard
Creating a Skeleton Namespace Extension
Selecting Namespace Options
Show Up
Register For
Support UI Object
Tutorial
Create the Skeleton Namespace Extension Project
Work Through the Generated Code
Change The Data Structure For PIDL
Implementing CreateEnumIDList()
Modify CNSExtCompView::InitList()
Give Each Node an Informative Name
Change the Default Context Menu Handling
Give Node An Icon
Chapter 26 The Hyperlink Classes
Overview
Using the Hyperlink Classes
Customizing the Hyperlink Control
Sample
Chapter 27 Web Browser Extensions
Overview
Feature List
Getting the IWebBrowser2 Interface in IE
IWebBrowser2 from a NEW IE instance
Grab IE under HWND
Init IWebBrowser2 with HTML in Memory
Retrieve HTML in IWebBrowser2
CHTMLView Extensions
Miscellaneous Utility Functions
Sample
Chapter 28 The APP ATL Object
Overview
Overview of Asynchronous Pluggable Protocol
Objective Toolkit APP ATL Object Classes
SECPlugProt
SECPlugProtImp
FileDownloadInfo
SECWorkerThreadFetchObject
WorkerThreadMain
Using the Objective Toolkit APP ATL Object in Your Applications
Sample
Chapter 29 ATL and Objective Toolkit Components
Overview
Wrapping Objective Toolkit Components in an ATL ActiveX Control
An Example: An ATL ActiveX Control Built From SECTreeCtrl
Pre-Build Set-Up
Building Your Control
Testing Your Control
Further Extensions
Sample Code
Chapter 30 Introduction to Objective Toolkit for ATL
Overview
Features and Benefits
Features of Objective Toolkit for ATL
COM Collection Classes
Threading Classes
Interface Token Class
Functors
Constructing Functors
Invoking Functors
Interface Tokens and Functors
Threads and Functors
SAFEARRAY Classes
COtlSimpleSafeArray
RGSEdit
Changing What Gets Registered
Editing a Registry Script
Adding Keys
Editing Keys
Deleting Keys
Adding Values
Editing Values
Managing Categories
Launching RGSEdit from the IDE
Microsoft Message Queue Class
Requirements
Creating a queue
Opening a queue
Receiving Messages
Sending Messages to a Queue
Cleanup
XML Helpers
Creating an XML Document From Scratch
Opening an Existing XML Document
Adding Tags
Saving the XML Document to a File
Reading Tag Values
Trace Output
Internet Explorer Band Object Wizard and Classes
Changing Size Constraints
Context Menu Commands
Parameters
Desktop Application Toolbar Class and Object Wizard
Creating an AppBar
Docking and Layout
Appbar Tab Window Control
Creation
Message Reflection
Image List
Selection Notification
Window Layout Manager for Composite Controls
Layout Manager Algorithms
Scale Layout
Relative Layout
Adding Layout Management to Your Applications
COM Task Allocator Memory Debugging Tools
Using the Task Allocator Debugger
Marshaling Classes
Software Requirements
Distributing Objective Toolkit for ATL Applications
Objective Views
Chapter 1 Introduction to Objective Views
Welcome to Objective Views
Product Features
Location of Samples
Supported Platforms
Dependencies and Relationships
Getting Help
Documentation
Knowledge Base
Professional Services
Technical Support
License Restrictions
Chapter 2 Getting Started with Objective Views
Building the Objective Views Libraries
Naming Conventions
Build Configurations
Building with Visual Studio
Make Files and Building Directly with nmake
Stingray Foundation Library
Cleaning Build Targets
Build Wizard
Using the Objective Views AppWizard
Starting the Objective Views AppWizard
Selecting Options in the Objective Views AppWizard
Toolbar Commands in Visual Studio
Zoom/Pan
Drawing
Alignment
Rotate
Nudge
Structure
Layout
Canvas
Generating the Application
Chapter 3 Quick Tour
Summary of the Quick Tour
Create Symbols Using Symbol Designer
Add Symbols to Your Application
Creating Code for the Toolbar
Add the Finishing Details
Adding Drop-Down Menus
Organizing Toolbars in the Application
Add an Arrow to the Link
Integrate Objective Views into an Existing Project
Including Objective Views Files
Adding MVC Architecture and OLE Support
Add the Property Cache
Add the Model and Support for OLE Drag-and-Drop
Add the Viewport
Adding Menu Items and Accelerators
Adding Objective Views Toolbars
Chapter 4 Product Overview
Introduction to Product Overview
Key Concepts in Objective Views
Canvas
Viewport
Model
Controller
Component
Composite
Connection
Control Handles
Label
Link
Port
Property
Symbol
Translation
Drawing Capabilities
Drawing Components
Manipulating Components
Selection
Movement
Rotation
Scaling
Grouping and Ungrouping Components
Ordering Components
Editing Vertices
Symbols
Labels
Property Pages
General Properties
Edit Properties
Line Properties
Fill Properties
Font Properties
Text Properties
Position and Size
Canvas Background
Canvas Grid
Rulers
Zoom
Pan
Measurements and Size
Size and Units
Drawing Scale
Coordinate Mapping
Page Layout
File Export
Chapter 5 The Symbol Designer
Purpose of the Symbol Designer
Creating a Symbol
Setting the Symbol Type
Saving a Symbol
Alternatives to Using Symbol Designer
Chapter 6 Key Architectural Concepts
Overview of Interface-Based Programming
IQueryGuid and IRefCount
Interfaces in Objective Views
Model View Controller
Chapter 7 The Canvas
MVC in Objective Views
The CODModel Class
Components and the Model
Generation of Component IDs
Transaction Model
Background
Drag and Drop
Page Settings
Modification
The CODViewport Class
Grid
Angle Snap
Page Boundaries
Zoom Limits
Selection Handle Size
Component Tracking
Updating
Scrolling
Off-Screen Buffering
Logical Units
Coordinate Mapping
Inverting the Y Axis
Drawing Scale
Print and Print View
The CODController Class
State
Interacting with Components
Hit Testing
Selection
Cursor Changes
Mouse Cursor Restrictions
Movement
Rotation
Scaling
Vertex Editing
Text Editing
Drawing New Components
Inserting New Components
Tracking
Linking Symbols
Other Capabilities
Zooming
Panning
Context Menus
Coordinate Transformations
Command Creation
Graph Navigation
Graph Navigation Interfaces
Node and Edge Collections
IODGraph Interface
IODNode Interface
IODEdge Interface
Binary Space Partitioning Trees
CODBspTree
CODBspNode
CODBspRect
OLE Drag-and-Drop
CODDropSource
CODDropTarget
OLE Drag-and-Drop and Metafiles
Chapter 8 Components
Components
Component Class Hierarchy
Component Essentials
CODComponent
Component Properties
Component IDs
Type
Name
Parents and Children
Component Transforms
Control Points
Handles
Region
User Data
Shape Components
CODPointComponent
CODCurveComponent
CODClosedCurveComponent
CODEllipseComponent
CODEllipseComponent2
CODLineComponent
CODRectComponent
CODPolygonComponent
Text Components
CODTextComponent
CODTextCompEdit
CODLabelComponent
Windowed Components
Image Components
CODDib
CODImageCache
CODImageComponent
CODImageEntry
CODMetafileComponent
CODSprite
Using Metafile Components
Line Endpoints
CODEndpoint
CODArrowEndpoint
CODCircleEndpoint
CODDiamondEndpoint
Creating Your Own Endpoints
Port Components
CODPortComponent
CODCirclePort
Other Types of Components
CODAnchorSymbol
CODDocViewAnchor
Component Tracking
CODComponentTracker
CODComponentSetTracker
Transforms
Transform Classes
CODTransform
CODTransformStack
Transformation Matrices
Using CODTransform
Components and Transformation Matrices
Child Components
Nested Transformation Matrices
How the Transform Stack Works
Regions
CODRgn
CODPolygonRgn
Chapter 9 Properties
Introduction to Properties
Property Objects
CODProperty
CODBoolProperty
CODEditProperties
CODFillProperties
CODFontProperties
CODIntProperty
CODLineOrientation
CODLineProperties
CODOrientationProperties
CODStringProperty
Property IDs
Property Containers
Registering Properties
Getting and Setting Property Values
The Property Cache
Chapter 10 Symbols
Introduction to Symbols
Accessing Symbol Files from Disk
Using Symbols as Resources
Creating Symbols on the Fly
Creating a Symbol Class
Placing Symbols on a Toolbar
Ports
Symbol Conversion
Labels
Connections
A Connection Scenario
CODConnection
CODConnectionMap
Additional Symbols
Chapter 11 Links
Introduction to Links
Linking Symbols
CODLinkComponent
Changing Endpoints
Orthogonal Links
Chapter 12 Commands
Introduction to Commands
Type IDs
Executing and Unexecuting
Target Model
Components in a Command
Using or Not Using Command Objects
Command Classes
CODCommand
CODMoveCommand
CODRotateCommand
CODScaleCommand
CODInsertVertexCommand
CODDeleteVertexCommand
CODMoveVertexCommand
CODMovePortCommand
CODSpacingCommand Class
CODSizeCommand Class
CODNameCommand
CODTextCommand
CODTransparencyCommand
CODLinkCommand
CODUpdateCommand
CODIndexedCommand
CODInsertCommand
CODDeleteCommand
CODGroupCommand
CODUngroupCommand
CODOrderCommand
CODMacroCommand
CODAlignCommand
CODPropertyCommand
CODFontCommand
Chapter 13 Dialogs
Introduction to Dialogs
Component Property Sheet
CODCompPropSheet
CODDefPropSheet
CODGeneralCompPP
CODEditCompPP
CODLineCompPP
CODLineStyleLB
CODLineSizeLB
CODFillCompPP
CODHatchLB
CODFontCompPP
CODFontListBox
CODSizeListBox
CODLabelCompPP
CODPosSizeCompPP
CODTextCompPP
Measurement Property Sheet
CODMeasurePropSheet
CODMeasurePropPage
CODCoordinateMappingPage
CODCanvasSizePage
CODDrawingScalePage
Other Dialogs
CODComponentDlg
CODComponentLB
CODGridDlg
CODZoomDlg
Chapter 14 Utility Classes
CODGlobal
CODPageSettings
IODIdGenerator
Smart Pointers
Sets and Iterators
Chapter 15 OLE Document Servers
Introduction to OLE Document Servers
Server Document and Items
Declaring the COleServerDoc Class
Declaring the COleServerItem Class
Server Item Creation
Server Item Serialization
Server Item Viewport
Server Item OnGetExtent()
Rendering the Server Item
Objective Edit
Chapter 1 Introduction to Objective Edit
Welcome to Objective Edit
Product Features
Feature Additions
Application Wizard
Animated Scrolling
Gutter Manipulation
HTML Output
New Language Configuration .ini Files
Customization Options
Location of Samples
Supported Platforms
Licensing Restrictions
Getting Help
Documentation
Knowledge Base
Professional Services
Technical Support
Chapter 2 Getting Started with Objective Edit
Building Objective Edit
Using the Build Wizard
Default Build Target Naming Conventions
Build Configuration Options
Building the Objective Edit Libraries
Make Files and Building Directly with nmake
Building the Samples
Chapter 3 The Objective Edit Architecture
Class Hierarchy
SECEdit
SECEditBlockBuffer
SECEditCtrl
SECEditView
SECEditController
SECEditLangConfig
Document/View Integration
Chapter 4 Integrating Objective Edit into Your MFC Projects
Overview of Objective Edit Integration
Include Objective Edit in Your Project
Include Objective Edit Resources
Add the Appropriate Objective Edit Classes to Your Project
Add Initialization Code
Call Objective Edit Functions as Needed
Customize Objective Edit to Your Needs
Check Visual Studio 2010 Paths
Chapter 5 Sample Applications
Introduction
EditDlg
LangConfigs
MDIApp
Customizing for HTML Syntax
Implementing IntelliSense
Extending Default Context Menus
Implementing Custom Page Breaks
Registering Languages from Different Sources
SuperViz
Tutorial
Chapter 6 Customization
Introduction
Customization Options
Working with Text
Inserting Text at Current Location In Edit Control
Indenting Text
Line Highlighting
Find and Replace
Regular Expressions
VBScript RegExp
Working with Comments
Making Parser Tags Case-Insensitive
Enabling Line Continuation
Working with the Gutter
Customizing the Index Region
Changing the Step Value and Format
Allow Toggling Between Normal Gutter and Line Numbers
Changing the Width of the Gutter
Changing Gutter Painting
Changing the Background Color of the Gutter Area
Drawing Custom Breakpoints and Bookmarks
Implementing Three Breakpoint States
Inserting Bookmarks vs. Marking Found Text
Methods Related to the Gutter
Page Margins
File Locking
Serializing Settings to the Registry
Saving Settings
Reading Settings Back
SECEDIT Macros
Changing Keywords and Colors at Runtime
Keywords
Colors
Chapter 7 Objective Edit Tutorial
Introduction to the Tutorial
The 1stEdit Tutorial
STEP 1 - Generate a Skeleton Application
Create a New Project
Choose AppWizard Options
Modify stdafx.h
Include Objective Edit Resources
Modify the View's Header File
Modify the View's Implementation File
Add an SECEdit Object to the C1stEditDoc Class
Override SECEditView::GetEdit()
Override the Methods for Document Loading and Saving
Build and Run Step 1
STEP 2 - Add Support for Syntax Highlighting
Modify CMy1stEditApp::InitInstance()
Modify CMy1stEditDoc:: OnOpenDocument() and OnNewDocument()
Copy the C Language Initialization File into the Project Directory
Build and Run Step 2
STEP 3 - Add Additional User Interface Support
Create a New Toolbar
Incorporate the Toolbar into the Project
Modify the 1stEdit menus
Add the Dynamic Splitter Window
Build and Run Step 3
Chapter 8 The Configuration ini File
Definition
[Editor] Section
[Font] Section
[Parser] Section
[Tagn] Sections
[ColorGroups] Section
Chapter 9 ATL and Objective Edit
Introduction
Wrapping Objective Edit in an ATL ActiveX Control
An Example: An ATL ActiveX Control Built From Objective Edit
Building and Testing A Control
Further Extensions: Module State Issues
Objective Chart
PART I User’s Guide
Chapter 1 Introduction to Objective Chart
Welcome to Objective Chart
Product Features
Location of Samples
Supported Platforms
Getting Help
Documentation
Knowledge Base
Professional Services
Technical Support
Licensing Restrictions
Chapter 2 Basic Concepts
What is an MFC Extension Library?
Notes on Objective Chart Installation
Objective Chart Libraries
Stingray Foundation Library
Standard Objective Chart Library
Objective Chart Utility Toolkit
Building Objective Chart
Using the Build Files
Static Linking
Dynamic Linking (as a DLL)
Compiler Flags
Build Target Naming Conventions
Build Configuration Options
Building the Objective Chart Libraries
Using the Build Wizard
Miscellaneous Build Issues
Using Multiple Library Configurations
Make Files and Building Directly with nmake
Incorporating Objective Chart into Your Application
Linking to the Objective Chart Library as a DLL
Including Unicode Support
Examples of Basic Charts
Objective Chart Basics
Objective Chart Terminology
How a Chart is Constructed
Create an SRGraph Object
Create and Configure Components
Add Data Objects
Call DrawComponentList
Chapter 3 Design Overview of Objective Chart
Introduction
Graph Classes
SRGraph
SRDynamicGraph
Data Managers
Component Classes
SRGraphComponent
SRGraphBackground
SRGraphTitle and SRGraphTitleResizeable
SRGraphDisplay
SRGraphLegend
SRGTextPanel
Axis Drawing Classes
SRGraphLabel
SRGraphLabelBlock
SRGDecimalScale
SRGLogScale
SRGDateScale
SRGIndexScale
SRGGroupScale
Axis Scale Bar Classes
SRGCompoundDisplay
Data Scope
Data Storage Classes
SRGraphDataList
SRGraphData
CScale
Style Class
Annotation Classes
SRGraphAnnotation
SRGraphAnnotationList
Utility Classes
SRGCompiledPolygon
SRGRect
SRGraphException
CObStack
Display Scheme
View Classes
SRGraphView and SRGScrollView
SREGraphView and SREScrollView
User Interaction and Feedback
Feedback Management
SRGraphFeedback
SRGraphPosition
Chart Persistence
Chart Template System
Serialization
MFC Integration
Document and View Integration
Documents
Chapter 4 Fast Start With Objective Chart
Introduction
Step 1: Creating a Basic Chart Application
Modifying the View Class
Modifying the CChartAppDoc Class
Modifying the ChartApp Resources
Reviewing the Steps to a Functional Graph
Assessing the ChartApp’s New Capabilities
Step 2: Adding the Ability to Read Tab-Delimited Data Files
Adding Text File Handling to the Document
Reading the Tab Delimited File
Reassessing the ChartApp’s Capabilities
Moving On
Chapter 5 Integration Tutorial
Introduction
Step One: Creating and Displaying the Statistics Chart
Introduction
Set Up the Resources
Create CStatic-based Control for Use in a Dialog Box
Construct a Dialog to Display the OC Control
Display the Dialog
Step Two: Plotting Scribble Data with an X-Y Scatter Chart
Introduction
Create the Chart View
Modify the CView's Base Class
Display the Graph in the View
Add the Chart View to the Splitter Pane
Add an SRGraph Object to the Document
Modify the Serialization Function
Initialize the Document
Add Fresh Data to the Chart
Modify the Button Handler
Gather the Mouse Movements
Step Three: ComDocs and Document Linking
Introduction
Create the Scroll View
Modify the Scroll View
Allow Linked Documents
Create a Linked Document
Update the Linked Documents
Chapter 6 Chart Types
Chart Types Overview
Graphs with Classic Axes
Line Graphs
Line Only Graphs
Step Graphs
Step Line Only Graphs
Area Graphs
Strata Graphs
Freestyle Graphs
Stock Graphs
Area Stock Graphs
Candle Graphs
Shaded Candle Graph
Hi-Low-Open-Close Graphs
Vertical Bar Graphs
Vertical Bar Graphs
Extended Vertical Bar Graphs
Stacked Vertical Bar Graphs
Strata Vertical Bar Graphs
Strata Vertical Bar by Group Graphs
100% Strata Vertical Bar Graphs
100% Strata Vertical Bar by Group Graph
Horizontal Bar Graphs
Horizontal Bar Graphs
Extended Horizontal Bar Graphs
Stacked Horizontal Bar Graphs
Strata Horizontal Bar Graphs
Strata Horizontal Bar by Group Graph
100% Strata Horizontal Bar Graph
100% Strata Horizontal Bar by Group Graph
Graphs with Stage or Platform Axes
Manhattan Graph
RoofTop Graph
Ribbon Graph
Pie Graphs
Pie Graph
Isographic Pie Graph
Polar Graphs
Polar Graph
Area Polar Graph
Web Graphs
Web Graph
Area Web Graph
Scatter Graphs
XY Scatter-Alternating Graph
XY Scatter by Group Graph
XY Scatter by Index Graph
Extended XY Scatter Graphs
Bubble Graphs
Bubble Radius Graph
Bubble Area Graph
Vector Graphs
Vector-Centered Graph
Vector-End Graph
Vector-Offset Graph
Gantt Graph
Defined but Unimplemented Axis and Graph Types
Custom Graph Types
Chapter 7 Customizing a Chart
Using Components
Component Placement
Component Panel Appearance
Component Border Styles
Component Shadow Styles
Component Fill Styles
Using SRGraphBackground
Using SRGraphTitle
Font selection
Font sizing
Font style
Using LOGFONT
Text Alignment
Word Wrap
Using SRGTextPanel
Using the Display Component
SRGDisplayBase
SRGraphDisplay
Graph-Type Specific Displays
Data Display Rectangle
Display Scope
Selecting a Graph Type
Selecting an Axis Type
Valid Graph and Axis Combinations
Changing Chart Types Dynamically
Defining the Chart Axes
Logarithmic Axis Scaling
Autoscaling Axis Limits
Setting Fixed Axis Limits
Customizing Axis Labels
Avoiding Overlapped Labels
Controlling Tick Marks and Grid Lines
Displaying an Axis Title
Setting a Background Color for the Display Rectangle
Using SRGraphLegend
Legend Placement
Legend and Display Binding
Legend Scope
Legend Styles
Legend Key Style
Legend Spacing
Using Annotations
SRGraphAnnotationList
SRGraphAnnotation
Supporting Multiple Languages or Audiences
Where Annotation Lists Are Used
Using SRGraphLabel
Placement of Labels
Placement of Labels in a Label Block
Tick List Management
Data Object Appearance
Line or Frame Styles
Interior Fill Styles
Object Styles
Modifying Wigets
Modifying Line Ends
Modifying Bars
Labeling Wedges of a Pie Chart
Copying Styles
Using the Default Data Style
Choosing Automatic Colors, Fills, and Wigets
Chapter 8 Data Storage Models
Data Storage Classes
Standard Data Model
Standard Model Features
Using the Standard Model
Dynamic Data Model
SRGraphDynamicData
Dynamic Model Features
Using the Dynamic Model
Structure Data Model
SRGStructureData
Data-type Specific Classes
Structure Model Features
Using the Structure Model
Choosing the Right Model
Earlier Versions of Objective Chart
Data Array Access
Null Data
Deleting Groups
Chapter 9 Objective Chart Dialogs
Introduction
Objective Chart Editor
Objective Chart Wizard
Chart Wizard Features
Using Chart Wizard
Chart Wizard Property Pages
Chart Wizard User Interactions
Customizing Chart Wizard
Chapter 10 User Interaction
Introduction
Mouse Event Handlers
Feedback Management
Chart Tips
Using Chart Tips
Customizing Chart Tips
Changing the Text in Chart Tips
Changing the Appearance of Chart Tips
Changing the Delay Time for Displaying Chart Tips
Changing a Chart Tip’s Maximum Display Duration
Data Dragging
Data Zooming
Disabling Mouse-Initiated Functions
Hit-Testing Components
Chapter 11 Printing Charts
Introduction
Page Setup
PageSetup Dialog
PageSetup2 Dialog
Chapter 12 Objective Chart and MFC
Introduction
Document/View Architecture
The Document Class
The View Classes
SRGraphView
SRGScrollView
SREGraphView
SREScrollView
Displaying a Chart in a Dialog Box or Form View
Printing a Chart in a Dialog
Predefined Menu Commands
Communication Document (ComDoc) System
Communication Document Classes
SECComDoc
CGraphDoc
SECDocManager
Chapter 13 Optimizing Performance
Introduction
Simplify Graphics
Specify Fixed Axis Limits
Disable Background Drawing
Disable Feedback Logging
Use the Dynamic Data Storage Model
Enable Data Culling
PART II Programmer’s Guide
Chapter 14 Objective Chart AppWizard
About the AppWizard
Chapter 15 Objective Chart Utility Toolkit
Introduction
Building the Utility Toolkit Library
OCutItem Class
Histogram Chart
Using the Histogram Chart
Statistical Chart
Using the Statistical Chart
Fourier Chart
Using the Fourier Chart
Curve Fit Chart
Using the Curve Fit Chart
Chapter 16 Chart Extensions
Introduction
Deriving From SRGraphDisplay
Overriding DrawXXXLabels()
Changing the Standard Behavior of Axis Labels
Modifying the Interval Between Labels
Changing the Number of Digits and Adding Text for Units
Avoiding Overlapping Labels
Creating Unevenly Spaced or other Specific Labels
Defining Custom Chart Types and Axis Styles
Chart Extension Routines
Custom Graph - Axis Types
Chapter 17 Axis Scale Components
Axis Scale Classes
Attaching to a Display Component
Using Axis Scale Components
Customizing Axis Scale Components
Chapter 18 Compound Component System
Introduction
Recap of Principles
Compound Component Advantages
Current Uses of Compound Components
Compound Component Classes
SRGTickMarks
Using Tick Marks
SRGGridLines
Using Grid Lines
Specifying Grid Line Appearance
Customizing Grid Lines
SRGDataWatcher
SRGCompoundComponent
SRGCompoundDisplay
SRGAxisManager
Creating a Compound Component
CChart Example
Building a Compound Display
Customizing a Compound Display
Changing the Formatting
Deriving Your Own Class for Custom Labels
Avoiding Overlapping Labels
Setting Resolution of Axis Labels
Hiding or Moving Overlapping Labels
Adding a Title for the Y-Axis
Creating a Chart with 2 Y-Axes
Chart with One Display but Two Y-Axes
Chart with Two Distinct Variable Types and Two Distinct Axes
Chapter 19 Using Objective Chart with Objective Grid
Overview
Chapter 20 Communication Document System
Introduction
SECComDoc: Communication Document
Stages in the Life of an SECComDoc
Communication Between ComDocs
SECComDoc::ProcessDocumentCommand
SECComDoc::OnOpenDocument
SECComDoc::UpdateLinkedDocuments
SECComDoc::UpdateParentDocument
CGraphDoc
SECDocManager: An MFC Application Document Manager
Using SECDocManager
Chapter 21 Data Surveillance
Introduction
SRGDataWatcher
Using a Data Watcher
Customizing a Data Watcher
Highlighting Data Items
Chapter 22 Data Rolling
Performance Monitor
Chapter 23 Data Tagging System
Introduction to Data Tagging
Persistence Models for Data Tags
Using Data Tags
Selecting a Persistence Model
Drawing a Line From Data to Its Displaced Tag
Selecting the Tag’s Content
Selecting the Tag’s Outline Style
Setting Tag Position Relative to the Data Item
Setting Font Size for Labels
Setting Font and Tag Frame Orientation
Data Tag Example
Chapter 24 Chart Combinations
Sharing the Data Array
Aligning the Axes of Multiple Displays
Overlaying Displays
Chapter 25 Custom Drawing on a Chart
Adding Custom Text or Graphics
Chapter 26 Understanding Chart Optimization
The Draw Cycle and Chart Performance
Why Optimization Works
Chapter 27 XML Serialization Architecture
Overview
The XML Serialization Architecture
XML Formatters for Chart Components
Tag Names for Data Components
Selective Linking via Build Wizard
Usage
Sample
Chapter 28 Objective Chart Sample Applications
Introduction
“Fast Start” Sample
Scribble Tutorial
Compound Display Sample
Other Samples
Utility Toolkit Samples
Samples from the Demo Gallery
VCompound Chart Lesson
Grid and Chart Samples
Chapter 29 ATL and Objective Chart
Introduction
Wrapping Objective Chart in an ATL ActiveX Control
An Example: An ATL ActiveX Control Built From Objective Chart
Pre-Build Set-Up
Building and Testing A Control
Further Extensions: Module State Issues
Rogue Wave® Stingray Studio Version 12.0
Further Extensions: Module State Issues