| |
Table of ContentsPreface Chapter 1: Introduction to Custom Controls Chapter 2: Introduction to GDI+ Chapter 3: Basic Drawing Chapter 4: Drawing Complex Shapes and Using Transformations Chapter 5: Drawing Control Parts, Borders, and Adornments Chapter 6: Working with Images Chapter 7: Printing Chapter 8: Collections Chapter 9: Double Buffering Chapter 10: Handling Mouse Events Chapter 11: Implementing Design-Time Support Chapter 12: Designing Intuitive Interfaces Chapter 13: The PieChart Control Appendix A: Distributing Custom Controls Index
- Chapter 1: Introduction to Custom Controls
- What Are Controls?
- Introducing Custom Controls
- Categories of User Controls
- Preparing Your Environment
- What Are Custom Controls Made Of?
- Private Fields
- Properties
- Indexers
- Events and Delegates
- Building TinyNoiseMaker
- Time for Action—Creating the TinyNoiseMaker Custom Control
- Extending TinyNoiseMaker
- Time for Action—Adding Public Functionality
- Time for Action—Using the Control's Public Interface
- Chapter 2: Introduction to GDI+
- Understanding Control Drawing
- Understanding GDI+
- The Graphics Object
- The Control.Paint Event
- Invalidation
- Simple Drawing on a Form
- Time for Action—Creating the Application
- Drawing Inside a Panel Object
- Time for Action—Creating the Application
- Drawing Inside a Control
- Time for Action—Creating the Application
- Chapter 3: Basic Drawing
- The GDI+ Coordinate System
- Drawing with GDI+
- Using the Color Object
- Drawing Using the Pen Object
- Filling Surfaces Using the Brush Object
- Drawing Text Using the Font Object
- Improving Drawing Quality
- Building the GradientLabel Control
- Time for Action—Creating the GradientLabel Custom Control
- Chapter 4: Drawing Complex Shapes and Using Transformations
- Drawing Complex Shapes
- The GraphicsPath Object
- The Region Object
- Clipping Drawing Using Region Objects
- Keeping Drawing Inside a Region
- Keeping Drawing Outside a Region
- Graphics Transformations
- Translation
- Rotation
- Scaling
- Creating the Clock Control
- Time for Action—Creating the Clock Control
- Time for Action—Updating the Clock to Use Transformations
- Chapter 5: Drawing Control Parts, Borders, and Adornments
- Rendering Common Control Parts
- Drawing Buttons
- Drawing Caption Buttons
- Drawing Checkboxes
- Drawing Drop-Down Buttons
- Drawing Radio Buttons
- Drawing Scroll Buttons
- Rendering Borders and Frames
- Rendering Button Borders
- Rendering 3D Borders
- Rendering Control Adornments
- Creating Multiple Controls that Reuse the Same Functionality
- Creating a Base Class for Two or More Controls
- Time for Action—Creating the ControlPart Base Class
- Creating Derived Controls
- Time for Action—Creating the ScrollArrowButton Control
- Time for Action—Creating the CheckButton Control
- Extending Existing Controls
- Time for Action—Creating the BorderGradientPanel Control
- Time for Action—Implementing the GradientButton Control
- Chapter 6: Working with Images
- Drawing Images
- Using the Image Class
- Using the Bitmap Class
- Displaying Images
- Time for Action—Displaying Images
- Image Effects
- Skewing, Rotation, and Scaling
- Building the ImageWarper Class
- Time for Action—Creating the ImageWarper Class
- The ImageWarperControl
- Time for Action—Creating the ImageWarperApp and the Image WarperControl
- Chapter 7: Printing
- .NET Printing Explained
- Using the PrintDocument Class
- Your First Print Job
- Time for Action—Creating the "Hello Printer!" Application
- The SimpleReportPrinter
- Building the SimpleReportPrinter and TextDispenser Classes
- Time for Action—Building the TextDispenser Class
- Time for Action—Building the SimpleReportPrinter Class
- User Involvement
- Our Responsibilities as Programmers
- Printing Custom Controls
- Time for Action—Creating the PrintableRichTextBox
- Chapter 8: Collections
- Collections in the .NET Framework
- ArrayList
- Queue
- Stack
- SortedList
- Generics
- Building the Font Picker
- Time for Action—Building Font Picker
- Chapter 12: Designing Intuitive Interfaces
- The Relationship between User and Computer
- Requests, Input Parsing, Fault Tolerance, and Feedback
- Examining the Sketcher Control
- Looking Further Into Input Parsing
- How Can We Use Regex to Our Advantage?
- Time for Action—Creating the Regex Application
- Our Regex Pattern in Detail
- Optimization and Coding Conventions
- Summary
- Adding Slice Names and Delimiters
- Time for Action—Improving the PieChart Control
- PieChart Legend
- Time for Action—Creating the PieChart Legend
- Printing the PieChart
- Time for Action—The Printable PieChart
- Adding and Removing Slices
- Time for Action—Add Application Support for PieChart Slice Add/Remove Operations
| |
|