List of Figures
Chapter 1: Creating Usable Interfaces
Figure 1-1: The archetypal command-line interfaceFigure 1-2: The command line in Visual Studio .NETFigure 1-3: A genuinely useful wizardFigure 1-4: A metaphor-based calendar and organizerFigure 1-5: Explorer-like user interfaceFigure 1-6: Two approaches to an audio recorder
Chapter 2: Designing with Classes and Tiers
Figure 2-1: A sample formFigure 2-2: Control containment for a sample formFigure 2-3: Two ways to interact with controlsFigure 2-4: Ordinary forms and visual inheritanceFigure 2-5: Using form and application switchboardsFigure 2-6: Three-tier designFigure 2-7: An intelligent TreeView database browser
Chapter 3: Control Class Basics
Figure 3-1: Control hierarchyFigure 3-2: A medley of different controlsFigure 3-3: Control measurementsFigure 3-4: A color changing formFigure 3-5: A simple font viewerFigure 3-6: Focused buttonsFigure 3-7: The Visual Studio .NET tab order toolFigure 3-8: An event trackerFigure 3-9: Common control picture support
Chapter 4: Classic Controls
Figure 4-1: The component trayFigure 4-2: Adding a COM referenceFigure 4-3: AxHost interactionFigure 4-4: Two LinkLabel examplesFigure 4-5: The built-in TextBox menuFigure 4-6: Filling a list box with objectsFigure 4-7: The domain controlsFigure 4-8: The date controlsFigure 4-9: Common date formatsFigure 4-10: Selecting multiple datesFigure 4-11: A sample menuFigure 4-12: Menu objects in .NETFigure 4-13: The menu object hierarchyFigure 4-14: Menu variationsFigure 4-15: The Visual Studio .NET menu designerFigure 4-16: An owner-drawn menuFigure 4-17: Displaying a list of installed fontsFigure 4-18: Dragging a control aroundFigure 4-19: A sample drag-and-drop applicationFigure 4-20: A validation exampleFigure 4-21: The ErrorProvider
Chapter 5: Forms
Figure 5-1: The Form class lineageFigure 5-2: A scrollable formFigure 5-3: A scrollable panelFigure 5-4: A simple dialog formFigure 5-5: A single form interactionFigure 5-6: A one-to-many form interactionFigure 5-7: An owned form testerFigure 5-8: Windows XP visual stylesFigure 5-9: A simple message boxFigure 5-10: Common dialogsFigure 5-11: A frustrating windowFigure 5-12: The Address Book''''''''''''''''''''''''''''''''s minimum sizeFigure 5-13: Setting control anchoring at design-timeFigure 5-14: Two ways to use anchoringFigure 5-15: Anchored controls follow a corner in the container.Figure 5-16: Anchoring the control and its containerFigure 5-17: A docked group boxFigure 5-18: A docked group box with paddingFigure 5-19: A basic splitter barFigure 5-20: Advanced dockingFigure 5-21: A docking strategyFigure 5-22: A split view on a single documentFigure 5-23: Multiple splitsFigure 5-24: A collapsible split windowFigure 5-25: A shaped formFigure 5-26: A noncontiguous shaped formFigure 5-27: An irregular form with graphical contentFigure 5-28: Moving a shaped formFigure 5-29: A form (with the desktop showing through)Figure 5-30: An ancestor form for a wizardFigure 5-31: Inheriting from a formFigure 5-32: A custom property
Chapter 6: Modern Controls
Figure 6-1: The ImageList designerFigure 6-2: Directly outputting an ImageListFigure 6-3: Configuring assembly settings in .NETFigure 6-4: Different view styles with the ListView controlFigure 6-5: A basic TreeViewFigure 6-6: Using a TreeView to configure settingsFigure 6-7: Drag-and-drop operations with a TreeViewFigure 6-8: A custom TreeViewFigure 6-9: Windows print settingsFigure 6-10: Toolbar stylesFigure 6-11: Toolbar designerFigure 6-12: Two ways to synchronize a menu and toolbarFigure 6-13: The simplest possible status barFigure 6-14: A status bar with panelsFigure 6-15: An unhelpful status bar in Microsoft PaintFigure 6-16: The TabPage control
Chapter 7: Custom Controls
Figure 7-1: Creating a control projectFigure 7-2: Adding required assembliesFigure 7-3: Referencing an assembly with controlsFigure 7-4: Your custom control in the ToolboxFigure 7-5: A solution with a control project and a test projectUser ControlsFigure 7-6: A user control at design-timeFigure 7-7: User control inheritanceFigure 7-8: The progress control at design-timeFigure 7-9: The Progress user control in actionFigure 7-10: The Progress control in UMLFigure 7-11: The BitmapViewer at design-timeFigure 7-12: The BitmapViewer in UMLFigure 7-13: The BitmapViewer in actionFigure 7-14: A BitmapViewer eventFigure 7-15: The DirectoryTree in actionFigure 7-16: The MaskedTextBox in actionFigure 7-17: The MenuTextProvider in actionFigure 7-18: A HelpIconProvider extending two text boxes
Chapter 8: Design-Time Support for Custom Controls
Figure 8-1: Nondescript propertiesFigure 8-2: A property configured with attributesFigure 8-3: Configuring a toolbox bitmapFigure 8-4: A custom toolbox bitmapFigure 8-5: A resource fileFigure 8-6: A .resx file in Visual Studio .NETFigure 8-7: Adding resources to an ordinary code fileFigure 8-8: Debugging design-time supportFigure 8-9: The DirectoryTree at design timeFigure 8-10: The PropertyGrid controlFigure 8-11: Control designer classesFigure 8-12: Designer verbsFigure 8-13: The Calendar themesFigure 8-14: A custom drive selection windowFigure 8-15: Enumerations in the Properties windowFigure 8-16: The RegexTypeEditor
Chapter 9: Data Controls
Figure 9-1: Information flow in .NET data bindingFigure 9-2: Binding a list to an array of stringsFigure 9-3: Binding to an array of objects without DisplayMemberFigure 9-4: Overriding ToString() in a data bound objectFigure 9-5: Binding to two controlsFigure 9-6: Data binding with other text box propertiesFigure 9-7: Binding to a DataViewFigure 9-8: Binding to a filtered DataViewFigure 9-9: Multiple binding with ADO.NETFigure 9-10: An editable bound data sourceFigure 9-11: Formatting dataFigure 9-12: Formatting numbers to stringsFigure 9-13: "Converting" file names to image objectsFigure 9-14: Data binding under the hoodFigure 9-15: Data binding with custom navigation controlsFigure 9-16: Data binding with a master-detail listFigure 9-17: Separately synchronized view of the same dataFigure 9-18: DataGrid navigation linksFigure 9-19: DataGrid master-detail listsFigure 9-20: A custom DataGrid columnFigure 9-21: Custom row validation with data bindingFigure 9-22: A TreeView with embedded dataFigure 9-23: A decoupled TreeView
Chapter 10: MDI Interfaces and Workspaces
Figure 10-1: An MDI ChildFigure 10-2: Suspended controlsFigure 10-3: Working with the active childFigure 10-4: The MDI child listFigure 10-5: Different layout optionsFigure 10-6: Merged menusFigure 10-7: The document-view architecture in the ordering programFigure 10-8: The OrderGridViewFigure 10-9: The OrderPrintPreview viewFigure 10-10: Synchronized views on the same documentFigure 10-11: Creating a floating toolbarFigure 10-12: A dock cueFigure 10-13: A docked window
Chapter 11: Dynamic User Interface
Figure 11-1: A ButtonMaker programFigure 11-2: A dynamic system tray iconFigure 11-3: A list of changed filesFigure 11-4: A vector-based drawing applicationFigure 11-5: Resizing a squareFigure 11-6: Changing a square''''''''''''''''''''''''''''''''s background colorFigure 11-7: Dynamic content in the About boxFigure 11-8: Choosing a language when designing a formFigure 11-9: Multiple .resx files for a formFigure 11-10: Multiple satellite assembliesFigure 11-11: Tables mapping control access permissionsFigure 11-12: Different menu structuresFigure 11-13: The dynamic ordering windowFigure 11-14: Pricing table structureFigure 11-15: The SingleLineFlow layout manager in action
Chapter 12: GDI+ Basics
Figure 12-1: Painting to a GDI+ surfaceFigure 12-2: Painting font textFigure 12-3: Filling a form with an ellipseFigure 12-4: Flawed resizingFigure 12-5: A square painting programFigure 12-6: Antialiasing with an ellipseFigure 12-7: Smoothing modes for shapesFigure 12-8: Smoothing modes for fontsFigure 12-9: Using double bufferingFigure 12-10: Using translate transformsFigure 12-11: Using rotational transformsFigure 12-12: Line capsFigure 12-13: Dash stylesFigure 12-14: HatchBrush stylesFigure 12-15: The LinearGradient brushFigure 12-16: The TextureBrushFigure 12-17: Hit testing with squaresFigure 12-18: Hit testing a nonrectangular pathFigure 12-19: Drawing pictures with ControlPaint
Chapter 13: GDI+ Controls
Figure 13-1: The GradientLabelFigure 13-2: Custom thumbnails with the GradientLabelFigure 13-3: The MarqueeLabel test utilityFigure 13-4: The HotTrackButtonFigure 13-5: A flawed drawing programFigure 13-6: A corrected drawing programFigure 13-7: A sample chart
Chapter 14: Help and Application-Embedded Support
Figure 14-1: WinHelp: a piece of living historyFigure 14-2: WinHelp 95: a faceliftFigure 14-3: HTML Help: the industrial revolution of helpFigure 14-4: Help 2: a new standard?Figure 14-5: The HelpProviderFigure 14-6: What''''''''''''''''''''''''''''''''s This HelpFigure 14-7: Collapsible help for one windowFigure 14-8: Integrated custom HelpFigure 14-9: Integrated custom HTML HelpFigure 14-10: A dialog with affordancesFigure 14-11: The Microsoft Agent controlFigure 14-12: The agent tryout application