A Division of Macmillan Computer Publishing 201 West 103rd St., Indianapolis, Indiana, 46290 USA Davis Chapman Visual C++ ® 6 in 21 Days Teach Yourself 000 31240-9 FM 4/27/00 11:02 AM Page i Sams Teach Yourself Visual C++ ® 6 in 21 Days Copyright © 1998 by Sams Publishing All rights reserved. No part of this book shall be reproduced, stored in a retrieval system, or transmitted by any means, electronic, mechanical, photo- copying, recording, or otherwise, without written permission from the pub- lisher. No patent liability is assumed with respect to the use of the information contained herein. Although every precaution has been taken in the preparation of this book, the publisher and author assume no responsibility for errors or omissions. Neither is any liability assumed for damages resulting from the use of the information contained herein. International Standard Book Number: 0-672-31240-9 Library of Congress Catalog Card Number: 98-84508 Printed in the United States of America First Printing: August, 1998 01 00 99 98 4 3 2 1 Trademarks All terms mentioned in this book that are known to be trademarks or service marks have been appropriately capitalized. Sams Publishing cannot attest to the accuracy of this information. Use of a term in this book should not be regarded as affecting the validity of any trademark or service mark. Visual C++ is a registered trademark of Microsoft Corporation. Warning and Disclaimer Every effort has been made to make this book as complete and as accurate as possible, but no warranty or fitness is implied. The information provided is on an “as is” basis. The authors and the publisher shall have neither liability nor responsibility to any person or entity with respect to any loss or damages aris- ing from the information contained in this book. EXECUTIVE EDITOR Brad Jones ACQUISITIONS EDITOR Kelly Marshall DEVELOPMENT EDITOR Matt Purcell MANAGING EDITOR Jodi Jensen PROJECT EDITOR Dana Rhodes Lesh COPY EDITOR Kris Simmons INDEXER Erika Millen TECHNICAL EDITOR Larry Richardson PRODUCTION Marcia Deboy Michael Dietsch Jennifer Earhart Cynthia Fields Susan Geiselman 000 31240-9 FM 4/27/00 11:02 AM Page ii Overview Introduction 1 WEEK 1 AT A GLANCE 5 Day 1 The Visual C++ Development Environment—Building Your First Visual C++ Application 7 2 Using Controls in Your Application 25 3 Allowing User Interaction—Integrating the Mouse and Keyboard in Your Application 47 4 Working with Timers 67 5 Getting User Feedback—Adding Dialog Boxes to Your Application 83 6 Creating Menus for Your Application 105 7 Working with Text and Fonts 121 WEEK 1 IN REVIEW 143 W EEK 2 AT A GLANCE 147 Day 8 Adding Flash—Incorporating Graphics, Drawing, and Bitmaps 149 9 Adding ActiveX Controls to Your Application 179 10 Creating Single Document Interface Applications 199 11 Creating Multiple Document Interface Applications 229 12 Adding Toolbars and Status Bars 243 13 Saving and Restoring Work—File Access 279 14 Retrieving Data from an ODBC Database 315 WEEK 2 IN REVIEW 337 W EEK 3 AT A GLANCE 341 Day 15 Updating and Adding Database Records Through ADO 343 16 Creating Your Own Classes and Modules 379 17 Sharing Your Functionality with Other Applications—Creating DLLs 405 000 31240-9 FM 4/27/00 11:02 AM Page iii 18 Doing Multiple Tasks at One Time—Multitasking 429 19 Building Your Own Widgets—Creating ActiveX Controls 473 20 Internet Applications and Network Communications 495 21 Adding Web Browsing Functionality to Your Applications 521 WEEK 3 IN REVIEW 537 A PPENDIXES 541 A C++ Review 541 B Answers 579 C Printing and Print Previewing 637 D Understanding and Exception Handling 661 E Using the Debugger and Profiler 677 F Using MFC’s Helper Classes 699 Index 731 000 31240-9 FM 4/27/00 11:02 AM Page iv Contents INTRODUCTION 1 WEEK 1 AT A GLANCE 5 D AY 1THE VISUAL C++ DEVELOPMENT ENVIRONMENT—BUILDING YOUR FIRST VISUAL C++ APPLICATION 7 The Visual C++ Development Environment 8 The Output Pane 9 The Editor Area 9 Menu Bars 10 Rearranging the Developer Studio Environment 10 Starting Your First Project 11 Creating the Project Workspace 11 Using the Application Wizard to Create the Application Shell 12 Designing Your Application Window 15 Adding Code to Your Application 17 Finishing Touches 20 Creating the Dialog Box Icon 20 Adding Maximize and Minimize Buttons 21 Summary 22 Q&A 22 Workshop 23 Quiz 23 Exercise 23 DAY 2USING CONTROLS IN YOUR APPLICATION 25 The Basic Windows Controls 26 The Static Text Control 26 The Edit Box Control 26 The Command Button Control 27 The Check Box Control 27 The Radio Button Control 27 The Drop-Down List Box Control 27 Adding Controls to Your Window 27 Creating the Application Shell and Dialog Layout 28 000 31240-9 FM 4/27/00 11:02 AM Page v Specifying the Control Tab Order 30 Attaching Variables to Your Controls 32 Attaching Functionality to the Controls 33 Closing the Application 36 Showing the User’s Message 37 Clearing the User’s Message 38 Disabling and Hiding the Message Controls 39 Running Another Application 42 Summary 44 Q&A 44 Workshop 45 Quiz 45 Exercises 45 DAY 3ALLOWING USER INTERACTION—INTEGRATING THE MOUSE AND KEYBOARD IN YOUR APPLICATION 47 Understanding Mouse Events 48 Drawing with the Mouse 49 Improving the Drawing Program 53 Adding the Finishing Touches 55 Capturing Keyboard Events 56 Changing the Drawing Cursor 57 Making the Change Stick 60 Summary 64 Q&A 64 Workshop 65 Quiz 65 Exercises 65 DAY 4WORKING WITH TIMERS 67 Understanding Windows Timers 68 Placing a Clock on Your Application 68 Creating the Project and Application 68 Adding the Timer IDs 70 Starting the Clock Timer 71 Handling the Clock Timer Event 72 Adding a Second Timer to Your Application 74 Adding the Application Variables 74 Starting and Stopping the Counting Timer 75 Enabling the Stop Button 79 Summary 81 vi Sams Teach Yourself Visual C++ 6 in 21 Days 000 31240-9 FM 4/27/00 11:02 AM Page vi Q&A 81 Workshop 82 Quiz 82 Exercise 82 DAY 5GETTING USER FEEDBACK—ADDING DIALOG BOXES TO YOUR APPLICATION 83 Using Pre-existing (or System) Dialog Windows 84 Using Message Boxes 84 Using Common Dialogs 90 Creating Your Own Dialog Windows 93 Creating the Dialog Window 93 Using the Dialog in Your Application 96 Summary 101 Q&A 101 Workshop 103 Quiz 103 Exercises 104 DAY 6CREATING MENUS FOR YOUR APPLICATION 105 Menus 106 Menu Styles 106 Keyboard Shortcut–Enabling Menus 106 Menu Standards and Conventions 107 Designing Menus 108 Creating a Menu 108 Creating the Application 108 Adding and Customizing a Menu 109 Attaching the Menu to Your Dialog Window 112 Attaching Functionality to Menu Entries 112 Creating Pop-Up Menus 116 Creating a Menu with Accelerators 118 Summary 119 Q&A 119 Workshop 120 Quiz 120 Exercises 120 DAY 7WORKING WITH TEXT AND FONTS 121 Finding and Using Fonts 122 Listing the Available Fonts 122 Using a Font 125 Contents vii 000 31240-9 FM 4/27/00 11:02 AM Page vii Using Fonts 129 Creating the Application Shell 129 Building a List of Fonts 131 Setting the Font Sample Text 135 Selecting a Font to Display 136 Summary 139 Q&A 139 Workshop 140 Quiz 140 Exercises 140 WEEK 1 IN REVIEW 143 WEEK 2 AT A GLANCE 147 D AY 8ADDING FLASH—INCORPORATING GRAPHICS, DRAWING, AND BITMAPS 149 Understanding the Graphics Device Interface 150 Device Contexts 150 Mapping Modes and Coordinate Systems 156 Creating a Graphics Application 157 Generating the Application Shell 157 Adding the Graphics Capabilities 163 Summary 177 Q&A 177 Workshop 177 Quiz 178 Exercises 178 DAY 9ADDING ACTIVEX CONTROLS TO YOUR APPLICATION 179 What Is an ActiveX Control? 180 ActiveX and the IDispatch Interface 180 ActiveX Containers and Servers 182 Adding an ActiveX Control to Your Project 183 Registering the Control 183 Adding the Control to Your Dialog 186 Using an ActiveX Control in Your Application 187 Interacting with the Control 187 Responding to Control Events 193 Summary 196 Q&A 196 Workshop 197 Quiz 197 Exercise 197 viii Sams Teach Yourself Visual C++ 6 in 21 Days 000 31240-9 FM 4/27/00 11:02 AM Page viii DAY 10 CREATING SINGLE DOCUMENT INTERFACE APPLICATIONS 199 The Document/View Architecture 200 Creating an SDI Application 202 Building the Application Shell 202 Creating a Line Class 203 Implementing the Document Functionality 205 Showing the User 208 Saving and Loading the Drawing 213 Deleting the Current Drawing 214 Saving and Restoring the Drawing 215 Interacting with the Menu 218 Adding Color to the CLine Class 218 Adding Color to the Document 219 Modifying the Menu 222 Summary 226 Q&A 227 Workshop 228 Quiz 228 Exercise 228 DAY 11 CREATING MULTIPLE DOCUMENT INTERFACE APPLICATIONS 229 What Is an MDI Application? 229 Creating an MDI Drawing Program 231 Building the Application Shell 231 Building the Drawing Functionality 232 Adding Menu Handling Functionality 233 Adding a Context Menu 236 Summary 239 Q&A 239 Workshop 240 Quiz 240 Exercise 241 DAY 12 ADDING TOOLBARS AND STATUS BARS 243 Toolbars, Status Bars, and Menus 244 Designing a Toolbar 245 Creating a New Toolbar 246 Attaching the Toolbar to the Application Frame 247 Controlling the Toolbar Visibility 254 Adding a Combo Box to a Toolbar 257 Editing the Project Resources 257 Creating the Toolbar Combo Box 260 Contents ix 000 31240-9 FM 4/27/00 11:02 AM Page ix Handling the Toolbar Combo Box Events 267 Updating the Toolbar Combo Box 268 Adding a New Status Bar Element 271 Adding a New Status Bar Pane 271 Setting a Status Bar Pane Text 273 Summary 275 Q&A 276 Workshop 277 Quiz 277 Exercises 277 DAY 13 SAVING AND RESTORING WORK—FILE ACCESS 279 Serialization 279 The CArchive and CFile Classes 280 The Serialize Function 281 Making Objects Serializable 281 Implementing a Serializable Class 283 Creating a Serialized Application 284 Creating a Serializable Class 288 Building Support in the Document Class 294 Adding Navigating and Editing Support in the View Class 305 Summary 311 Q&A 311 Workshop 313 Quiz 313 Exercise 313 DAY 14 RETRIEVING DATA FROM AN ODBC DATABASE 315 Database Access and ODBC 316 The Open Database Connector (ODBC) Interface 316 The CRecordset Class 317 Creating a Database Application Using ODBC 322 Preparing the Database 322 Creating the Application Shell 324 Designing the Main Form 325 Adding New Records 331 Deleting Records 334 Summary 335 Q&A 335 Workshop 336 Quiz 336 Exercise 336 x Sams Teach Yourself Visual C++ 6 in 21 Days 000 31240-9 FM 4/27/00 11:02 AM Page x [...]... 65 6 Aborting the Print Job 65 7 Direct Printing Without the Framework 65 7 Invoking the Print Dialog Box Directly 65 7 Using StartDoc() and EndDoc() 65 9 Using StartPage() and EndPage() 66 0 APPENDIX D UNDERSTANDING AND EXCEPTION HANDLING 66 1 Using Exceptions 66 1 Running Code and Catching the Errors 66 1 Throwing Exceptions 66 6 Deleting... 000 312 40-9 FM xvi 4/27/00 11 :02 AM Page xvi Sams Teach Yourself Visual C++ 6 in 21 Days Quiz 63 1 Exercises 63 1 Day 20 63 2 Quiz 63 2 Exercises 63 3 Day 21 63 4 Quiz 63 4 Exercises 63 4 APPENDIX C PRINTING AND PRINT PREVIEWING 63 7 Using the Framework’s Functionality 63 7 Using Default Print... 60 2 Quiz 60 2 Exercises 60 2 Day 9 60 4 Quiz 60 4 Exercise 60 4 Day 10 60 5 Quiz 60 5 Exercise 60 6 Day 11 61 2 Quiz 61 2 Exercise 61 2 Day 12 61 4 Quiz 61 4 Exercises 61 5 Day 13 61 6 Quiz 61 6 Exercise... 61 7 Day 14 62 0 Quiz 62 0 Exercise 62 1 Day 15 62 3 Quiz 62 3 Exercise 62 4 Day 16 62 5 Quiz 62 5 Exercises 62 5 Day 17 62 6 Quiz 62 6 Exercises 62 6 Day 18 62 8 Quiz 62 8 Exercises 62 8 Day 19 63 1. .. 63 8 Overriding OnPrint() 64 1 Using the Printer Device Context 64 3 Maintaining the Aspect Ratio 64 5 Pagination and Orientation 64 7 Setting the Start and End Pages 64 7 Using the Print Dialog Box 65 0 Using Portrait and Landscape Orientations 65 4 Adding GDI Objects with OnBeginPrinting() 65 4 Customizing Device Context Preparation 65 6... Classes 67 5 000 312 40-9 FM 4/27/00 11 :02 AM Page xvii Contents APPENDIX E USING THE DEBUGGER AND PROFILER xvii 67 7 Creating Debugging and Browse Information 67 7 Using Debug and Release Modes 67 8 Setting Debug Options and Levels 67 9 Creating and Using Browse Information 68 1 Using Remote and Just -in- Time Debugging 68 3 Tracing and Single Stepping 68 5 Using the... Application 511 Sending and Receiving 515 Ending the Connection 517 Summary 519 Q&A 519 Workshop 520 Quiz 520 Exercise 520 000 312 40-9 FM 4/27/00 11 :02 AM xiv Page xiv Sams Teach Yourself Visual C++ 6 in 21 Days DAY 21 ADDING WEB BROWSING FUNCTIONALITY TO YOUR APPLICATIONS 5 21 The Internet Explorer ActiveX... the Visual C++ development environment and the tools that it makes available to you 0 01 312 40-9 INTRO 4/27/00 11 :03 AM 2 Page 2 Sams Teach Yourself Visual C++ 6 in 21 Days By the time you begin the second week, you’ll be doing more and more programming, as the topics become more involved You’ll still be using the Visual C++ tools to construct your applications, but the programming code will be getting... 66 8 MFC Exception Types 66 8 Using the CException Base Class 66 8 Using the Memory Exception 66 9 Using the Resource Exceptions 67 0 Using the File and Archive Exceptions 67 0 Using the Database Exceptions 67 2 Using OLE Exceptions 67 3 Using the Not Supported Exception 67 4 Using the User Exception 67 4 Generating Your Own... what you have learned during the week and think about all that you can do with what you have learned when you build applications So, without further ado, go ahead and jump in and get started 003 312 40-9 CH 01 4/27/00 11 :04 AM Page 7 WEEK 1 DAY 1 The Visual C++ Development Environment—Building Your First Visual C++ Application Welcome to Sams Teach Yourself Visual C++ 6 in 21 Days Over the next three . 8 60 2 Quiz 60 2 Exercises 60 2 Day 9 60 4 Quiz 60 4 Exercise 60 4 Day 10 60 5 Quiz 60 5 Exercise 60 6 Day 11 61 2 Quiz 61 2 Exercise 61 2 Day 12 61 4 Quiz 61 4 Exercises 61 5 Day 13 61 6 Quiz 61 6 Exercise 61 7 Day. 61 6 Exercise 61 7 Day 14 62 0 Quiz 62 0 Exercise 62 1 Day 15 62 3 Quiz 62 3 Exercise 62 4 Day 16 625 Quiz 62 5 Exercises 62 5 Day 17 62 6 Quiz 62 6 Exercises 62 6 Day 18 62 8 Quiz 62 8 Exercises 62 8 Day 19 63 1 Contents. Publishing 2 01 West 10 3rd St., Indianapolis, Indiana, 462 90 USA Davis Chapman Visual C++ ® 6 in 21 Days Teach Yourself 000 312 40-9 FM 4/27/00 11 :02 AM Page i Sams Teach Yourself Visual C++ ® 6 in 21