1st Edition

Software Application Development A Visual C++, MFC, and STL Tutorial

    1216 Pages 246 B/W Illustrations
    by Chapman & Hall

    1216 Pages
    by Chapman & Hall

    Software Application Development: A Visual C++, MFC, and STL Tutorial provides a detailed account of the software development process using Visual C++, MFC, and STL. It covers everything from the design to the implementation of all software modules, resulting in a demonstration application prototype which may be used to efficiently represent mathematical equations, perform interactive and intuitive model-building, and conduct control engineering experiments.

    All computer code is included, allowing developers to extend and reuse the software modules for their own project work. The book’s tutorial-like approach empowers students and practitioners with the knowledge and skills required to perform disciplined, quality, real-world software engineering.

    Part I: User Interaction
    Object-Oriented Analysis and Design
    Background Research
    Software Requirements
    General Use Case Narratives
    Use Case Scenarios and Conversations
    Noun and Verb Analysis
    Object Analysis
    Preliminary Class Diagram
    Basic Program Implementing the Class Structure

    Initial Graphical User Interface
    Application Wizard
    Menus
    Application Icon
    Toolbars
    Block Library Dialog Window
    Add Functionality to the Common Blocks Toolbar Buttons

    Constructing Blocks

    Merging the WIN32 Console Application with the Visual C++ Application
    Modifying Program Structure for Block Construction
    Drawing of Primitive Block Shapes
    Completing Block Construction
    Drawing Block Graphical Detail

    Constructing Block Ports
    Block-Based Port Position
    Changing the CPort Class
    Augmenting the CBlock Class
    Augmenting the CBlockShape Class
    Derived-Block Constructors
    Drawing Ports

    Constructing Connections
    Adding Connections to the DiagramEng Project
    Context Menu

    Moving Blocks and Connections
    Moving Blocks
    Moving Connection End Points
    Inserting and Moving Connection-Based Bend Points
    Deletion of Connections and Bend Points

    Automatic Block Placement
    Hypothetical Interactive Block Positioning
    Actual Improved Automatic Block Positioning

    Connection-Based Bend Points
    Attaching a Connection Tail Point to a Bend Point
    Deletion of a Bend Point to Which a Connection is Attached
    Deletion of a Connection with a Bend Point to Which a Connection is Attached
    Problem Concerning the Insertion of Bend Points
    Automatic Attachment of Connection End Points upon Initial Construction
    Deletion of Blocks with Attached Connections

    Block Dialog Windows
    Processing a Left-Button-Double-Click Event
    Adding Dialog Windows to Accept User Input

    Conversion of String Input to Double Data
    Conversion of CString Input Strings to Double Member Data
    Augmenting the CBlock-Derived Classes

    Moving Multiple Items
    Edit the TrackItem() Function to Call TrackMultipleItems()
    Add a TrackMultipleItems() Function to CDiagramEngDoc
    Add a Function for a Key-Down Event to CDiagramEngView
    Add Key-Flag-Based Members to CDiagramEngDoc
    Flow of Control in the TrackMultipleItems() Function
    Add a Toolbar Button to Activate Multiple Item Tracking

    Addition of a Tree View Control
    Add a Tree View Control Dialog Window
    Docking of the Tree Dialog Window as a Tree Dialog Bar
    Resetting the Appropriate Dialog
    Controlling the Toolbar Visibility

    Review of Menu and Toolbar-Based Functionality: Part I
    Menus
    Toolbars
    Functionality to be Added


    Context Menu Extension
    Numerical Solver Dialog Window
    Deleting Multiple Grouped Items
    Setting of Item Properties

    Setting Port Properties
    Setting Divide Block Ports
    Setting Sum Block Ports
    Drawing Ports Depending on Connection Status
    Drawing Port Signs
    Preparation for Adjustment of Port Properties
    Dialog-Based Port Property Setting
    Deleting Ports

    Key-Based Item Movement
    Add a Fine Move Item Entry to the Context Menu
    Add Members to the CDiagramEngDoc Class
    Edit the CDiagramEngView::OnKeyDown() Function
    Add a FineMoveItem() Function
    Add a FineMoveBlock() Function
    Add a FineMoveConnectionBendPoint() Function
    Fine Movement Process Control Flow

    Reversing Block Direction
    Add a Reverse Block Entry to the Context Menu
    Add a ReverseBlockDirection() Function to the CBlock Class
    Add Accessor Methods to the CBlockShape Class
    Add Accessor Methods to the CPort Class
    Test the Application

    Part II: Model Computation and Data
    Model Validation
    Validating a Model
    Changes to be Made to Draw in the Correct Color
    Unique Port and Bend Point Connection

    Non-Feedback-Based Signal Propagation
    Signals and Systems
    Models with Algebraic and Feedback Loops
    Signal Propagation
    Determination of Feedback Loops
    Signal-Based Class Structure
    Additions Required for Direct Signal Propagation
    Propagating a Simple Direct Signal

    Graph Drawing
    Addition of Structure to Display an Empty View Window
    Supplementing Existing Classes to Access Output Block Data
    Plotting Data as a Text String
    Plotting Numerical Data as a Graph
    Deleting an Output Block and Its View
    Adding Functionality to the Output Block Dialog Window

    Block Operations
    Linear Function Block Data Operation
    Signal Generator Block Data Operation
    Gain Block Data Operation
    Sum Block Data Operation
    Derivative Block Data Operation
    Integrator Block Data Operation
    Divide Block Data Operation
    Remaining Block Operation Functions

    Preparation for Feedback-Based Signal Propagation
    Linear Systems
    Nonlinear Systems
    Model Assumptions
    Determining Initial Output Signals
    Adding Functionality to Set the Initial Output Signal
    Building the System of Equations Representing the Block Diagram
    Stopping a Simulation

    Feedback-Based Signal Propagation
    Newton-Method-Based Solver
    Object-Oriented Transformation of the Newton-Method-Based Solver
    Adding the Newton-Method-Based Solver to the DiagramEng Project
    Convergence of the Newton Method Used to Compute Models with Feedback Loops
    Testing the Newton-Method-Based Code for Models with Feedback Loops

    Placing an Edit Box on a Toolbar
    Edit the Resource File
    Create the Toolbar Edit Box
    Update the Toolbar Edit Box
    A Memory Leak

    Serialization
    System Model Data Structure
    Event Handler Functions for File Input/Output
    Writing Data Members to a File
    Reading Data Members from a File
    Saving the Initial Output Signal for the Divide Block
    Adding Data-Writing Functionality to the Output Block

    Part III: Refinement
    Review of Menu and Toolbar-Based Functionality: Part II

    Functionality to be Added

    Printing and Print Preview
    Additions to the DiagramEng Project
    Mapping Modes
    Augmenting the CDiagramEngView OnBeginPrinting() Function
    Augmenting the CDiagramEngView OnPrepareDC() Function
    Augmenting the CDiagramEngView OnDraw() Function

    Implementing a Scroll View
    Coordinate Systems
    Conversion from CView to CScrollView
    Device Point to Logical Point Coordinate Conversions
    Tracking of Multiple Items
    Limiting Diagram Entity Placement
    Fitting the Logical View to the Physical View
    Zooming In and Out of the View

    Edit Menu
    Selection of All Content
    Cut, Copy, and Paste
    Undoing and Redoing Editing Actions

    Annotations
    Add a CAnnotation Class to the Project
    Add an Annotation Dialog Window to the Project
    Add an Annotation to a System Model
    Deleting Annotations
    Moving Annotations
    View Menu–Based Actions
    Format Menu–Based Actions
    Edit Menu–Based Actions
    Serialization of the CAnnotation Class

    Tools Menu
    Tools Menu Implementation: Diagnostic Information

    Help Menu
    Using DiagramEng
    Creating the Using DiagramEng Document

    Finalizing the Project
    Preventing Usage of Nonfunctional Blocks
    Preventing the Building of Subsystems
    Disabling Nonfunctional Items
    Preparing the Source and Executable Files

    Conclusion
    Project Review
    Improvements

    Appendix A: ControlEng: Win32 Console Application

    Appendix B: Constructing Connections: An Exploration
    Appendix C: NodeArcConnectivity: Win32 Console Application
    Appendix D: Debugging: An Introduction
    Appendix E: MatrixInversion: Win32 Console Application
    Appendix F: Using DiagramEng
    Index

    Biography

    Bud Fox, Zhang Wenzu, Tan May Ling