| |
| |
Preface | |
| |
| |
Version Free | |
| |
| |
Audience | |
| |
| |
Organization | |
| |
| |
The CD-ROM and the On-line Index | |
| |
| |
Contacting the Authors: Questions, Comments, and Version Changes | |
| |
| |
Acknowledgments | |
| |
| |
Getting Your Bearings | |
| |
| |
What is Visual C++? | |
| |
| |
Available Documentation | |
| |
| |
7.Road Map | |
| |
| |
Common Questions | |
| |
| |
| |
Visual C++ and MFC Basics | |
| |
| |
| |
Introduction | |
| |
| |
| |
What is the Microsoft Foundation Class Library? | |
| |
| |
| |
Windows Vocabulary | |
| |
| |
| |
Event-driven Software and Vocabulary | |
| |
| |
| |
An Example | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Understanding an MFC Program | |
| |
| |
| |
An Introduction to MFC | |
| |
| |
| |
Designing a Program | |
| |
| |
| |
Understanding the Code for "Hello World" | |
| |
| |
| |
Completing the Program | |
| |
| |
| |
MFC Application Structure | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Customizing Controls | |
| |
| |
| |
The Basics | |
| |
| |
| |
CStatic Styles | |
| |
| |
| |
CStatic Text Appearance | |
| |
| |
| |
Rectangular Display Modes for CStatic | |
| |
| |
| |
Fonts | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Handling Events | |
| |
| |
| |
Understanding Message Maps | |
| |
| |
| |
The CButton Class | |
| |
| |
| |
Creating a Message Map | |
| |
| |
| |
Sizing Messages | |
| |
| |
| |
Window Messages | |
| |
| |
| |
Scroll Bar Controls | |
| |
| |
| |
Understanding Message Maps | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Simple Applications | |
| |
| |
| |
Designing an Application | |
| |
| |
| |
Implementing the Fahrenheit to Celsius Converter | |
| |
| |
| |
The CEdit Control | |
| |
| |
| |
An Interest Calculator | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Visual C++ and MFC Details | |
| |
| |
| |
Resources, Dialogs, and Menus | |
| |
| |
| |
Resources and Resource Files | |
| |
| |
| |
The Icon Resource | |
| |
| |
| |
Creating a Resource File | |
| |
| |
| |
Menus | |
| |
| |
| |
Responding to Menus | |
| |
| |
| |
Dialog Resources | |
| |
| |
| |
String Resources | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Canned Dialogs | |
| |
| |
| |
The Message Box Dialog | |
| |
| |
| |
The File Open/Save Dialog | |
| |
| |
| |
The Font Dialog | |
| |
| |
| |
The Color Dialog | |
| |
| |
| |
The Print Dialog | |
| |
| |
| |
The Find/Replace Dialog | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Edit Controls and Editors | |
| |
| |
| |
Using the CEdit Control in Single-Line Mode | |
| |
| |
| |
Using the CEdit Control in Multi-Line Mode | |
| |
| |
| |
Designing a Simple Text Editor | |
| |
| |
| |
Creating the Editor Application | |
| |
| |
| |
Stubbing in the Menu Handlers | |
| |
| |
| |
Implementing the Editor | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Lists | |
| |
| |
| |
Creating a List Box | |
| |
| |
| |
Alternate Display Formats | |
| |
| |
| |
Getting User Selections | |
| |
| |
| |
Manipulating Items in a List | |
| |
| |
| |
Combo Boxes | |
| |
| |
| |
Conclusion | |
| |
| |
| |
The CWinApp class | |
| |
| |
| |
Member Variables | |
| |
| |
| |
Icons and Cursors | |
| |
| |
| |
Handling Idle Time | |
| |
| |
| |
Application Functionality | |
| |
| |
| |
Initialization Features | |
| |
| |
| |
Miscellaneous Features | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Drawing | |
| |
| |
| |
Introduction to the GDI Library | |
| |
| |
| |
GDI Basics | |
| |
| |
| |
Device Contexts | |
| |
| |
| |
Simple Drawing | |
| |
| |
| |
Using the Mouse with Your Drawings | |
| |
| |
| |
Advanced Drawing Concepts | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Utility Classes | |
| |
| |
| |
Utility Classes | |
| |
| |
| |
Simple Array Classes | |
| |
| |
| |
The CObject class and CObject Arrays | |
| |
| |
| |
List Classes | |
| |
| |
| |
Mapping Classes | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Debugging and Robustness | |
| |
| |
| |
Setting Up | |
| |
| |
| |
Assertions | |
| |
| |
| |
Tracing | |
| |
| |
| |
Dumping | |
| |
| |
| |
Memory State | |
| |
| |
| |
Exceptions | |
| |
| |
| |
Other Debugging Features | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Using the Visual C++ Wizards and Tools to Create Applications | |
| |
| |
| |
Understanding the AppWizard and ClassWizard | |
| |
| |
| |
The Goal of the AppWizard | |
| |
| |
| |
Creating a Simple Framework with the AppWizard | |
| |
| |
| |
The AppWizard's Document-Centric Approach | |
| |
| |
| |
Understanding the AppWizard's Files | |
| |
| |
| |
Understanding the ClassWizard | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Creating a Drawing Program | |
| |
| |
| |
The Goal of the Application | |
| |
| |
| |
Creating a Drawing Program | |
| |
| |
| |
Understanding the Drawing Program | |
| |
| |
| |
Creating an MDI Application | |
| |
| |
| |
Scrolling | |
| |
| |
| |
Splitter Windows | |
| |
| |
| |
Adding New Menu Options and Dialogs | |
| |
| |
| |
Printing | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Creating an Editor with CEditView | |
| |
| |
| |
Creating an MDI Text Editor | |
| |
| |
| |
Understanding the Editor | |
| |
| |
| |
Combining Two Documents and Views in a Single Application | |
| |
| |
| |
Fixing a Subtle Problem | |
| |
| |
| |
Handling Multiple Views on One Document | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Creating a Fahrenheit-to-Celsius Converter | |
| |
| |
| |
Creating the Converter | |
| |
| |
| |
Understanding the Program | |
| |
| |
| |
Using DDX | |
| |
| |
| |
Using the Document Class | |
| |
| |
| |
Using Form Views | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Creating an Address List Application | |
| |
| |
| |
Creating the Application | |
| |
| |
| |
Understanding the Address List Program | |
| |
| |
| |
Understanding DDX and DDV | |
| |
| |
| |
Improving the Application | |
| |
| |
| |
Printing | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Context-Sensitive Help | |
| |
| |
| |
Understanding the AppWizard's Help Framework | |
| |
| |
| |
Understanding and Modifying the Help Files | |
| |
| |
| |
Context-Sensitive Help | |
| |
| |
| |
Aliases | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Common Controls | |
| |
| |
| |
A Simple Example Using the Spin Button, List, and Tree Controls | |
| |
| |
| |
CSpinButtonCtrl | |
| |
| |
| |
CListCtrl | |
| |
| |
| |
CTreeCtrl | |
| |
| |
| |
Property Sheets | |
| |
| |
| |
A Property Sheet Example | |
| |
| |
| |
The CPropertySheet Class | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Creating Explorers | |
| |
| |
| |
Creating the basic framework | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Advanced Features | |
| |
| |
| |
Dialog Data Exchange and Validation | |
| |
| |
| |
Understanding DDX | |
| |
| |
| |
Exchange Routines | |
| |
| |
| |
Transfer Direction | |
| |
| |
| |
Understanding DDV | |
| |
| |
| |
An Example | |
| |
| |
| |
Custom Routines | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Understanding MFC | |
| |
| |
| |
What Are Window Handles? | |
| |
| |
| |
The Life of Windows and Objects | |
| |
| |
| |
Initializing Dialogs | |
| |
| |
| |
From HWND to CWnd | |
| |
| |
| |
Permanent and Temporary Associations | |
| |
| |
| |
Handles to Other Objects | |
| |
| |
| |
How Messages Work | |
| |
| |
| |
Subclassing | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Enhancing The Edit Control | |
| |
| |
| |
An Example | |
| |
| |
| |
Understanding the Process | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Self-Managing Controls | |
| |
| |
| |
Owner-Drawing vs. Self-Drawing | |
| |
| |
| |
Owner-Drawn Messages | |
| |
| |
| |
The Self-Drawing Framework | |
| |
| |
| |
Behind the Scenes | |
| |
| |
| |
A General Solution | |
| |
| |
| |
A Self-Drawing Combo Box | |
| |
| |
| |
Drawing Transparent Bitmaps | |
| |
| |
| |
Subclassing the Combo Box | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Another Look-- A Self-Drawing List Box | |
| |
| |
| |
Introduction to Font Enumeration | |
| |
| |
| |
Enumerating Font Families | |
| |
| |
| |
Enumerating Font Styles | |
| |
| |
| |
An Example | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Creating A Splash Screen | |
| |
| |
| |
An Example | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Expanding Dialogs | |
| |
| |
| |
The CExpandingDialog Class | |
| |
| |
| |
An Example | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Drawing and Controls | |
| |
| |
| |
Drawing in CStatic Controls | |
| |
| |
| |
Drawing in Dialogs | |
| |
| |
| |
Dialog Controls and the Background | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Dialog Bars | |
| |
| |
| |
An Example | |
| |
| |
| |
Data Exchange | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Dialog and View Idle Command Updating | |
| |
| |
| |
How Idle Updates Work | |
| |
| |
| |
Idle Updating in Views | |
| |
| |
| |
An Example | |
| |
| |
| |
Idle Updating in Dialogs | |
| |
| |
| |
An Example | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Odds and Ends | |
| |
| |
| |
Accepting Files from the File Manager | |
| |
| |
| |
Making an Application the Topmost Window | |
| |
| |
| |
Starting an Application Minimized | |
| |
| |
| |
Modeless Dialog Boxes | |
| |
| |
| |
Mini-Frame Windows | |
| |
| |
| |
Context Popup Menus | |
| |
| |
| |
Modifying the System Menu | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Advanced MFC Classes | |
| |
| |
| |
Database Access | |
| |
| |
| |
Understanding Relational Databases | |
| |
| |
| |
Understanding SQL | |
| |
| |
| |
Understanding ODBC | |
| |
| |
| |
Microsoft Query | |
| |
| |
| |
The CRecordSet Class | |
| |
| |
| |
Simple CRecordSet Operations | |
| |
| |
| |
Using the CRecordView Class | |
| |
| |
| |
Adding and Deleting Records | |
| |
| |
| |
Conclusion | |
| |
| |
| |
OLE | |
| |
| |
| |
Understanding OLE | |
| |
| |
| |
An Example | |
| |
| |
| |
OLE as a Vision of the Future | |
| |
| |
| |
Standard OLE Features | |
| |
| |
| |
An Introduction to OLE Containers | |
| |
| |
| |
An Introduction to OLE Servers | |
| |
| |
| |
An Introduction to OLE Automation | |
| |
| |
| |
An Introduction to OLE Controls | |
| |
| |
| |
Conclusion | |
| |
| |
| |
MFC Threads | |
| |
| |
| |
Understanding the Possibilities | |
| |
| |
| |
Understanding Threads | |
| |
| |
| |
MFC Worker Threads | |
| |
| |
| |
Thread Termination | |
| |
| |
| |
Passing Parameters to Threads | |
| |
| |
| |
Suspending and Resuming Threads | |
| |
| |
| |
Thread Priorities | |
| |
| |
| |
Subclassing CWinThread | |
| |
| |
| |
User Interface Threads | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Understanding C++: An Accelerated Introduction | |
| |
| |
| |
Using the Visual C++ Compiler and Tools | |
| |
| |
| |
Compiling and Executing a Console Program with Visual C++ | |
| |
| |
| |
Debugging | |
| |
| |
| |
Compiling MFC Programs | |
| |
| |
| |
The Browser | |
| |
| |
| |
Resources and resource files | |
| |
| |
| |
AppWizard Files | |
| |
| |
| |
Using the ClassWizard | |
| |
| |
| |
OLE Controls | |
| |
| |
| |
Conclusion | |
| |
| |
| |
Contacting the Authors | |
| |
| |
| |
Using OpenGL with MFC | |
| |
| |
| |
Writing an OpenGL Program | |
| |
| |
| |
Simple 2-D Graphics | |
| |
| |
| |
Transformations and the Matrix Stack | |
| |
| |
| |
Mouse Action | |
| |
| |
| |
Double Buffering | |
| |
| |
| |
A Three Dimensional Cube | |
| |
| |
| |
Z-Buffering | |
| |
| |
| |
Conclusion | |
| |
| |
Index | |