Introduction | p. 1 |
What's in This Book | p. 1 |
Conventions Used in This Book | p. 4 |
What You'll Need | p. 4 |
Online Resources | p. 5 |
Setting Up Your Development Environment | p. 7 |
Smart Device Extensions and the .NET Compact Framework | p. 7 |
Targeting Nonstandard Devices | p. 16 |
In Brief | p. 32 |
Introducing the .NET Compact Framework | p. 33 |
Why the .NET Compact Framework? | p. 33 |
Examining the .NET Compact Framework in Detail | p. 35 |
In Brief | p. 42 |
Designing GUI Applications with Windows Forms | p. 43 |
Investigating Unsupported Controls in the .NET Compact Framework | p. 43 |
Investigating Unsupported System.Windows.Forms Functionality in the .NET Compact Framework | p. 44 |
Working with the Visual Studio .NET Form Designer | p. 44 |
Understanding the Different Windows Forms Target Platforms | p. 49 |
Working with the Form Control | p. 52 |
Programming the Button Control | p. 55 |
Using the TextBox Control | p. 56 |
Using the Label Control | p. 56 |
Working with RadioButton Controls | p. 56 |
Using the CheckBox Control | p. 58 |
Using the ComboBox Control | p. 59 |
Using the ListBox Control | p. 63 |
Using the NumericUpDown Control | p. 65 |
Using the DomainUpDown Control | p. 69 |
Programming the ProgressBar Control | p. 72 |
Using the StatusBar Control | p. 73 |
Using the TrackBar Control | p. 73 |
Using the ToolBar Control | p. 74 |
Adding Menus with the MainMenu Control | p. 78 |
Using a ContextMenu Control in an Application | p. 79 |
Using the Timer Control | p. 83 |
Using the OpenFileDialog and SaveFileDialog Controls | p. 86 |
Using the Panel Control | p. 88 |
Using the HScrollBar and VScrollBar Controls | p. 88 |
Using the ImageList Control | p. 89 |
Using the PictureBox Control | p. 90 |
Using the ListView Control | p. 92 |
Using the TabControl Control | p. 98 |
Using the TreeView Control | p. 100 |
Working with the DataGrid Control | p. 104 |
In Brief | p. 110 |
Using Threads and Timers in the .NET Compact Framework | p. 111 |
Threads, Timers, and Windows CE | p. 111 |
The Thread Class | p. 112 |
Understanding Thread Basics | p. 113 |
Coordinating Threads with the Mutex Class | p. 121 |
Blocking until a Thread Finishes | p. 125 |
Controlling Access to Data Objects with the Monitor Class | p. 128 |
Managing Multiple Threads with a Thread Pool | p. 130 |
Timers | p. 131 |
Updating Variables with the Interlocked Class | p. 135 |
In Brief | p. 136 |
Network Connectivity with the .NET Compact Framework | p. 139 |
Working with Sockets | p. 139 |
Socket Programming with the .NET Compact Framework | p. 141 |
Serializing Objects for Transmission through a Socket | p. 150 |
Using UDP Packets | p. 151 |
Multicasting with UDP Packets | p. 155 |
Communicating with Remote Servers through the HTTP Protocol | p. 157 |
Communicating with Remote Servers through the HTTPS Protocol | p. 159 |
Communicating through the Device IrDA Port | p. 159 |
In Brief | p. 166 |
ADO.NET on the .NET Compact Framework | p. 167 |
Introducing ADO.NET on the .NET Compact Framework | p. 167 |
Caching Data with the DataSet | p. 167 |
Understanding Constraints | p. 175 |
Setting Up Autoincremented Fields | p. 178 |
Modeling Relational Data with the DataSet | p. 179 |
Creating Bindable Views of Data with a DataView | p. 187 |
Binding Data to a Control | p. 194 |
Comparing the Compact DataSet with the Desktop DataSet | p. 196 |
In Brief | p. 196 |
Programming with Microsoft SQL Server CE | p. 199 |
Investigating the Features Supported by Microsoft SQL Server 2000 | p. 199 |
Creating a Microsoft SQL Server CE Database | p. 200 |
Adding Structure to a Microsoft SQL Server CE Database | p. 204 |
Populating a Microsoft SQL Server CE Database | p. 210 |
Retrieving Data by Using Sq1CeDataReader | p. 213 |
Filling a DataSet by Using the Sq1CeDataAdapter | p. 223 |
Updating the Microsoft SQL Server CE Database by Using the Sq1CeDataAdapter | p. 227 |
Generating Sq1Command Objects with the Sq1CeCommandBuilder | p. 233 |
In Brief | p. 235 |
XML and the DataSet | p. 237 |
XML and the .NET Compact Framework DataSet | p. 237 |
Loading XML into a DataSet | p. 238 |
Saving a DataSet as XML | p. 241 |
Loading and Saving XML in a Sample Application | p. 245 |
Modeling Relational Data with XML Schemas | p. 246 |
Loading and Saving Schema Alone | p. 256 |
Writing a DataSet to XML without Schema Information | p. 257 |
Reading a DataSet from XML, Ignoring Schema Information | p. 257 |
Inferring Schema | p. 258 |
Using XML to Design a DataSet | p. 259 |
Saving and Loading DataSets as XML DiffGrams | p. 261 |
In Brief | p. 263 |
Using XML Web Services | p. 265 |
Creating a Simple XML Web Service | p. 265 |
Understanding the .NET Framework Web Service Client | p. 271 |
Creating a Client for the Simple XML Web Service | p. 272 |
Consuming a Web Service That Uses a DataSet | p. 280 |
Consuming Web Service That Exposes a Typed DataSet | p. 284 |
In Brief | p. 287 |
Manipulating XML with the XmlTextReader and the XmlTextWriter | p. 289 |
XML Architecture Overview | p. 289 |
Working with the XmlTextReader | p. 290 |
Loading XML Data into an XmlTextReader | p. 290 |
Using the XmlTextReader's Namespaces Property | p. 293 |
Understanding the Normalization Property | p. 294 |
Controlling White-Space Interpretation with the WhitespaceHandling Property | p. 296 |
Using the XmlResolver Property | p. 298 |
Reading XML Nodes | p. 299 |
Reading XML Attributes | p. 306 |
Understanding How to Perform Full-Content Reads | p. 312 |
Skipping over Nodes | p. 318 |
Closing the XmlTextReader | p. 320 |
Working with the XmlTextWriter | p. 320 |
Creating the XmlTextWriter | p. 321 |
Manipulating Namespace Support | p. 321 |
Formatting the XmlTextWriter's Output | p. 322 |
Writing an XML Declaration | p. 323 |
Writing XML Elements | p. 324 |
Writing XML Attributes | p. 327 |
Writing xml:space and xml:lang Attributes | p. 329 |
Writing Element and Attribute Content | p. 332 |
Converting .NET Compact Framework Data Types through XmlConvert | p. 338 |
Writing Raw XML Markup | p. 341 |
Writing Other Nodes | p. 343 |
Writing Processing Instructions | p. 345 |
Writing White-Space Characters | p. 347 |
In Brief | p. 348 |
Working with the XML Document Object Model | p. 351 |
Processing XML by Using the Document Object Model | p. 351 |
Differences from the Desktop .NET Framework | p. 352 |
Loading the XML DOM | p. 353 |
Navigating the XML DOM | p. 354 |
Accessing Text from Elements | p. 358 |
Accessing Markup from Nodes | p. 359 |
Accessing an Element's Attributes | p. 362 |
Accessing Other XmlNodes | p. 365 |
Searching an XML Document Node Tree | p. 366 |
Creating XmlNodes | p. 367 |
Creating XmlDeclarations | p. 368 |
Creating XmlElements | p. 369 |
Creating XmlAttributes | p. 369 |
Creating Other Node Types | p. 370 |
Inserting XmlNodes | p. 371 |
Using the AppendChild and PrependChild Methods | p. 372 |
Working with the InsertBefore and InsertAfter Methods | p. 373 |
Inserting XmlAttributes into an XmlDocument | p. 374 |
Replacing the XmlNodes within an XmlDocument | p. 376 |
Removing XmlNodes for an XmlDocument | p. 378 |
Removing XmlAttributes from their XmlElements | p. 379 |
Writing the XmlDocument | p. 381 |
In Brief | p. 382 |
Interacting with Native Code | p. 383 |
Understanding When to Call Native Code | p. 383 |
Calling Native Code: Quick Start | p. 384 |
Marshalling the Fundamental Data Types | p. 388 |
Marshalling Simple Structures | p. 397 |
Passing Nested Structures by Using Custom Marshalling Code | p. 402 |
Calling the Windows CE Operating System | p. 406 |
Accessing COM Components from the .NET Compact Framework | p. 410 |
In Brief | p. 411 |
Exploring .NET Reflection | p. 413 |
Understanding the .NET Compact Framework Reflection API | p. 413 |
Loading .NET Assemblies | p. 413 |
Discovering Type Information | p. 414 |
Creating Type Instances by Using ConstructorInfo | p. 417 |
Invoking Methods by Using the MethodInfo Class | p. 426 |
Using Reflection to Manipulate Object State | p. 435 |
Adding Custom Metadata to .NET Elements | p. 460 |
In Brief | p. 468 |
Cryptography | p. 469 |
Cryptography on the .NET Compact Framework | p. 469 |
Invoking the CryptoAPI | p. 470 |
Computing a Hash | p. 474 |
Encrypting and Decrypting Data by Using a Password | p. 479 |
Using Session Keys to Encrypt and Decrypt Data | p. 491 |
Determining CryptoAPI Constants with the ConstFinder Sample Application | p. 507 |
In Brief | p. 507 |
Measuring the Performance of a .NET Compact Framework Application | p. 509 |
Using a Stopwatch Timer to Measure Code Execution Time | p. 509 |
Using .NET Compact Framework Performance Counters | p. 514 |
In Brief | p. 523 |
Deploying a .NET Application | p. 525 |
Packaging a .NET Compact Framework Application | p. 525 |
Using Visual Studio .NET to Package an Application | p. 525 |
Using CAB Wizard to Package an Application | p. 526 |
Distributing a .NET Compact Framework Application | p. 534 |
In Brief | p. 539 |
Developing for the SmartPhone | p. 541 |
Introducing the SmartPhone | p. 541 |
Developing for the SmartPhone by Using the .NET Compact Framework | p. 542 |
Writing an Application for SmartPhone--XMLDataSetViewer | p. 543 |
In Brief | p. 547 |
Index | p. 549 |
Table of Contents provided by Ingram. All Rights Reserved. |