Wednesday, 28 March 2012

Free ebook: Programming Windows Phone 7, by Charles Petzold


Free ebook: Programming Windows Phone 7, by Charles Petzold



Gang, we’re done! 24 chapters, about 1,000 pages. Congratulations to Charles, who has outdone himself!
Speaking for Charles and for the Windows Phone 7 team, we hope that you will enjoy Programming Windows Phone 7:
You can download a PDF here (38.6 MB). [NEWER NOTE: the presentation issues have been fixed.] [OLDER NOTE: we see the comments from some of you about presentation issues with the ebook. We’ve determined that the PDF is missing a required embedded font. This is leading to odd (or worse) presentation for some of you, including bitmapped text. We’re working with the vendor to create a new file. I’ll let you know when the new file has replaced the old one in the Microsoft Download Center. We apologize for this!]
And, as of August 1, 2011, you can now download an EPUB version here and a MOBI version here.
To give you a sense of this offering, here is Charles’s Introduction—beneath that you’ll find the ebook’s full Table of Contents:
Introduction
This book is a gift from the Windows Phone 7 team at Microsoft to the programming community, and I am proud to have been a part of it. Within the pages that follow, I show you the basics of writing applications for Windows Phone 7 using the C# programming language with the Silverlight and XNA 2D frameworks.
Yes, Programming Windows Phone 7 is truly a free download, but for those readers who still love paper—as I certainly do—this book will also be available (for sale) divided into two fully-indexed print editions: Microsoft Silverlight Programming for Windows Phone 7 andMicrosoft XNA Framework Programming for Windows Phone 7. [Note from Devon: we should have these ready for order in December 2010.]
With the money you’ve saved downloading this book, please buy other books. Despite the plethora of information available online, books are still the best way to learn about programming within a coherent and cohesive tutorial narrative. Every book sale brings a tear of joy to an author’s eye, so please help make them weep overflowing rivers.
In particular, you might want to buy other books to supplement the material in this book. For example, I barely mention Web services in this book, and that’s a serious deficiency because Web services are likely to become increasingly important in Windows Phone 7 applications. My coverage of XNA is limited to 2D graphics and while I hope to add several 3D chapters in the next edition of this book, I don’t really get into the whole Xbox LIVE community aspect of game development. Nor do I discuss any programming tools beyond Visual Studio—not even Expression Blend.
My publisher Microsoft Press has a couple additional Windows Phone 7 books coming soon: Windows Phone 7 Silverlight Development Step by Step by Andy Wigley & Peter Foot offers a more tools-oriented approach. Although Michael Stroh’s Windows Phone 7 Plain & Simple is a guide to using the phone rather than developing for it, I suspect it will give developers some insights and ideas.
Moreover, I also hear that my old friend Doug Boling is working hard on a Windows Phone 7 enterprise-programming book that is likely to be considered his masterpiece. Be sure to check out that one.

Organization

This book is divided into three parts. The first part discusses basic concepts of Windows Phone 7 programming using example programs that target both Silverlight and the XNA framework. It is likely that many Windows Phone 7 developers will choose either one platform or the other, but I think it’s important for all developers who have at least a little knowledge of the alternative to their chosen path.
The second part of this book focuses entirely on Silverlight, and the third part on XNA 2D. For your convenience, the chapters in each part build upon previous knowledge in a progressive tutorial narrative, and hence are intended to be read sequentially.

My Assumptions About You

I assume that you know the basic principles of .NET programming and you have a working familiarity with the C# programming language. If not, you might benefit from reading my free online book .NET Book Zero: What the C or C++ Programmer Needs to Know about C# and the .NET Framework, available from my website at www.charlespetzold.com/dotnet.

System Requirements

To use this book properly you’ll need to download and install the Windows Phone Developer Tools, which includes Visual Studio 2010 Express for Windows Phone, XNA Game Studio 4.0, and an on-screen Windows Phone Emulator to test your programs in the absence of an actual device. Get the latest information and downloads at http://developer.windowsphone.com.
You can install these tools on top of Visual Studio 2010, in effect enhancing Visual Studio 2010 for phone development. That’s the configuration I used.
Although you can do quite a bit with the phone emulator, at some point you’ll want to deploy your programs to an actual Windows Phone 7 device. You can register as a phone developer at http://developer.windowsphone.com and then have the ability to unlock your phone so you can deploy your programs from Visual Studio.
Since late July 2010, I’ve had an LG GW910 phone to test the programs in this book. For the record, the final build I installed was 7.0.7003.0.

Using the Phone Emulator

Windows Phone 7 supports multi-touch, and working with multi-touch is an important part of developing programs for the phone. When using the Windows Phone Emulator, mouse clicks and mouse movement on the PC can mimic touch on the emulator, but for only one finger. You can test out multi-touch for real on the phone emulator if you have a multi-touch monitor running under Windows 7.
In the absence of a multi-touch monitor, you might want to explore simulating multi-touch with multiple mouse devices. The sitehttp://multitouchvista.codeplex.com has the download you’ll need and includes a link to http://michaelsync.net/2010/04/06/step-by-step-tutorial-installing-multi-touch-simulator-for-silverlight-phone-7 that provides instructions.
Windows Phone 7 devices also have a built-in accelerometer, which can be very difficult to simulate in an emulator. Per Blomqvist, the Technical Reviewer for this book, found an application at http://accelkit.codeplex.com that utilizes the webcam and ARToolkit to emulate the accelerometer sensor and feed that data into the Windows Phone 7 emulator through a TCP/HTTP Server, and although neither of us have tried it out, it sounds quite intriguing.

Code Samples

To illustrate Silverlight and XNA programming concepts, this book describes about 190 complete programs. Many of them are small and simple, but others are larger and more interesting.
Some people like to learn new programming environments by re-creating the projects in Visual Studio and typing in the source code themselves from the pages of the book. Others prefer to study the code and run the pre-existing programs to see what the code does. If you fall into the latter category, you can download all the source code in a ZIP file. The location of this ZIP file is available from my website at www.charlespetzold.com/phone and from the Microsoft Press blog at http://blogs.msdn.com/b/microsoft_press/.
If you find something in the code that is useful in your own software project, feel free to use the code without restriction—either straight up or modified in whatever way you want. That’s what it’s there for.

Last-Minute Items

As I was nearing the completion this book, the first version of the Silverlight for Windows Phone Toolkit was released with some additional elements and controls, and is available for downloading at http://silverlight.codeplex.com. Historically, these Silverlight toolkits very often contain previews of elements and controls that are incorporated into later Silverlight releases. I regret that I could not include a discussion of the toolkit contents in the appropriate chapters of this book.
With XNA programs, sometimes Visual Studio complains that it can’t build or deploy the program. If you encounter that problem, in the Solution Platforms drop-down list on the standard toolbar, select “Windows Phone” rather than “Any CPU”. Or, invoke the Configuration Manager from the Build menu, and in the Active Solution Platform drop-down select “Windows Phone” rather than “Any CPU”.
The www.charlespetzold.com/phone page on my website will contain information about this book and perhaps even some information about a future edition. I also hope to blog about Windows Phone 7 programming as much as possible.

The Essential People

This book owes its existence to Dave Edson—an old friend from the early 1990s era of Microsoft Systems Journal—who had the brilliant idea that I would be the perfect person to write a tutorial on Windows Phone 7. Dave arranged for me to attend a technical deep dive on the phone at Microsoft in December 2009, and I was hooked. Todd Brix gave the thumbs up on the book, and Anand Iyer coordinated the project with Microsoft Press.
At Microsoft Press, Ben Ryan launched the project and Devon Musgrave had the unenviable job of trying to make my code and prose resemble an actual book. (We all go way back: You’ll see Ben and Devon’s names on the bottom of the copyright page of Programming Windows, fifth edition, published in 1998.)
My Technical Reviewer was the diligent Per Blomqvist, who apparently tested all the code in both the sample files and as the listings appear in the book, and who in the process caught several errors on my part that were truly, well, shocking.
Dave Edson also reviewed some chapters and served as conduit to the Windows Phone team to deal with my technical problems and questions. Early on, Aaron Stebner provided essential guidance; Michael Klucher reviewed chapters, and Kirti Deshpande, Charlie Kindel, Casey McGee, and Shawn Oster also had important things to tell me. Thanks to Bonnie Lehenbauer for reviewing a chapter.
I am also indebted to Shawn Hargreaves for his XNA expertise, and Yochay Kiriaty and Richard Bailey for the lowdown on tombstoning.
My wife Deirdre Sinnott has been a marvel of patience and tolerance over the past months as she dealt with an author given to sudden mood swings, insane yelling at the computer screen, and the conviction that the difficulty of writing a book relieves one of the responsibility of performing basic household chores.
Alas, I can’t blame any of them for bugs or other problems that remain in this book. Those are all mine.
Charles Petzold
New York City and Roscoe, New York
October 22, 2010
TABLE OF CONTENTS
Part I   The Basics
1   Hello, Windows Phone 7
Targeting Windows Phone 7
The Hardware Chassis
Sensors and Services
File | New | Project
A First Silverlight Phone Program
The Standard Silverlight Files
Color Themes
Points and Pixels
The XAP is a ZIP
An XNA Program for the Phone
2   Getting Oriented
Silverlight and Dynamic Layout
Orientation Events
XNA Orientation
Simple Clocks (Very Simple Clocks)
3   An Introduction to Touch
Low-Level Touch Handling in XNA
The XNA Gesture Interface
Low-Level Touch Events in Silverlight
The Manipulation Events
Routed Events
Some Odd Behavior?
4   Bitmaps, Also Known as Textures
XNA Texture Drawing
The Silverlight Image Element
Images Via the Web
Image and ImageSource
Loading Local Bitmaps from Code
Capturing from the Camera
The Phone’s Photo Library
5   Sensors and Services
Accelerometer
A Simple Bubble Level
Geographic Location
Using a Map Service
6   Issues in Application Architecture
Basic Navigation
Passing Data to Pages
Sharing Data Among Pages
Retaining Data across Instances
The Multitasking Ideal
Task Switching on the Phone
Page State
Isolated Storage
XNA Tombstoning and Settings
Testing and Experimentation
Part II   Silverlight
7   XAML Power and Limitations
TextBlock in Code
Property Inheritance
Property-Element Syntax
Colors and Brushes
Content and Content Properties
The Resources Collection
Sharing Brushes
x:Key and x:Name
An Introduction to Styles
Style Inheritance
Themes
Gradient Accents
8   Elements and Properties
Basic Shapes
Transforms
Animating at the Speed of Video
Handling Manipulation Events
The Border Element
TextBlock Properties and Inlines
More on Images
Playing Movies
Modes of Opacity
Non-Tiled Tile Brushes
9   The Intricacies of Layout
The Single-Cell Grid
The StackPanel Stack
Text Concatenation with StackPanel
Nested Panels
Visibility and Layout
Two ScrollViewer Applications
The Mechanism of Layout
Inside the Panel
A Single-Cell Grid Clone
A Custom Vertical StackPanel
The Retro Canvas
Canvas and ZIndex
The Canvas and Touch
The Mighty Grid
10   The App Bar and Controls
ApplicationBar Icons
Jot and Application Settings
Jot and Touch
Jot and the ApplicationBar
Elements and Controls
RangeBase and Slider
The Basic Button
The Concept of Content
Theme Styles and Precedence
The Button Hierarchy
Toggling a Stopwatch
Buttons and Styles
TextBox and Keyboard Input
11   Dependency Properties
The Problem Illustrated
The Dependency Property Difference
Deriving from UserControl
A New Type of Toggle
Panels with Properties
Attached Properties
12   Data Bindings
Source and Target
Target and Mode
Binding Converters
Relative Source
The “this” Source
Notification Mechanisms
A Simple Binding Server
Setting the DataContext
Simple Decision Making
Converters with Properties
Give and Take
TextBox Binding Updates
13   Vector Graphics
The Shapes Library
Canvas and Grid
Overlapping and ZIndex
Polylines and Custom Curves
Caps, Joins, and Dashes
Polygon and Fill
The Stretch Property
Dynamic Polygons
The Path Element
Geometries and Transforms
Grouping Geometries
The Versatile PathGeometry
The ArcSegment
Bézier Curves
The Path Markup Syntax
How This Chapter Was Created
14   Raster Graphics
The Bitmap Class Hierarchy
WriteableBitmap and UIElement
The Pixel Bits
Vector Graphics on a Bitmap
Images and Tombstoning
Saving to the Picture Library
Becoming a Photo Extras Application
15   Animations
Frame-Based vs. Time-Based
Animation Targets
Click and Spin
Some Variations
XAML-Based Animations
A Cautionary Tale
Key Frame Animations
Trigger on Loaded
Animating Attached Properties (or Not)
Splines and Key Frames
The Bouncing Ball Problem
The Easing Functions
Animating Perspective Transforms
Animations and Property Precedence
16   The Two Templates
ContentControl and DataTemplate
Examining the Visual Tree
ControlTemplate Basics
The Visual State Manager
Sharing and Reusing Styles and Templates
Custom Controls in a Library
Variations on the Slider
The Ever-Handy Thumb
Custom Controls
17   Items Controls
Items Controls and Visual Trees
Customizing Item Displays
ListBox Selection
Binding to ItemsSource
Databases and Business Objects
Fun with DataTemplates
Sorting
Changing the Panel
The DataTemplate Bar Chart
A Card File Metaphor
18   Pivot and Panorama
Compare and Contrast
Music by Composer
The XNA Connection
The XNA Music Classes: MediaLibrary
Displaying the Albums
The XNA Music Classes: MediaPlayer
Part III   XNA
19   Principles of Movement
The Naïve Approach
A Brief Review of Vectors
Moving Sprites with Vectors
Working with Parametric Equations
Fiddling with the Transfer Function
Scaling the Text
Two Text Rotation Programs
20   Textures and Sprites
The Draw Variants
Another Hello Program?
Driving Around the Block
Movement Along a Polyline
The Elliptical Course
A Generalized Curve Solution
21   Dynamic Textures
The Render Target
Preserving Render Target Contents
Drawing Lines
Manipulating the Pixel Bits
The Geometry of Line Drawing
Modifying Existing Images
22   From Gestures to Transforms
Gestures and Properties
Scale and Rotate
Matrix Transforms
The Pinch Gesture
Flick and Inertia
The Mandelbrot Set
Pan and Zoom
Game Components
Affine and Non-Affine Transforms
23   Touch and Play
More Game Components
The PhingerPaint Canvas
A Little Tour Through SpinPaint
The SpinPaint Code
The Actual Drawing
PhreeCell and a Deck of Cards
The Playing Field
Play and Replay
24   Tilt and Play
3D Vectors
A Better Bubble Visualization
The Graphical Rendition
Follow the Rolling Ball
Navigating a Maze


No comments:

Post a Comment