<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4995334164049002857</id><updated>2012-01-19T14:45:35.020+01:00</updated><category term='Multi-platform Mobile Development'/><category term='Visual Studio'/><category term='Windows Mobile'/><category term='Windows Phone 7'/><category term='SQL Server Compact Edition'/><category term='Transparent Controls'/><category term='Graphics'/><category term='.NET Compact Framework'/><category term='TFS'/><category term='Image Manipulation'/><category term='GPS'/><category term='Controls'/><category term='How to'/><category term='32feet.NET'/><category term='Native Code'/><category term='TextBox'/><category term='RAPI'/><category term='Windows Mobile 6.0'/><category term='Android'/><category term='Design Patterns'/><category term='WPF'/><category term='Step by Step'/><category term='CodePlex'/><category term='ListView'/><title type='text'>Christian Helle's Blog</title><subtitle type='html'>This blog is dedicated to the art of building software</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>76</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-8029180074364801730</id><published>2011-06-07T08:35:00.004+02:00</published><updated>2012-01-19T14:32:01.654+01:00</updated><title type='text'>SQL Compact Query Analyzer</title><content type='html'>I’ve been working extensively on enterprise mobility projects lately. These applications integrate into large SAP based systems and when testing the system it can get very tedious to set up some temporary data from the backend. I’m also working with some not-so-technical testers that get intimidated by the Visual Studio or the SQL Server Management Studio. This led me to writing an open source project called &lt;a href="http://sqlcequery.codeplex.com/"&gt;SQL Compact Query Analyzer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here’s some details I pulled directly off the CodePlex site&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #30332d; font-family: 'Segoe UI', 'Microsoft Sans Serif', Arial, Geneva, sans-serif; font-size: 13px;"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;SQL Server Compact Edition Database Query Analyzer&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Features:&lt;/b&gt;&lt;br /&gt;- Execute SQL Queries against a SQL Server Compact Edition database&lt;br /&gt;- Table Data Editor to easily edit the contents of the database&lt;br /&gt;- Supports SQLCE 3.0, 3.1, 3.5 and 4.0&lt;br /&gt;- Execute multiple SQL queries (delimited by a semi colon&amp;nbsp;&lt;b&gt;;&lt;/b&gt;)&lt;br /&gt;- Display query result as XML&lt;br /&gt;- Shrink and Compact Databases&lt;br /&gt;- SDF file association with SQL Compact Query Analyzer for launching directly by opening the SDF in Windows Explorer&lt;br /&gt;- Generate Schema and Data Scripts&lt;br /&gt;- Display database and schema information&lt;br /&gt;- Support for password protected databases&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Coming Soon:&lt;/b&gt;&lt;br /&gt;- Purge database content&lt;br /&gt;- Create new database&lt;br /&gt;- Create, edit, and drop tables&lt;br /&gt;- Create, edit, and delete table references and indexes&lt;br /&gt;- Support for SQL Server Compact Edition 2.0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Screenshots&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://download.codeplex.com/download?ProjectName=sqlcequery&amp;amp;DownloadId=253721" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" /&gt;&lt;br /&gt;- Displays database and schema information and executes multiple SQL queries directly&lt;br /&gt;&lt;br /&gt;&lt;img src="http://download.codeplex.com/download?ProjectName=sqlcequery&amp;amp;DownloadId=253723" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" /&gt;&lt;br /&gt;- Edit the table data directly&lt;br /&gt;&lt;br /&gt;&lt;img src="http://download.codeplex.com/download?ProjectName=sqlcequery&amp;amp;DownloadId=253725" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" /&gt;&lt;br /&gt;- Display the contents of IMAGE fields&lt;br /&gt;&lt;br /&gt;&lt;img src="http://download.codeplex.com/download?ProjectName=sqlcequery&amp;amp;DownloadId=253727" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" /&gt;&lt;br /&gt;- Performance numbers for queries&lt;br /&gt;&lt;br /&gt;&lt;img src="http://download.codeplex.com/download?ProjectName=sqlcequery&amp;amp;DownloadId=253728" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" /&gt;&lt;br /&gt;- Query errors&lt;br /&gt;&lt;br /&gt;&lt;img src="http://download.codeplex.com/download?ProjectName=sqlcequery&amp;amp;DownloadId=253729" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" /&gt;&lt;br /&gt;- Output result set as XML&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Check it out! You might find it useful!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-8029180074364801730?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/8029180074364801730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=8029180074364801730' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/8029180074364801730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/8029180074364801730'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2011/06/sql-compact-query-analyzer.html' title='SQL Compact Query Analyzer'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-3941131121333901945</id><published>2011-03-10T23:17:00.004+01:00</published><updated>2012-01-19T14:45:35.026+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server Compact Edition'/><category scheme='http://www.blogger.com/atom/ns#' term='CodePlex'/><title type='text'>SQL Compact Code Generator</title><content type='html'>More than a year ago, I published a project on CodePlex called &lt;a href="http://sqlcecodegen.codeplex.com/"&gt;SQL Compact Code Generator&lt;/a&gt;. Unfortunately, I never managed to find the time to do some work on it and the project was set on a very long hold. A year after I suddenly really needed such a tool and decided that I should put in some hours on the project.&lt;br /&gt;&lt;br /&gt;I'm currently working on a large enterprise project where changes to the database schema is done rather frequently, to avoid the pain of updating my data layer after every change I decided to use my code generator.&lt;br /&gt;&lt;br /&gt;Here's some details I pulled directly off the CodePlex site.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #30332d; font-family: 'Segoe UI', 'Microsoft Sans Serif', Arial, Geneva, sans-serif; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em;"&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;br /&gt;Contains a stand alone GUI application and a Visual Studio Custom Tool for automatically generating a .NET data access layer code for objects in a SQL Server Compact Edition database.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/div&gt;&lt;ul style="list-style-image: url(http://i2.codeplex.com/Images/v18365/doublearrow.gif); list-style-type: none; margin-left: 0em; padding-left: 2em;"&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Visual Studio 2008 and 2010 Custom Tool Support&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Creates entity classes for each table in the database&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Generates data access code that implements the Repository Pattern&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Generates methods for Create, Read, Update and Delete operations&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Generates SelectBy and DeleteBy methods for every column in every table&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Generates a Purge method for every table to delete all records&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Generates Count() method for retrieving the number of records in each table&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Generates CreateDatabase() method for re-creating the database&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Generates xml-doc code comments for entities and data access methods&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Generates Entity Unit Tests&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Generates Data Access Unit Tests&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Generates .NET Compact and Full Framework compatible code&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Support for SQL Compact Edition version 4.0&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Multiple test framework code generation (MSTest, NUnit, xUnit)&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Transaction support per DataRepository instance (Begin, Commit, Rollback)&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Code generation options to enable/disable unit test code generation&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Windows Phone 7 "Mango"&amp;nbsp;support for generating a LINQ to SQL DataContext&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em;"&gt;&lt;br /&gt;&lt;strong&gt;Coming Soon:&lt;/strong&gt;&lt;/div&gt;&lt;ul style="list-style-image: url(http://i2.codeplex.com/Images/v18365/doublearrow.gif); list-style-type: none; margin-left: 0em; padding-left: 2em;"&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Generate database maintenance code (clear database, shrink/compress database)&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Support for multiple versions of SQL Server Compact Edition&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;VB.NET Code Support&lt;/li&gt;&lt;li style="margin-bottom: 0.3em; margin-left: 0px; margin-top: 0.3em; vertical-align: middle;"&gt;Visual Studio Add-in&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Screenshots:&lt;/strong&gt;&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em;"&gt;&lt;strong&gt;&lt;/strong&gt;﻿&lt;img alt="" src="http://download.codeplex.com/download?ProjectName=sqlcecodegen&amp;amp;DownloadId=256691" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em;"&gt;&lt;strong&gt;NEW:&amp;nbsp;&lt;/strong&gt;Custom Tool for&amp;nbsp;Windows Phone 7 "Mango"&lt;/div&gt;&lt;div style="margin-bottom: 1em; margin-top: 1em;"&gt;&lt;br /&gt;&lt;img alt="" src="http://download.codeplex.com/download?ProjectName=sqlcecodegen&amp;amp;DownloadId=256711" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" /&gt;&lt;br /&gt;Custom Tool&lt;br /&gt;&lt;br /&gt;&lt;img alt="" src="http://download.codeplex.com/download?ProjectName=sqlcecodegen&amp;amp;DownloadId=219216" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" width="800" /&gt;&lt;br /&gt;Generating Entity Classes&lt;br /&gt;&lt;br /&gt;&lt;img alt="" src="http://download.codeplex.com/download?ProjectName=sqlcecodegen&amp;amp;DownloadId=219219" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" width="800" /&gt;&lt;br /&gt;Generating Data Access methods that implement the Repository Pattern&lt;br /&gt;&lt;br /&gt;&lt;img alt="" src="http://download.codeplex.com/download?ProjectName=sqlcecodegen&amp;amp;DownloadId=217329" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" width="800" /&gt;&lt;br /&gt;Generating Entity Unit Tests&lt;br /&gt;&lt;br /&gt;&lt;img alt="" src="http://download.codeplex.com/download?ProjectName=sqlcecodegen&amp;amp;DownloadId=217330" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; max-width: 100%;" width="800" /&gt;&lt;br /&gt;Generating Data Access Unit Tests to validate the integrity between the data layer and the actual database&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #30332d; font-family: 'Segoe UI', 'Microsoft Sans Serif', Arial, Geneva, sans-serif; font-size: x-small;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: 13px; font-weight: normal;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;Check it out! You might find it useful too...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-3941131121333901945?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/3941131121333901945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=3941131121333901945' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/3941131121333901945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/3941131121333901945'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2011/03/sql-ce-code-generator.html' title='SQL Compact Code Generator'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-8867165319107967945</id><published>2011-02-10T15:15:00.001+01:00</published><updated>2011-02-10T15:18:39.363+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>How to display a Notification Bubble in Windows Mobile using .NETCF</title><content type='html'>Yesterday, I found myself using an old piece of code that I wrote ages ago. It's something I've used every now and then for past few years. Since I myself find it useful, I might as well share it. All the code does is display a Notification Bubble in Windows Mobile. To do this you use the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsce.forms.notification.aspx"&gt;Notification&lt;/a&gt; class in the Microsoft.WindowsCE.Forms namespace. Even though the Notification class is very straight forward and easy to use, I created a helper class so that I only need to write one line of code for displaying a notification bubble: NotificationBubble.Show(2, "Caption", "Text");&lt;br/&gt;&lt;br/&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Used for displaying a notification bubble&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;NotificationBubble&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Displays a notification bubble&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name=&amp;quot;duration&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Duration in which the notification bubble is shown (in seconds)&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name=&amp;quot;caption&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Caption&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name=&amp;quot;text&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Body&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Show(&lt;span style="color: blue;"&gt;int&lt;/span&gt; duration, &lt;span style="color: blue;"&gt;string&lt;/span&gt; caption, &lt;span style="color: blue;"&gt;string&lt;/span&gt; text)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; bubble = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Notification&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; InitialDuration = duration,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Caption = caption,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Text = text&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; bubble.BalloonChanged += OnBalloonChanged;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; bubble.Visible = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnBalloonChanged(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;BalloonChangedEventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!e.Visible)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ((&lt;span style="color: #2b91af;"&gt;Notification&lt;/span&gt;)sender).Dispose();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;Hope you found this helpful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-8867165319107967945?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/8867165319107967945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=8867165319107967945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/8867165319107967945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/8867165319107967945'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2011/02/how-to-display-notification-bubble-in.html' title='How to display a Notification Bubble in Windows Mobile using .NETCF'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-566654096796432301</id><published>2011-02-05T00:30:00.001+01:00</published><updated>2011-02-05T00:30:00.358+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><title type='text'>Working around Pivot SelectedIndex limitations in Windows Phone 7</title><content type='html'>I've been working on an application with 2 pages, a main page and a content page. The content page contains a Pivot control with a few pivot items. The main page does nothing but navigate to the content page and suggest which pivot item to display. The only reason the main page exists is to display the information in the pivot item headers in a more graphical and elegant way.&lt;br/&gt;&lt;br/&gt;For some reason I can't set the displayed pivot index to be the third item. I wanted to do this on the OnNavigatedTo event of the content page but whenever I attempt doing so an exception is thrown. Every other pivot item works fine, which I think is really weird.&lt;br/&gt;&lt;br/&gt;To load the content page, I navigate to the page by passing some information of the pivot index I wish to be displayed. Something like this:&lt;br/&gt;&lt;br/&gt;&lt;div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;NavigationService.Navigate(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;/ContentPage.xaml?index=&amp;quot;&lt;/span&gt; + index, &lt;span style="color: #2b91af;"&gt;UriKind&lt;/span&gt;.Relative));&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;If the value of index in the code above is set to 2 then I get an exception, any other valid value works fine. A value out of range (less than 0 or greater than 5) throws an out of range exception which is the behavior anyone would expect.&lt;br/&gt;&lt;br/&gt;Here's the XAML definition of the content page&lt;br/&gt;&lt;br/&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;phone:PhoneApplicationPage&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;x:Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;WindowsPhonePivotApplication.ContentPage&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns:x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns:phone&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns:shell&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns:controls&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns:d&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;http://schemas.microsoft.com/expression/blend/2008&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns:mc&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;http://schemas.openxmlformats.org/markup-compatibility/2006&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;mc:Ignorable&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;d&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;d:DesignWidth&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;480&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;d:DesignHeight&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;768&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;FontFamily&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;{StaticResource PhoneFontFamilyNormal}&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;FontSize&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;{StaticResource PhoneFontSizeNormal}&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Foreground&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;{StaticResource PhoneForegroundBrush}&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;SupportedOrientations&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;Portrait&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;Orientation&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;Portrait&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;shell:SystemTray.IsVisible&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;True&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;x:Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;LayoutRoot&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;Transparent&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;controls:Pivot&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;pivot&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Title&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;CONTENT PAGE&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;controls:PivotItem&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Header&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;first&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;controls:PivotItem&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Header&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;second&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;controls:PivotItem&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Header&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;third&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;controls:PivotItem&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Header&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;fourth&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;controls:PivotItem&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Header&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;fifth&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;controls:PivotItem&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Header&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;sixth&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;controls:Pivot&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;phone:PhoneApplicationPage&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;To work around this limitation, you can handle the Loaded event of the page and update the pivot selected index from there. Here's an example how to do it:&lt;br/&gt;&lt;br/&gt;&lt;div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;partial&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ContentPage&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;PhoneApplicationPage&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; pivotIndex;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; ContentPage()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Loaded += &lt;span style="color: blue;"&gt;delegate&lt;/span&gt; { pivot.SelectedIndex = pivotIndex; };&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnNavigatedTo(&lt;span style="color: #2b91af;"&gt;NavigationEventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; value;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (NavigationContext.QueryString.TryGetValue(&lt;span style="color: #a31515;"&gt;&amp;quot;index&amp;quot;&lt;/span&gt;, &lt;span style="color: blue;"&gt;out&lt;/span&gt; value))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pivotIndex = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt;.TryParse(value, &lt;span style="color: blue;"&gt;out&lt;/span&gt; pivotIndex);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;I'm not sure if this limitation is by design or it's a bug in the control. Either way I managed to get it to work the way I wanted it to. Hopefully I'm not the only one who ran across this and that you found this information useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-566654096796432301?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/566654096796432301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=566654096796432301' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/566654096796432301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/566654096796432301'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2011/02/working-around-pivot-selectedindex.html' title='Working around Pivot SelectedIndex limitations in Windows Phone 7'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-7904233113719038040</id><published>2011-02-04T01:00:00.002+01:00</published><updated>2011-02-04T01:00:04.655+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Image Manipulation'/><title type='text'>How to Darken an Image in WPF</title><content type='html'>I'm really getting carried away with playing with image manipulation in WPF. Here's a short post on how to darken an image using the WriteableBitmap class.&lt;br/&gt;&lt;br/&gt;The process is fairly simple, I manipulate each pixel by decrementing each RGB value with the provided level&lt;br/&gt;&lt;br/&gt;&lt;div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;unsafe&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BitmapSource&lt;/span&gt; Darken(&lt;span style="color: #2b91af;"&gt;BitmapSource&lt;/span&gt; image, &lt;span style="color: blue;"&gt;double&lt;/span&gt; level)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PIXEL_SIZE = 4;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; height = image.PixelHeight;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; width = image.PixelWidth;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; bitmap = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WriteableBitmap&lt;/span&gt;(image);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.Lock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; backBuffer = (&lt;span style="color: blue;"&gt;byte&lt;/span&gt;*)bitmap.BackBuffer.ToPointer();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; y = 0; y &amp;lt; height; y++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; row = backBuffer + (y * bitmap.BackBufferStride);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; x = 0; x &amp;lt; width; x++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; PIXEL_SIZE; i++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; row[x * PIXEL_SIZE + i] = (&lt;span style="color: blue;"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af;"&gt;Math&lt;/span&gt;.Max(row[x * PIXEL_SIZE + i] - level, 0);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.AddDirtyRect(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Int32Rect&lt;/span&gt;(0, 0, width, height));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.Unlock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; bitmap;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;Hope you found this useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-7904233113719038040?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/7904233113719038040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=7904233113719038040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/7904233113719038040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/7904233113719038040'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2011/02/how-to-darken-image-in-wpf.html' title='How to Darken an Image in WPF'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-1929113951975840048</id><published>2011-02-03T10:00:00.010+01:00</published><updated>2011-02-03T10:00:17.946+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Image Manipulation'/><title type='text'>How to Brighten an Image in WPF</title><content type='html'>Now I'm just getting carried away with playing with image manipulation in WPF. Here's a short post on how to brighten an image using the WriteableBitmap class.&lt;br/&gt;&lt;br/&gt;The process is fairly simple, I manipulate each pixel by incrementing each RGB value with the provided level&lt;br/&gt;&lt;br/&gt;&lt;div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;unsafe&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BitmapSource&lt;/span&gt; Brighten(&lt;span style="color: #2b91af;"&gt;BitmapSource&lt;/span&gt; image, &lt;span style="color: blue;"&gt;double&lt;/span&gt; level)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PIXEL_SIZE = 4;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; height = image.PixelHeight;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; width = image.PixelWidth;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; bitmap = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WriteableBitmap&lt;/span&gt;(image);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.Lock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; backBuffer = (&lt;span style="color: blue;"&gt;byte&lt;/span&gt;*)bitmap.BackBuffer.ToPointer();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; y = 0; y &amp;lt; height; y++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; row = backBuffer + (y * bitmap.BackBufferStride);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; x = 0; x &amp;lt; width; x++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; PIXEL_SIZE; i++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; row[x * PIXEL_SIZE + i] = (&lt;span style="color: blue;"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af;"&gt;Math&lt;/span&gt;.Min(row[x * PIXEL_SIZE + i] + level, 255);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.AddDirtyRect(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Int32Rect&lt;/span&gt;(0, 0, width, height));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.Unlock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; bitmap;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;Hope you found this useful&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-1929113951975840048?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/1929113951975840048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=1929113951975840048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/1929113951975840048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/1929113951975840048'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2011/02/how-to-brighten-image-in-wpf.html' title='How to Brighten an Image in WPF'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-1726784415064280006</id><published>2011-02-02T00:22:00.000+01:00</published><updated>2011-02-02T00:22:46.986+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Image Manipulation'/><title type='text'>How to Alpha Blend 2 Images in WPF</title><content type='html'>After having such fun trying to find optimal ways of manipulating images in WPF I decided to write another short post on image manipulation. This time I'd like to demonstrate how to alpha blend 2 images using the WriteableBitmap class.&lt;br/&gt;&lt;br/&gt;I'm probably not the best one to explain how alpha blending is done but here's the idea in a nutshell. I get the RGB values of every pixel for the each image and write them to a new bitmap where I manipulate each color information by applying the following formula:&lt;br/&gt;&lt;br/&gt;r = ((image1 pixel (red) * alpha level) + (image2 pixel (red) * inverse alpha level)) / 256&lt;br/&gt;b = ((image1 pixel (blue) * alpha level) + (image2 pixel (blue) * inverse alpha level)) / 256&lt;br/&gt;g = ((image1 pixel (green) * alpha level) + (image2 pixel (green) * inverse alpha level)) / 256&lt;br/&gt;&lt;br/&gt;&lt;div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;unsafe&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WriteableBitmap&lt;/span&gt; AlphaBlend(&lt;span style="color: #2b91af;"&gt;BitmapSource&lt;/span&gt; image1, &lt;span style="color: #2b91af;"&gt;BitmapSource&lt;/span&gt; image2, &lt;span style="color: blue;"&gt;int&lt;/span&gt; alphaLevel)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PIXEL_SIZE = 4;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; ialphaLevel = 256 - alphaLevel;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; height = &lt;span style="color: #2b91af;"&gt;Math&lt;/span&gt;.Min(image1.PixelHeight, image2.PixelHeight);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; width = &lt;span style="color: #2b91af;"&gt;Math&lt;/span&gt;.Min(image1.PixelWidth, image2.PixelWidth);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; bitmap = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WriteableBitmap&lt;/span&gt;(width, height, image1.DpiX, image1.DpiY, &lt;span style="color: #2b91af;"&gt;PixelFormats&lt;/span&gt;.Bgr32, &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; bitmap1 = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WriteableBitmap&lt;/span&gt;(image1);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; bitmap2 = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WriteableBitmap&lt;/span&gt;(image2);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.Lock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap1.Lock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap2.Lock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; backBuffer = (&lt;span style="color: blue;"&gt;byte&lt;/span&gt;*)bitmap.BackBuffer.ToPointer();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; bitmap1Buffer = (&lt;span style="color: blue;"&gt;byte&lt;/span&gt;*)bitmap1.BackBuffer.ToPointer();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; bitmap2Buffer = (&lt;span style="color: blue;"&gt;byte&lt;/span&gt;*)bitmap2.BackBuffer.ToPointer();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; y = 0; y &amp;lt; height; y++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; row = backBuffer + (y * bitmap.BackBufferStride);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; img1Row = bitmap1Buffer + (y * bitmap1.BackBufferStride);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; img2Row = bitmap2Buffer + (y * bitmap2.BackBufferStride);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; x = 0; x &amp;lt; width; x++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; PIXEL_SIZE; i++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; row[x * PIXEL_SIZE + i] = (&lt;span style="color: blue;"&gt;byte&lt;/span&gt;)(((img1Row[x * PIXEL_SIZE + i] * alphaLevel) + (img2Row[x * PIXEL_SIZE + i] * ialphaLevel)) &amp;gt;&amp;gt; 8);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.AddDirtyRect(&lt;span style="color: blue;"&gt;new&lt;/span&gt; Int32Rect(0, 0, width, height));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap2.Unlock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap1.Unlock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.Unlock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; bitmap;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;The method above will probably work best if the 2 images are of the same size. I hope you found this information useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-1726784415064280006?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/1726784415064280006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=1726784415064280006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/1726784415064280006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/1726784415064280006'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2011/02/how-to-alpha-blend-2-images-in-wpf.html' title='How to Alpha Blend 2 Images in WPF'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-7134900830504549198</id><published>2011-02-01T12:22:00.000+01:00</published><updated>2011-02-01T12:22:38.038+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Image Manipulation'/><title type='text'>How to convert an image to gray scale in WPF</title><content type='html'>I've been playing with the Windows Presentation Foundation today and I had a task where I needed to convert an image to gray scale to do some image analysis on it. I've done this a bunch of times before using GDI methods or by accessing the BitmapData class in .NET. For this short post I'd like to demonstrate how to manipulate images using the WriteableBitmap class.&lt;br /&gt;&lt;br /&gt;The easiest way to convert an image to gray scale is to set the RGB values of every pixel to the average of each pixels RBG values. &lt;br /&gt;R = (R + B + G) / 3&lt;br /&gt;G = (R + B + G) / 3&lt;br /&gt;B = (R + B + G) / 3&lt;br /&gt;&lt;br /&gt;Here's a code snippet for manipulating a BitmapSource object using the WriteableBitmap class into a gray scale image:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;unsafe&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BitmapSource&lt;/span&gt; ToGrayScale(&lt;span style="color: #2b91af;"&gt;BitmapSource&lt;/span&gt; source)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PIXEL_SIZE = 4;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; width = source.PixelWidth;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; height = source.PixelHeight;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; bitmap = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WriteableBitmap&lt;/span&gt;(source);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.Lock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; backBuffer = (&lt;span style="color: blue;"&gt;byte&lt;/span&gt;*)bitmap.BackBuffer.ToPointer();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; y = 0; y &amp;lt; height; y++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; row = backBuffer + (y * bitmap.BackBufferStride);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; x = 0; x &amp;lt; width; x++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; grayScale = (&lt;span style="color: blue;"&gt;byte&lt;/span&gt;)(((row[x * PIXEL_SIZE + 1]) + (row[x * PIXEL_SIZE + 2]) + (row[x * PIXEL_SIZE + 3])) / 3);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; PIXEL_SIZE; i++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; row[x * PIXEL_SIZE + i] = grayScale;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.AddDirtyRect(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Int32Rect&lt;/span&gt;(0, 0, width, height));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bitmap.Unlock();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; bitmap;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Another way to to convert an image to gray scale is to set the RGB values of every pixel to the sum of 30% of the red value, 59% of the green value, and 11% of the blue value. Hope you find this useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-7134900830504549198?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/7134900830504549198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=7134900830504549198' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/7134900830504549198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/7134900830504549198'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2011/02/how-to-convert-image-to-gray-scale-in.html' title='How to convert an image to gray scale in WPF'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-2178191598738103131</id><published>2011-01-20T16:28:00.000+01:00</published><updated>2011-01-20T16:28:14.655+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Multi-platform Mobile Development'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>Multi-platform Mobile Development - Sending SMS</title><content type='html'>This is a task that pretty much every mobile device can do, or at least any mobile phone can do. In this short post on multi-platform mobile development I would like to demonstrate how to send an SMS or launch the SMS compose window in a mobile application.&lt;br /&gt;&lt;br /&gt;I'm going to demonstrate how to use the messaging API's of the following platforms:&lt;ul&gt;&lt;li&gt;Android&lt;/li&gt;&lt;li&gt;Windows Phone 7&lt;/li&gt;&lt;li&gt;Windows Mobile 5.0 (and higher) using .NET Compact Framework&lt;/li&gt;&lt;li&gt;Windows Mobile using the Platform SDK (Native code)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Android&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There are 2 ways of sending SMS from an Android application: Launching the Compose SMS window; Through the SmsManager API. I figured that since this article is supposed to demonstrate as many ways as possible for sending SMS that I create a helper class containing methods that I think would be useful or at least convenient to have.&lt;br /&gt;&lt;br /&gt;Here's a SMS helper class for Android that I hope you would find useful.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;java&gt;&lt;style&gt;td.java, td.java-ln {vertical-align:top;}tt.java, tt.java-ln, pre.java, pre.java-ln {line-height:1em; margin-bottom:0em;}td.java-ln { text-align:right; }tt.java-ln, pre.java-ln { color:#888888 }/* Background       */ span.java0  { font-size: 10pt; color:#ffffff; }/* Line numbers       */ span.java1  { font-size: 10pt; color:#808080; }/* Multi-line comments       */ span.java2  { font-size: 10pt; color:#3f7f5f; }/* Single-line comments       */ span.java3  { font-size: 10pt; color:#3f7f5f; }/* Keywords       */ span.java4  { font-size: 10pt; color:#7f0055; font-weight:bold; }/* Strings       */ span.java5  { font-size: 10pt; color:#2a00ff; }/* Character constants       */ span.java6  { font-size: 10pt; color:#990000; }/* Numeric constants       */ span.java7  { font-size: 10pt; color:#990000; }/* Parenthesis       */ span.java8  { font-size: 10pt; color:#000000; }/* Primitive Types       */ span.java9  { font-size: 10pt; color:#7f0055; font-weight:bold; }/* Others       */ span.java10  { font-size: 10pt; color:#000000; }/* Javadoc keywords       */ span.java11  { font-size: 10pt; color:#7f9fbf; }/* Javadoc HTML tags       */ span.java12  { font-size: 10pt; color:#7f7f9f; }/* Javadoc links       */ span.java13  { font-size: 10pt; color:#3f3fbf; }/* Javadoc others       */ span.java14  { font-size: 10pt; color:#3f5fbf; }/* Undefined       */ span.java15  { font-size: 10pt; color:#ff6100; }/* Annotation       */ span.java16  { font-size: 10pt; color:#646464; }&lt;/style&gt;&lt;source&gt;&lt;span class="java4"&gt;package &lt;/span&gt;&lt;span class="java10"&gt;com.christianhelle.android.samples;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.app.Activity;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.app.PendingIntent;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.content.BroadcastReceiver;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.content.Context;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.content.Intent;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.content.IntentFilter;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.net.Uri;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.telephony.SmsManager;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.widget.Toast;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="java14"&gt;/**&lt;br /&gt; * Helper class for sending SMS messages&lt;br /&gt; * &lt;br /&gt; * &lt;/span&gt;&lt;span class="java11"&gt;@author &lt;/span&gt;&lt;span class="java14"&gt;Christian Resma Helle&lt;br /&gt; */&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;public class &lt;/span&gt;&lt;span class="java10"&gt;Sms &lt;/span&gt;&lt;span class="java8"&gt;{&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;private final static &lt;/span&gt;&lt;span class="java10"&gt;String SENT_ACTION = &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;SENT&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;private final static &lt;/span&gt;&lt;span class="java10"&gt;String DELIVERED_ACTION = &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;DELIVERED&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;private &lt;/span&gt;&lt;span class="java10"&gt;Context context;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;private &lt;/span&gt;&lt;span class="java10"&gt;PendingIntent sentIntent;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;private &lt;/span&gt;&lt;span class="java10"&gt;PendingIntent deliveredIntent;&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;/**&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * Creates an instance of the SMS class&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;context&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; Context that owns displayed notifications&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; */&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java10"&gt;Sms&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;Context context&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;this&lt;/span&gt;&lt;span class="java10"&gt;.context = context;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; registerForNotification&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;private &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;registerForNotification&lt;/span&gt;&lt;span class="java8"&gt;() {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;sentIntent = PendingIntent.getBroadcast&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;context, &lt;/span&gt;&lt;span class="java7"&gt;0&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;Intent&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;SENT_ACTION&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java7"&gt;0&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; deliveredIntent = PendingIntent.getBroadcast&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;context, &lt;/span&gt;&lt;span class="java7"&gt;0&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;Intent&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;DELIVERED_ACTION&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java7"&gt;0&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; context.registerReceiver&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;messageSentReceiver, &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;IntentFilter&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;SENT_ACTION&lt;/span&gt;&lt;span class="java8"&gt;))&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; context.registerReceiver&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;messageDeliveredReceiver, &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;IntentFilter&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;DELIVERED_ACTION&lt;/span&gt;&lt;span class="java8"&gt;))&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;protected &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;finalize&lt;/span&gt;&lt;span class="java8"&gt;() &lt;/span&gt;&lt;span class="java4"&gt;throws &lt;/span&gt;&lt;span class="java10"&gt;Throwable &lt;/span&gt;&lt;span class="java8"&gt;{&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;context.unregisterReceiver&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;messageSentReceiver&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; context.unregisterReceiver&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;messageDeliveredReceiver&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;/**&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * Opens the Compose SMS application with the recipient phone number displayed&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;phoneNumber&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; recipient phone number of the SMS&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; */&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;composeMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;String phoneNumber&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;Intent intent = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;Intent&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;Intent.ACTION_VIEW, Uri.parse&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;sms:&amp;#34; &lt;/span&gt;&lt;span class="java10"&gt;+ phoneNumber&lt;/span&gt;&lt;span class="java8"&gt;))&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; context.startActivity&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;intent&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;/**&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * Opens the Compose SMS application with the recipient phone number and message displayed&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;phoneNumber&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; recipient phone number of the SMS&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;text&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; message body&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; */&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;composeMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;String phoneNumber, String text&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;Intent intent = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;Intent&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;Intent.ACTION_VIEW&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; intent.putExtra&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;sms_body&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, text&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; intent.putExtra&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;address&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, phoneNumber&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; intent.setType&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;vnd.android-dir/mms-sms&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; context.startActivity&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;intent&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;/**&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * Opens the Compose SMS application with the multiple recipient phone numbers and the message displayed&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;phoneNumber&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; recipient phone numbers of the SMS&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;text&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; message body&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; */&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;composeMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;String&lt;/span&gt;&lt;span class="java8"&gt;[] &lt;/span&gt;&lt;span class="java10"&gt;phoneNumbers, String text&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;StringBuilder sb = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;StringBuilder&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;for &lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;String string : phoneNumbers&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;sb.append&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;string&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; sb.append&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;;&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;composeMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;sb.toString&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;, text&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;/**&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * Send an SMS to the specified number&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;phoneNumber&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; recipient phone number of the SMS&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;text&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; message body&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; */&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;sendMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;String phoneNumber, String text&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;sendMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;phoneNumber, text, &lt;/span&gt;&lt;span class="java4"&gt;false&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;/**&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * Send an SMS to the specified number and display a notification on the message status&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * if the notifyStatus parameter is set to &lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;b&amp;gt;&lt;/span&gt;&lt;span class="java14"&gt;true&lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;/b&amp;gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;* &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;phoneNumber&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; recipient phone number of the SMS&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;text&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; message body&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;notifyStatus&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; set to &lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;b&amp;gt;&lt;/span&gt;&lt;span class="java14"&gt;true&lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;/b&amp;gt; &lt;/span&gt;&lt;span class="java14"&gt;to display a notification on the screen &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; *&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; if the message was sent and delivered properly, otherwise &lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;b&amp;gt;&lt;/span&gt;&lt;span class="java14"&gt;false&lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;/b&amp;gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;*/&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;sendMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;String phoneNumber, String text, &lt;/span&gt;&lt;span class="java9"&gt;boolean &lt;/span&gt;&lt;span class="java10"&gt;notifyStatus&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;SmsManager sms = SmsManager.getDefault&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;if &lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;notifyStatus&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;sms.sendTextMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;phoneNumber, null, text, sentIntent, deliveredIntent&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;} &lt;/span&gt;&lt;span class="java4"&gt;else &lt;/span&gt;&lt;span class="java8"&gt;{&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;sms.sendTextMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;phoneNumber, null, text, null, &lt;/span&gt;&lt;span class="java4"&gt;null&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; }&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;/**&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * Send an SMS to multiple recipients and display&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;phoneNumber&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; recipient phone number of the SMS&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;text&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; message body&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; */&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;sendMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;String&lt;/span&gt;&lt;span class="java8"&gt;[] &lt;/span&gt;&lt;span class="java10"&gt;phoneNumbers, String text&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;sendMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;phoneNumbers, text, &lt;/span&gt;&lt;span class="java4"&gt;false&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;/**&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * Send an SMS to multiple recipients and display a notification &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * on the message status if notifyStatus is set to &lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;b&amp;gt;&lt;/span&gt;&lt;span class="java14"&gt;true&lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;/b&amp;gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;* &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;phoneNumber&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; recipient phone number of the SMS&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;text&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; message body&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; * &lt;/span&gt;&lt;span class="java11"&gt;@param &lt;/span&gt;&lt;span class="java14"&gt;notifyStatus&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; set to &lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;b&amp;gt;&lt;/span&gt;&lt;span class="java14"&gt;true&lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;/b&amp;gt; &lt;/span&gt;&lt;span class="java14"&gt;to display a notification on the screen &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; *&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; if the message was sent and delivered properly, otherwise &lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;b&amp;gt;&lt;/span&gt;&lt;span class="java14"&gt;false&lt;/span&gt;&lt;span class="java12"&gt;&amp;lt;/b&amp;gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java14"&gt;*/&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;sendMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;String&lt;/span&gt;&lt;span class="java8"&gt;[] &lt;/span&gt;&lt;span class="java10"&gt;phoneNumbers, String text, &lt;/span&gt;&lt;span class="java9"&gt;boolean &lt;/span&gt;&lt;span class="java10"&gt;notifyStatus&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;StringBuilder sb = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;StringBuilder&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;for &lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;String string : phoneNumbers&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;sb.append&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;string&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; sb.append&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;;&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;sendMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;sb.toString&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;, text, notifyStatus&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;private &lt;/span&gt;&lt;span class="java10"&gt;BroadcastReceiver messageSentReceiver = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;BroadcastReceiver&lt;/span&gt;&lt;span class="java8"&gt;() {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java16"&gt;@Override&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;onReceive&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;Context context, Intent intent&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;switch &lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;getResultCode&lt;/span&gt;&lt;span class="java8"&gt;()) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;case &lt;/span&gt;&lt;span class="java10"&gt;Activity.RESULT_OK:&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; Toast.makeText&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;context, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;SMS sent&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, Toast.LENGTH_SHORT&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;.show&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;break&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;case &lt;/span&gt;&lt;span class="java10"&gt;SmsManager.RESULT_ERROR_GENERIC_FAILURE:&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; Toast.makeText&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;context, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Generic failure&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, Toast.LENGTH_SHORT&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;.show&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;break&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;case &lt;/span&gt;&lt;span class="java10"&gt;SmsManager.RESULT_ERROR_NO_SERVICE:&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; Toast.makeText&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;context, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;No service&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, Toast.LENGTH_SHORT&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;.show&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;break&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;case &lt;/span&gt;&lt;span class="java10"&gt;SmsManager.RESULT_ERROR_NULL_PDU:&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; Toast.makeText&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;context, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Null PDU&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, Toast.LENGTH_SHORT&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;.show&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;break&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;case &lt;/span&gt;&lt;span class="java10"&gt;SmsManager.RESULT_ERROR_RADIO_OFF:&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; Toast.makeText&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;context, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Radio off&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, Toast.LENGTH_SHORT&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;.show&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;break&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; }&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; }&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;private &lt;/span&gt;&lt;span class="java10"&gt;BroadcastReceiver messageDeliveredReceiver = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;BroadcastReceiver&lt;/span&gt;&lt;span class="java8"&gt;() {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java16"&gt;@Override&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;onReceive&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;Context context, Intent intent&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;switch &lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;getResultCode&lt;/span&gt;&lt;span class="java8"&gt;()) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;case &lt;/span&gt;&lt;span class="java10"&gt;Activity.RESULT_OK:&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; Toast.makeText&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;context, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Message delivered&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, Toast.LENGTH_SHORT&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;.show&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;break&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;case &lt;/span&gt;&lt;span class="java10"&gt;Activity.RESULT_CANCELED:&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; Toast.makeText&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;context, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Message not delivered&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, Toast.LENGTH_SHORT&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;.show&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;break&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; }&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; }&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span class="java8"&gt;}&lt;/span&gt;&lt;/source&gt;&lt;/java&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Before your Android application can send SMS it needs the right permissions for it. Add the SEND_SMS permission your AndroidManifest.xml&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;uses-permission&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;android:name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;android.permission.SEND_SMS&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;uses-permission&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here are some examples on how to use the SMS helper class defined above from within an Activity class:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;java&gt;&lt;style&gt;td.java, td.java-ln {vertical-align:top;}tt.java, tt.java-ln, pre.java, pre.java-ln {line-height:1em; margin-bottom:0em;}td.java-ln { text-align:right; }tt.java-ln, pre.java-ln { color:#888888 }/* Background       */ span.java0  { font-size: 10pt; color:#ffffff; }/* Line numbers       */ span.java1  { font-size: 10pt; color:#808080; }/* Multi-line comments       */ span.java2  { font-size: 10pt; color:#3f7f5f; }/* Single-line comments       */ span.java3  { font-size: 10pt; color:#3f7f5f; }/* Keywords       */ span.java4  { font-size: 10pt; color:#7f0055; font-weight:bold; }/* Strings       */ span.java5  { font-size: 10pt; color:#2a00ff; }/* Character constants       */ span.java6  { font-size: 10pt; color:#990000; }/* Numeric constants       */ span.java7  { font-size: 10pt; color:#990000; }/* Parenthesis       */ span.java8  { font-size: 10pt; color:#000000; }/* Primitive Types       */ span.java9  { font-size: 10pt; color:#7f0055; font-weight:bold; }/* Others       */ span.java10  { font-size: 10pt; color:#000000; }/* Javadoc keywords       */ span.java11  { font-size: 10pt; color:#7f9fbf; }/* Javadoc HTML tags       */ span.java12  { font-size: 10pt; color:#7f7f9f; }/* Javadoc links       */ span.java13  { font-size: 10pt; color:#3f3fbf; }/* Javadoc others       */ span.java14  { font-size: 10pt; color:#3f5fbf; }/* Undefined       */ span.java15  { font-size: 10pt; color:#ff6100; }/* Annotation       */ span.java16  { font-size: 10pt; color:#646464; }&lt;/style&gt;&lt;source&gt;&lt;span class="java10"&gt;Sms sms = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;Sms&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;getApplicationContext&lt;/span&gt;&lt;span class="java8"&gt;())&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="java3"&gt;// Send an SMS to the specified number&lt;br /&gt;&lt;/span&gt;&lt;span class="java10"&gt;sms.sendMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;+4512345678&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Multi-platform Mobile Development&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="java3"&gt;// Send an SMS to the specified number and display a notification on the message status&lt;br /&gt;&lt;/span&gt;&lt;span class="java10"&gt;sms.sendMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;+4512345678&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Multi-platform Mobile Development&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java4"&gt;true&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="java3"&gt;// Send an SMS to multiple recipients&lt;br /&gt;&lt;/span&gt;&lt;span class="java10"&gt;sms.sendMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;String&lt;/span&gt;&lt;span class="java8"&gt;[] { &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;+4512345678&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;+4598765432&amp;#34; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Multi-platform Mobile Development&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="java3"&gt;// Send an SMS to multiple recipients and display a notification on the message status&lt;br /&gt;&lt;/span&gt;&lt;span class="java10"&gt;sms.sendMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;String&lt;/span&gt;&lt;span class="java8"&gt;[] { &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;+4512345678&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;+4598765432&amp;#34; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Multi-platform Mobile Development&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java4"&gt;true&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="java3"&gt;// Opens the Compose SMS application with the recipient phone number displayed&lt;br /&gt;&lt;/span&gt;&lt;span class="java10"&gt;sms.composeMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;+4512345678&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="java3"&gt;// Opens the Compose SMS application with the recipient phone number and message displayed&lt;br /&gt;&lt;/span&gt;&lt;span class="java10"&gt;sms.composeMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;+4512345678&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Multi-platform Mobile Development&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="java3"&gt;// Opens the Compose SMS application with the multiple recipient phone numbers and the message displayed&lt;br /&gt;&lt;/span&gt;&lt;span class="java10"&gt;sms.composeMessage&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;String&lt;/span&gt;&lt;span class="java8"&gt;[] { &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;+4512345678&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;+4598765432&amp;#34; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Multi-platform Mobile Development&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;/span&gt;&lt;/source&gt;&lt;/java&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Windows Phone 7&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This platform unfortunately doesn't provide as vast a API collection compared to Android and Windows Mobile. To send an SMS in Windows Phone 7, you will have to use the SMS Compose page in the built-in messaging application. To launch this we call the Show() method in SmsComposeTask.&lt;br /&gt;&lt;br /&gt;Here's how to use SmsComposeTask&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;SmsComposeTask&lt;/span&gt; launcher = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SmsComposeTask&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;launcher.To = &lt;span style="color: #a31515;"&gt;&amp;quot;+45 12 34 56 78&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;launcher.Body = &lt;span style="color: #a31515;"&gt;&amp;quot;Multi-platform Mobile Development&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;launcher.Show();&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Windows Mobile 5.0 (and higher) using .NET Compact Framework&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sending an SMS in this platform is just as easy as doing so in Windows Phone 7. Windows Mobile provides native API's for the Short Messaging System, these methods are exposed as C type methods in a DLL called sms.dll. Aside from the SMS API, the platform also offers another API called the Messaging API (CE MAPI) for sending SMS, MMS, and Emails. Microsoft has provided managed wrappers for these and many other API's to make the life of the managed code developer a lot easier.&lt;br /&gt;&lt;br /&gt;To send an SMS in Windows Mobile 5.0 (and higher) we use the SmsMessage object. There are 2 ways of accomplishing this: Using the Send() method of the SmsMessage class; Sending the SMS using the Compose SMS application&lt;br /&gt;&lt;br /&gt;Here's a snippet on how to send SMS using the Send() method&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;SmsMessage&lt;/span&gt; sms = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SmsMessage&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;+45 12 34 56 78&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;&amp;quot;Multi-platform Mobile Development&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;sms.Send();&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here's a snippet on how to send SMS using the Compose SMS application&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;SmsMessage&lt;/span&gt; sms = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SmsMessage&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;+45 12 34 56 78&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;&amp;quot;Multi-platform Mobile Development&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;MessagingApplication&lt;/span&gt;.DisplayComposeForm(sms);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The code above depends on 2 assemblies that must be referenced to the project: &lt;ul&gt;&lt;li&gt;Microsoft.WindowsMobile.dll&lt;/li&gt;&lt;li&gt;Microsoft.WindowsMobile.PocketOutlook.dll&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;It is also possible to P/Invoke the SMS API through sms.dll, but this requires a slightly more complicated solution. In the next section, I will demonstrate how use the SMS API in native code. This should give you an idea on how to use the SMS API if you would like to go try the P/Invoke approach.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Windows Mobile using the Platform SDK (Native code)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Probably not very relevant for most modern day managed code developers but just to demonstrate as many ways to send SMS in as many platforms as possible I'd like to show how to send SMS in native code using the Windows CE Short Message Service (SMS) API.&lt;br /&gt;&lt;br /&gt;Here's a sample C++ helper class for sending SMS using the Platform SDK&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;#include&lt;/span&gt; &lt;span style="color: #a31515;"&gt;&amp;quot;stdafx.h&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;#include&lt;/span&gt; &lt;span style="color: #a31515;"&gt;&amp;quot;sms.h&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;#include&lt;/span&gt; &lt;span style="color: #a31515;"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt; SmsMessage &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt;:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::wstring recipient;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::wstring message;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SmsMessage(&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;wchar_t&lt;/span&gt;* phoneNumber, &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;wchar_t&lt;/span&gt;* text) &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; recipient = phoneNumber;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; message = text;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Send() &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SMS_HANDLE smshHandle;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; HRESULT hr = SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &amp;amp;smshHandle, NULL);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (hr != S_OK)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SMS_ADDRESS smsaDestination;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; memset (&amp;amp;smsaDestination, 0, &lt;span style="color: blue;"&gt;sizeof&lt;/span&gt; (smsaDestination));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; smsaDestination.smsatAddressType = SMSAT_INTERNATIONAL;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; lstrcpy(smsaDestination.ptsAddress, recipient.c_str());&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TEXT_PROVIDER_SPECIFIC_DATA tpsd;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tpsd.dwMessageOptions = PS_MESSAGE_OPTION_NONE;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tpsd.psMessageClass = PS_MESSAGE_CLASS1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tpsd.psReplaceOption = PSRO_NONE;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SMS_MESSAGE_ID smsmidMessageID = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; hr = SmsSendMessage(smshHandle, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; NULL, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;smsaDestination, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (PBYTE) message.c_str(), &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (message.length() + 1) * &lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;wchar_t&lt;/span&gt;), &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (PBYTE) &amp;amp;tpsd, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;sizeof&lt;/span&gt;(TEXT_PROVIDER_SPECIFIC_DATA), &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SMSDE_OPTIMAL, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SMS_OPTION_DELIVERY_NONE, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;smsmidMessageID);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SmsClose (smshHandle);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;};&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The code above requires the that the project is linked with sms.lib, otherwise you won't be able to build.&lt;br /&gt;&lt;br /&gt;Here's a snippet of how to use the SMS helper class defined above:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;SmsMessage *sms = &lt;span style="color: blue;"&gt;new&lt;/span&gt; SmsMessage(L&lt;span style="color: #a31515;"&gt;&amp;quot;+14250010001&amp;quot;&lt;/span&gt;, L&lt;span style="color: #a31515;"&gt;&amp;quot;Multi-platform Mobile Development&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;sms-&amp;gt;Send();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;delete&lt;/span&gt; sms;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;For those who don't know what +14250010001 is, this is the phone number of the Windows Mobile emulator. For testing SMS functionality on the emulator, you can use this phone number.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That's it for now. I hope you found this article interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-2178191598738103131?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/2178191598738103131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=2178191598738103131' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/2178191598738103131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/2178191598738103131'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2011/01/multi-platform-mobile-development_20.html' title='Multi-platform Mobile Development - Sending SMS'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-6203645804872199357</id><published>2011-01-19T16:05:00.002+01:00</published><updated>2011-01-19T21:42:08.095+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Multi-platform Mobile Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>Multi-platform Mobile Development - Creating a List Based UI</title><content type='html'>Here's the first installment on my series on multi-platform mobile development articles. A common practice on displaying information to a mobile device user is a list. A list is one of the best ways to display a group of information allowing the user to easily select which specific details he/she wishes to display.&lt;br /&gt;&lt;br /&gt;A good example of decent list implementations is the Inbox on pretty much all mobile devices. Most Inbox list implementations display sender, title, date, size, and a preview of the message body. A good list is not only bound to textual information but also visual. Most Inbox implementation displays the information using &lt;b&gt;bold&lt;/b&gt; fonts if the message is unread&lt;br /&gt;&lt;br /&gt;In this article I would like to demonstrate how to implement customized list based UI's on the following platforms:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Windows Phone 7&lt;/li&gt;&lt;li&gt;Windows Mobile using .NET Compact Framework&lt;/li&gt;&lt;li&gt;Android&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Let's get started...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Windows Phone 7&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This is definitely the easiest platform to target, in fact this is by far the easiest platform I've ever worked with. Development times on this platform are a lot shorter than any other platform I've worked with. I've been working with Windows CE based phones for the last 7 or so and I definitely think that this is the best Windows CE based OS ever. There unfortunately a few down sides like lack of a native code API and limited platform integration, but considering the performance and development ease, it is for most cases worth it. The best part with designing UI's for Windows Phone 7 is that I don't have to care about the design very much, I just ask my designer / graphic artist to shine up my XAML file and I can concentrate on the code.&lt;br /&gt;&lt;br /&gt;A Visual Studio 2010 project template is actually provided by default for creating a list based UI makes things easier. This project template is called a &lt;b&gt;Windows Phone Databound Applicaton&lt;/b&gt;, the description goes "A project for creating Windows Phone applications using List and Navigation controls". This project creates 2 pages, one for displaying the list, and the other for displaying details of this list.&lt;br /&gt;&lt;br /&gt;The code examples for Windows Phone 7 uses the &lt;a href="http://en.wikipedia.org/wiki/Model_View_ViewModel"&gt;Model-View-ViewModel&lt;/a&gt;. This pattern is heavily used and I guess one can say an accepted standard in developing Windows Phone 7 applications. I'm not gonna go deep into the pattern in this article, so I assume that you do a bit of home work on MVVM.&lt;br /&gt;&lt;br /&gt;To display a list Windows Phone 7 we use the ListBox control in XAML. This will represent the View.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ItemsSource&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;{Binding Items}&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;{Binding LineOne}&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;TextWrapping&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;Wrap&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;{Binding LineTwo}&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;TextWrapping&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;Wrap&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Our ViewModel is implemented in code. A ViewModel class should implement the INotifyPropertyChanged interface for the View to be able to respond to changes in the ViewModel.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ViewModelBase&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;INotifyPropertyChanged&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;event&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PropertyChangedEventHandler&lt;/span&gt; PropertyChanged;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; NotifyPropertyChanged(&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt; propertyName)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;PropertyChangedEventHandler&lt;/span&gt; handler = PropertyChanged;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;null&lt;/span&gt; != handler)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; handler(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PropertyChangedEventArgs&lt;/span&gt;(propertyName));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ItemViewModel&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;ViewModelBase&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; _lineOne;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; LineOne&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _lineOne; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;value&lt;/span&gt; != _lineOne)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _lineOne = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; NotifyPropertyChanged(&lt;span style="color: #a31515;"&gt;&amp;quot;LineOne&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; _lineTwo;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; LineTwo&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _lineTwo; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;value&lt;/span&gt; != _lineTwo)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _lineTwo = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; NotifyPropertyChanged(&lt;span style="color: #a31515;"&gt;&amp;quot;LineTwo&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;MainViewModel&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;ViewModelBase&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;MainModel&lt;/span&gt; model;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; MainViewModel()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; model = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;MainModel&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Items = model.GetData();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ItemViewModel&lt;/span&gt;&amp;gt; Items { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The ViewModel code above contains an instance of the Model. The Model in this naive example just returns a populated collection of ItemViewModel.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;MainModel&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ItemViewModel&lt;/span&gt;&amp;gt; GetData()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ObservableCollection&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ItemViewModel&lt;/span&gt;&amp;gt; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ItemViewModel&lt;/span&gt;() { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime one&amp;quot;&lt;/span&gt;, LineTwo = &lt;span style="color: #a31515;"&gt;&amp;quot;Maecenas praesent accumsan bibendum&amp;quot;&lt;/span&gt; },&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ItemViewModel&lt;/span&gt;() { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime two&amp;quot;&lt;/span&gt;, LineTwo = &lt;span style="color: #a31515;"&gt;&amp;quot;Dictumst eleifend facilisi faucibus&amp;quot;&lt;/span&gt; },&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ItemViewModel&lt;/span&gt;() { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime three&amp;quot;&lt;/span&gt;, LineTwo = &lt;span style="color: #a31515;"&gt;&amp;quot;Habitant inceptos interdum lobortis&amp;quot;&lt;/span&gt; },&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ItemViewModel&lt;/span&gt;() { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime four&amp;quot;&lt;/span&gt;, LineTwo = &lt;span style="color: #a31515;"&gt;&amp;quot;Nascetur pharetra placerat pulvinar&amp;quot;&lt;/span&gt; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here's how the application looks like:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_kVNAYTvQ3QE/TTRCGWEKb6I/AAAAAAAACss/MAOLmek1544/s1600/wp7%2Blist.png" imageanchor="1" style=""&gt;&lt;img border="0" height="400" width="215" src="http://2.bp.blogspot.com/_kVNAYTvQ3QE/TTRCGWEKb6I/AAAAAAAACss/MAOLmek1544/s400/wp7%2Blist.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Windows Mobile&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This is actually a pretty decent platform and offers a huge selection of low level API's for platform integration. The OS also offers full multi tasking and the ability to create applications that run behind scenes. The down side of course to all that fun stuff is that you have to do a lot of things the hard way. Implementing a decent list based UI in this platforms can be done in 2 ways: Using the Windows CE custom drawing service; Creating an Owner Drawn List Control. Both require writing a few hundred lines of code.&lt;br /&gt;&lt;br /&gt;For this example we create an Owner Drawn List. For those who are not familiar what that means, we draw the entire control from scratch, manually. We create a class that inherits from System.Windows.Forms.Control (the base class of all UI components) and override the drawing, resizing, and input methods. It's a bit tedious, but most of the code in owner drawn controls can be re-used as base classes for other owner drawn controls. &lt;br /&gt;&lt;br /&gt;Let's start off with creating an owner drawn list base class.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;abstract&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;OwnerDrawnListBase&lt;/span&gt;&amp;lt;T&amp;gt; : &lt;span style="color: #2b91af;"&gt;Control&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; selectedIndex;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; visibleItemsPortrait;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; visibleItemsLandscape;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;VScrollBar&lt;/span&gt; scrollBar;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; OwnerDrawnListBase()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;span style="color: blue;"&gt;this&lt;/span&gt;(7, 4)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; OwnerDrawnListBase(&lt;span style="color: blue;"&gt;int&lt;/span&gt; visibleItemsPortrait, &lt;span style="color: blue;"&gt;int&lt;/span&gt; visibleItemsLandscape)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.visibleItemsPortrait = visibleItemsPortrait;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.visibleItemsLandscape = visibleItemsLandscape;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Items = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;T&amp;gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrollBar = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;VScrollBar&lt;/span&gt; { Parent = &lt;span style="color: blue;"&gt;this&lt;/span&gt;, Visible = &lt;span style="color: blue;"&gt;false&lt;/span&gt;, SmallChange = 1 };&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrollBar.ValueChanged += (sender, e) =&amp;gt; Invalidate();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;T&amp;gt; Items { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; SelectedIndex&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; selectedIndex; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; selectedIndex = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (SelectedIndexChanged != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SelectedIndexChanged(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt;.Empty);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Invalidate();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;event&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;EventHandler&lt;/span&gt; SelectedIndexChanged;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnSelectedIndexChanged(&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (SelectedIndexChanged != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SelectedIndexChanged(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, e);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; T SelectedItem&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (selectedIndex &amp;gt;= 0 &amp;amp;&amp;amp; selectedIndex &amp;lt; Items.Count)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; Items[selectedIndex];&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt; OffScreen { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; VisibleItems&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;Screen&lt;/span&gt;.PrimaryScreen.Bounds.Height &amp;gt; &lt;span style="color: #2b91af;"&gt;Screen&lt;/span&gt;.PrimaryScreen.Bounds.Width)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; visibleItemsPortrait;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; visibleItemsLandscape;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; ItemHeight&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; Height / VisibleItems; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; ScrollPosition&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; scrollBar.Value; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; ScrollBarVisible&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; scrollBar.Visible; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; ScrollBarWidth&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; scrollBar.Width; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; DrawCount&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (ScrollPosition + scrollBar.LargeChange &amp;gt; scrollBar.Maximum)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; scrollBar.Maximum - ScrollPosition + 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; scrollBar.LargeChange;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region&lt;/span&gt; Overrides&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnResize(&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrollBar.Bounds = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt;(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ClientSize.Width - scrollBar.Width,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrollBar.Width,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ClientSize.Height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose(OffScreen);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (Items.Count &amp;gt; VisibleItems)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrollBar.Visible = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrollBar.LargeChange = VisibleItems;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OffScreen = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt;(ClientSize.Width - scrollBar.Width, ClientSize.Height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrollBar.Visible = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrollBar.LargeChange = Items.Count;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OffScreen = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt;(ClientSize.Width, ClientSize.Height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DrawBorder();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrollBar.Maximum = Items.Count - 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; DrawBorder()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; gfx = &lt;span style="color: #2b91af;"&gt;Graphics&lt;/span&gt;.FromImage(OffScreen))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; pen = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Pen&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;SystemColors&lt;/span&gt;.ControlText))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gfx.DrawRectangle(pen, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt;(0, 0, OffScreen.Width - 1, OffScreen.Height - 1));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnMouseDown(&lt;span style="color: #2b91af;"&gt;MouseEventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Update the selected index based on where the user clicks&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SelectedIndex = scrollBar.Value + (e.Y / ItemHeight);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (SelectedIndex &amp;gt; Items.Count - 1)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SelectedIndex = -1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!Focused)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Focus();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnMouseUp(e);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnPaintBackground(&lt;span style="color: #2b91af;"&gt;PaintEventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// To avoid flickering, do all drawing in OnPaint&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Dispose(&lt;span style="color: blue;"&gt;bool&lt;/span&gt; disposing)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (disposing)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose(OffScreen);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.Dispose(disposing);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Dispose(&lt;span style="color: #2b91af;"&gt;IDisposable&lt;/span&gt; obj)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (obj != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; obj.Dispose();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; obj = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The class above implements the basic functionality of an owner drawn list. It hands resizing the off screen bitmap that serves as a double buffer, handles the scroll bar visibility, and handles updating the selected index. One can implement responding to keyboard input or gestures from here as well.&lt;br /&gt;&lt;br /&gt;Next we create a class where we define how the control is drawn. This class inherits from our owner drawn list base class.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CustomListViewItem&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; LineOne { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; LineTwo { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CustomListView&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;OwnerDrawnListBase&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;CustomListViewItem&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; topleft = 3;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;StringFormat&lt;/span&gt; noWrap;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Pen&lt;/span&gt; pen;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;SolidBrush&lt;/span&gt; backgroundBrush;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;SolidBrush&lt;/span&gt; selectedBrush;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;SolidBrush&lt;/span&gt; selectedTextBrush;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;SolidBrush&lt;/span&gt; textBrush;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Font&lt;/span&gt; headerFont;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Font&lt;/span&gt; Font&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.Font; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.Font = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose(headerFont);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; headerFont = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Font&lt;/span&gt;(&lt;span style="color: blue;"&gt;value&lt;/span&gt;.Name, &lt;span style="color: blue;"&gt;value&lt;/span&gt;.Size, &lt;span style="color: #2b91af;"&gt;FontStyle&lt;/span&gt;.Bold);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; CustomListView()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pen = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Pen&lt;/span&gt;(ForeColor);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textBrush = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SolidBrush&lt;/span&gt;(ForeColor);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; backgroundBrush = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SolidBrush&lt;/span&gt;(BackColor);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; selectedTextBrush = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SolidBrush&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;SystemColors&lt;/span&gt;.HighlightText);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; selectedBrush = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SolidBrush&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;SystemColors&lt;/span&gt;.Highlight);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; noWrap = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;StringFormat&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;StringFormatFlags&lt;/span&gt;.NoWrap);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; headerFont = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Font&lt;/span&gt;(&lt;span style="color: blue;"&gt;base&lt;/span&gt;.Font.Name, &lt;span style="color: blue;"&gt;base&lt;/span&gt;.Font.Size, &lt;span style="color: #2b91af;"&gt;FontStyle&lt;/span&gt;.Bold);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnPaint(&lt;span style="color: #2b91af;"&gt;PaintEventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; gfx = &lt;span style="color: #2b91af;"&gt;Graphics&lt;/span&gt;.FromImage(OffScreen))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gfx.FillRectangle(backgroundBrush, 1, 1, Width - 2, Height - 2);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; top = 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; lastItem = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; itemSelected = &lt;span style="color: blue;"&gt;false&lt;/span&gt;; ;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; i = ScrollPosition; i &amp;lt; ScrollPosition + DrawCount; i++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (top &amp;gt; 1)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; lastItem = Height - 1 &amp;lt; top;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Fill the rectangle if the item is selected&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; itemSelected = i == SelectedIndex;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (itemSelected)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!lastItem)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gfx.FillRectangle(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; selectedBrush,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (i == ScrollPosition) ? top : top + 1,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ClientSize.Width - (ScrollBarVisible ? ScrollBarWidth : 2),&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (i == ScrollPosition) ? ItemHeight : ItemHeight - 1);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gfx.FillRectangle(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; selectedBrush,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; top + 1,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ClientSize.Width - (ScrollBarVisible ? ScrollBarWidth : 1),&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ItemHeight);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Draw seperator lines after each item unless the item is the last item in the list&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!lastItem)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gfx.DrawLine(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pen,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; top + ItemHeight,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ClientSize.Width - (ScrollBarVisible ? ScrollBarWidth : 2),&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; top + ItemHeight);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Get the dimensions for creating the drawing areas&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; item = Items[i];&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; size = gfx.MeasureString(item.LineOne, Font);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; rectheight = ItemHeight - (&lt;span style="color: blue;"&gt;int&lt;/span&gt;)size.Height - 6;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; rectwidth = ClientSize.Width - (ScrollBarVisible ? ScrollBarWidth : 5);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Draw line one with an offset of 3 pixels from the top of the rectangle &lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// using a bold font (no text wrapping)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gfx.DrawString(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; item.LineOne,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; headerFont,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (i == SelectedIndex) ? selectedTextBrush : textBrush,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;RectangleF&lt;/span&gt;(topleft, top + 3, rectwidth, rectheight),&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; noWrap);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Draw line two with an offset of 3 pixels from the bottom of line one &lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// (no text wrapping)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gfx.DrawString(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; item.LineTwo,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Font,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (i == SelectedIndex) ? selectedTextBrush : textBrush,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;RectangleF&lt;/span&gt;(topleft, top + size.Height + 6, rectwidth, rectheight),&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; noWrap);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Set the top for the next item&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; top += ItemHeight;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.Graphics.DrawImage(OffScreen, 0, 0);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Dispose(&lt;span style="color: blue;"&gt;bool&lt;/span&gt; disposing)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (disposing)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose(headerFont);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose(backgroundBrush);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose(textBrush);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose(selectedTextBrush);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose(selectedBrush);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Dispose(pen);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.Dispose(disposing);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Once that is in place you can just drag it in from the toolbox or dynamically add it to the Form in runtime.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; lv = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CustomListView&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;lv.Dock = &lt;span style="color: #2b91af;"&gt;DockStyle&lt;/span&gt;.Fill;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;Controls.Add(lv);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;lv.Items.AddRange(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;CustomListViewItem&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CustomListViewItem&lt;/span&gt; { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime one&amp;quot;&lt;/span&gt;, LineTwo = &lt;span style="color: #a31515;"&gt;&amp;quot;Maecenas praesent accumsan bibendum&amp;quot;&lt;/span&gt; },&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CustomListViewItem&lt;/span&gt; { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime two&amp;quot;&lt;/span&gt;, LineTwo = &lt;span style="color: #a31515;"&gt;&amp;quot;Dictumst eleifend facilisi faucibus&amp;quot;&lt;/span&gt; },&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CustomListViewItem&lt;/span&gt; { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime three&amp;quot;&lt;/span&gt;, LineTwo=&lt;span style="color: #a31515;"&gt;&amp;quot;Habitant inceptos interdum lobortis&amp;quot;&lt;/span&gt; },&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CustomListViewItem&lt;/span&gt; { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime four&amp;quot;&lt;/span&gt;, LineTwo=&lt;span style="color: #a31515;"&gt;&amp;quot;Nascetur pharetra placerat pulvinar&amp;quot;&lt;/span&gt; },&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CustomListViewItem&lt;/span&gt; { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime five&amp;quot;&lt;/span&gt;, LineTwo = &lt;span style="color: #a31515;"&gt;&amp;quot;Maecenas praesent accumsan bibendum&amp;quot;&lt;/span&gt; },&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CustomListViewItem&lt;/span&gt; { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime six&amp;quot;&lt;/span&gt;, LineTwo = &lt;span style="color: #a31515;"&gt;&amp;quot;Dictumst eleifend facilisi faucibus&amp;quot;&lt;/span&gt; },&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CustomListViewItem&lt;/span&gt; { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime seven&amp;quot;&lt;/span&gt;, LineTwo=&lt;span style="color: #a31515;"&gt;&amp;quot;Habitant inceptos interdum lobortis&amp;quot;&lt;/span&gt; },&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CustomListViewItem&lt;/span&gt; { LineOne = &lt;span style="color: #a31515;"&gt;&amp;quot;runtime eight&amp;quot;&lt;/span&gt;, LineTwo=&lt;span style="color: #a31515;"&gt;&amp;quot;Nascetur pharetra placerat pulvinar&amp;quot;&lt;/span&gt; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;});&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here's how the custom list view looks like in a Windows Mobile 6.5.3 emulator&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_kVNAYTvQ3QE/TTbWZISN-9I/AAAAAAAACs0/xbEqfWLEwP0/s1600/CEZoom0.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="320" width="240" src="http://2.bp.blogspot.com/_kVNAYTvQ3QE/TTbWZISN-9I/AAAAAAAACs0/xbEqfWLEwP0/s400/CEZoom0.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You can grab the source for Windows Mobile application above &lt;a href="http://cid-ca531e7fb4762c70.office.live.com/self.aspx/Code%20Samples/OwnerDrawnListSample.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Android&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Creating decent list based UI's is also pretty easy. The designer experience is unfortunately not as elegant as what Windows Phone 7 has to offer, but shares the same idea. The user interface layout of Android applications are described in XML files and are parsed during runtime. In some occasions it seems easier to create the UI layout in runtime through code instead of struggling with the UI designer. This is probably because of my lack of patience with the tool or because of my lack of experience using it. Either way, I think it could have been done in a much smarter way.&lt;br /&gt;&lt;br /&gt;To create a list based UI in Android we can create a class that extends from the ListActivity class. The ListActivity base class contains a List control set to fill the parent, it comes in handy if you want a UI with nothing but a list control. In android development, you usually setup the UI and do other initialization methods in the onCreate() method, our example will do the same. We set the data source of our list control by calling setListAdapter().&lt;br /&gt;&lt;br /&gt;To have a more flexible and customizable we use the ArrayAdapter&lt;T&gt; for presenting our data source to the screen. To optimize performance, we use an object called convertView that ArrayAdapter exposes, we can store a single instance of a class containing UI text components and just update the text for that instance. This is done by overriding the ArrayAdapter getView method.&lt;br /&gt;&lt;br /&gt;Here's the code for implementing the ListActivity and ArrayAdapter&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;java&gt;&lt;style&gt;td.java, td.java-ln {vertical-align:top;}tt.java, tt.java-ln, pre.java, pre.java-ln {line-height:1em; margin-bottom:0em;}td.java-ln { text-align:right; }tt.java-ln, pre.java-ln { color:#888888 }/* Background       */ span.java0  { font-size: 10pt; color:#ffffff; }/* Line numbers       */ span.java1  { font-size: 10pt; color:#808080; }/* Multi-line comments       */ span.java2  { font-size: 10pt; color:#3f7f5f; }/* Single-line comments       */ span.java3  { font-size: 10pt; color:#3f7f5f; }/* Keywords       */ span.java4  { font-size: 10pt; color:#7f0055; font-weight:bold; }/* Strings       */ span.java5  { font-size: 10pt; color:#2a00ff; }/* Character constants       */ span.java6  { font-size: 10pt; color:#990000; }/* Numeric constants       */ span.java7  { font-size: 10pt; color:#990000; }/* Parenthesis       */ span.java8  { font-size: 10pt; color:#000000; }/* Primitive Types       */ span.java9  { font-size: 10pt; color:#7f0055; font-weight:bold; }/* Others       */ span.java10  { font-size: 10pt; color:#000000; }/* Javadoc keywords       */ span.java11  { font-size: 10pt; color:#7f9fbf; }/* Javadoc HTML tags       */ span.java12  { font-size: 10pt; color:#7f7f9f; }/* Javadoc links       */ span.java13  { font-size: 10pt; color:#3f3fbf; }/* Javadoc others       */ span.java14  { font-size: 10pt; color:#3f5fbf; }/* Undefined       */ span.java15  { font-size: 10pt; color:#ff6100; }/* Annotation       */ span.java16  { font-size: 10pt; color:#646464; }&lt;/style&gt;&lt;source&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;java.util.ArrayList;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;java.util.List;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.app.Activity;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.app.ListActivity;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.os.Bundle;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.view.LayoutInflater;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.view.View;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.view.ViewGroup;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.widget.ArrayAdapter;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;import &lt;/span&gt;&lt;span class="java10"&gt;android.widget.TextView;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="java4"&gt;public class &lt;/span&gt;&lt;span class="java10"&gt;MainActivity &lt;/span&gt;&lt;span class="java4"&gt;extends &lt;/span&gt;&lt;span class="java10"&gt;ListActivity &lt;/span&gt;&lt;span class="java8"&gt;{&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java16"&gt;@Override&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java9"&gt;void &lt;/span&gt;&lt;span class="java10"&gt;onCreate&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;Bundle savedInstanceState&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;super&lt;/span&gt;&lt;span class="java10"&gt;.onCreate&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;savedInstanceState&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; setListAdapter&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;ListItemActivity&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;this, R.layout.list_item, createList&lt;/span&gt;&lt;span class="java8"&gt;()))&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;private &lt;/span&gt;&lt;span class="java10"&gt;List&amp;lt;ListItem&amp;gt; createList&lt;/span&gt;&lt;span class="java8"&gt;() {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;List&amp;lt;ListItem&amp;gt; list = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;ArrayList&amp;lt;ListItem&amp;gt;&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; list.add&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;ListItem&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;runtime one&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Maecenas praesent accumsan bibendum&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;))&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; list.add&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;ListItem&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;runtime two&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Dictumst eleifend facilisi faucibus&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;))&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; list.add&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;ListItem&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;runtime three&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Habitant inceptos interdum lobortis&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;))&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; list.add&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;ListItem&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;runtime four&amp;#34;&lt;/span&gt;&lt;span class="java10"&gt;, &lt;/span&gt;&lt;span class="java5"&gt;&amp;#34;Nascetur pharetra placerat pulvinar&amp;#34;&lt;/span&gt;&lt;span class="java8"&gt;))&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;return &lt;/span&gt;&lt;span class="java10"&gt;list;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;class &lt;/span&gt;&lt;span class="java10"&gt;ListItem &lt;/span&gt;&lt;span class="java8"&gt;{&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java10"&gt;String lineOne;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java10"&gt;String lineTwo;&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java10"&gt;ListItem&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;String lineOne, String lineTwo&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;this&lt;/span&gt;&lt;span class="java10"&gt;.lineOne = lineOne;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;this&lt;/span&gt;&lt;span class="java10"&gt;.lineTwo = lineTwo;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; }&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;class &lt;/span&gt;&lt;span class="java10"&gt;ListItemActivity &lt;/span&gt;&lt;span class="java4"&gt;extends &lt;/span&gt;&lt;span class="java10"&gt;ArrayAdapter&amp;lt;ListItem&amp;gt; &lt;/span&gt;&lt;span class="java8"&gt;{&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;private &lt;/span&gt;&lt;span class="java10"&gt;Activity context;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;private &lt;/span&gt;&lt;span class="java10"&gt;List&amp;lt;ListItem&amp;gt; items;&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java10"&gt;ListItemActivity&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;Activity context, &lt;/span&gt;&lt;span class="java9"&gt;int &lt;/span&gt;&lt;span class="java10"&gt;textViewResourceId, List&amp;lt;ListItem&amp;gt; items&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;super&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;context, textViewResourceId, items&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;this&lt;/span&gt;&lt;span class="java10"&gt;.context = context;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;this&lt;/span&gt;&lt;span class="java10"&gt;.items = items;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java16"&gt;@Override&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;public &lt;/span&gt;&lt;span class="java10"&gt;View getView&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java9"&gt;int &lt;/span&gt;&lt;span class="java10"&gt;position, View convertView, ViewGroup parent&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;ViewHolder holder;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;if &lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;convertView == &lt;/span&gt;&lt;span class="java4"&gt;null&lt;/span&gt;&lt;span class="java8"&gt;) {&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;LayoutInflater inflater = context.getLayoutInflater&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; convertView = inflater.inflate&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;R.layout.list_item, parent, &lt;/span&gt;&lt;span class="java4"&gt;false&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; holder = &lt;/span&gt;&lt;span class="java4"&gt;new &lt;/span&gt;&lt;span class="java10"&gt;ViewHolder&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; holder.lineOne = &lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;TextView&lt;/span&gt;&lt;span class="java8"&gt;) &lt;/span&gt;&lt;span class="java10"&gt;convertView.findViewById&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;R.id.lineOne&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; holder.lineTwo = &lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;TextView&lt;/span&gt;&lt;span class="java8"&gt;) &lt;/span&gt;&lt;span class="java10"&gt;convertView.findViewById&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;R.id.lineTwo&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; convertView.setTag&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;holder&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;} &lt;/span&gt;&lt;span class="java4"&gt;else &lt;/span&gt;&lt;span class="java8"&gt;{&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;holder = &lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;ViewHolder&lt;/span&gt;&lt;span class="java8"&gt;) &lt;/span&gt;&lt;span class="java10"&gt;convertView.getTag&lt;/span&gt;&lt;span class="java8"&gt;()&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;ListItem item = items.get&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;position&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; holder.lineOne.setText&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;item.lineOne&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; holder.lineTwo.setText&lt;/span&gt;&lt;span class="java8"&gt;(&lt;/span&gt;&lt;span class="java10"&gt;item.lineTwo&lt;/span&gt;&lt;span class="java8"&gt;)&lt;/span&gt;&lt;span class="java10"&gt;;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;return &lt;/span&gt;&lt;span class="java10"&gt;convertView;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; }&lt;br /&gt;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java4"&gt;static class &lt;/span&gt;&lt;span class="java10"&gt;ViewHolder &lt;/span&gt;&lt;span class="java8"&gt;{&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java10"&gt;TextView lineOne;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; TextView lineTwo;&lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;/span&gt;&lt;span class="java8"&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/source&gt;&lt;/java&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here's how the XML layout file is for the list item (list_item.xml)&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515;"&gt;xml&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;encoding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;utf-8&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;LinearLayout&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns:android&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;http://schemas.android.com/apk/res/android&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:layout_width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;fill_parent&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:layout_height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;fill_parent&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:orientation&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;vertical&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextView&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;@+id/lineOne&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:layout_width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;fill_parent&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:layout_height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;wrap_content&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:paddingTop&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;12dp&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:paddingLeft&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;12dp&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:textSize&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;18sp&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:textStyle&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;bold&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextView&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;@+id/lineTwo&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:layout_width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;fill_parent&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:layout_height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;wrap_content&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:paddingLeft&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;12dp&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;android:paddingBottom&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;12dp&lt;/span&gt;&amp;quot;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;LinearLayout&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here's how the applications looks like on an Android 2.3 emulator&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_kVNAYTvQ3QE/TTbvtpgrncI/AAAAAAAACs8/XuQDx8mphMk/s1600/AndroidListSample.png" imageanchor="1" style=""&gt;&lt;img border="0" height="400" width="270" src="http://2.bp.blogspot.com/_kVNAYTvQ3QE/TTbvtpgrncI/AAAAAAAACs8/XuQDx8mphMk/s400/AndroidListSample.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You can grab the source for Android application above &lt;a href="http://cid-ca531e7fb4762c70.office.live.com/self.aspx/Code%20Samples/ListActivitySample.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So this basically all I have for now. I plan to go into detail by breaking down each part of the code samples I provided for all 3 platforms, or perhaps add another platform as well. I hope you found this useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-6203645804872199357?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/6203645804872199357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=6203645804872199357' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6203645804872199357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6203645804872199357'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2011/01/multi-platform-mobile-development_19.html' title='Multi-platform Mobile Development - Creating a List Based UI'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_kVNAYTvQ3QE/TTRCGWEKb6I/AAAAAAAACss/MAOLmek1544/s72-c/wp7%2Blist.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-6313747424614316363</id><published>2011-01-10T14:37:00.000+01:00</published><updated>2011-01-10T14:37:34.170+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multi-platform Mobile Development'/><title type='text'>Multi-platform Mobile Development</title><content type='html'>I've been away from the blog sphere for a few months due to contracts I had to complete. I can't and won't complain about that since its these piles of work that get the bills payed. The types of jobs I've been getting lately have been changing, I've seen customers requesting for 3 different platform implementations of mobile applications. So these past few months I've been working on Android, Windows Mobile, Windows Phone 7, and as of last week iPhone. I find these challenges to be really fun even though the initial start up with a new platform doesn't always go that fast. Once you get a hang of it you learn to appreciate the architectural difference of each platform.&lt;br /&gt;&lt;br /&gt;There are always a bunch of obstacles, some things are easier done in some platforms and some things are just more straight forward and runs faster in some platforms. The Microsoft platform's have extremely good development environments where productivity is kept at a constant high. I feel very at home in the Microsoft space since I've been doing mobile development since the days of Windows CE 3.0. Developing applications for Windows Phone 7 is very easy as long as one sticks to the development guidelines (provided by Microsoft) from the start. &lt;br /&gt;&lt;br /&gt;What I came to really appreciate lately was Android development. I think this platform is very well designed and thought through. Getting started wasn't so hard and since Java is rather similar to C# I didn't have any trouble switching languages. The performance of Android applications is to my surprise superior to Windows Phone 7 and highly optimized Windows Mobile .NETCF applications and the API's provided for Android are elegant and well documented.&lt;br /&gt;&lt;br /&gt;I haven't really gotten too far with iPhone development and I can't say much about that for now. But I am very pleased with the iPhone itself. Until the release of Windows Phone 7 devices I carried an iPhone around. It's extremely easy to use and it provided the very first software input panel that actually impressed me and that I really found useful.&lt;br /&gt;&lt;br /&gt;I usually don't post my random thoughts on my blog. So what does all this mean? Well this post is meant to be the start of a long series of articles on multi-platform mobile development. The purpose of this series is to explain and demonstrate how to implement mobile applications on different platforms; to discuss architectural considerations for multi-platform design; demonstrate how to share common assets between the different platforms; to explore the best design patterns applicable to each platform,&amp;nbsp; etc etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-6313747424614316363?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/6313747424614316363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=6313747424614316363' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6313747424614316363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6313747424614316363'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2011/01/multi-platform-mobile-development.html' title='Multi-platform Mobile Development'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-5936675458021147546</id><published>2010-11-11T12:34:00.000+01:00</published><updated>2010-11-11T12:34:23.132+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><title type='text'>How to enable Internet Tethering on a Samsung Omnia 7</title><content type='html'>&lt;div&gt;I recently received a Samsung Omnia 7 and I think it's a pretty awesome phone. But, Windows Phone 7 in general lags behind with a few things, one of these things is a built in internet tethering feature (like in the iPhone for example). Since I'm going away for a few days I don't intend on going around with a 3G modem (my laptop doesn't have a built in 3G modem), neither am I to keen on switching back to my iPhone. So I searched for a solution and stumbled upon a hack to enable launch the Omnia 7 Diagnostic Menu and the Micro USB Test.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's what you need to do&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Open the phone application&lt;/li&gt;&lt;li&gt;Dial &amp;nbsp;&lt;b&gt;# # 634 #&lt;/b&gt; and press Call&lt;/li&gt;&lt;li&gt;This will launch the diagnostic menu&lt;/li&gt;&lt;li&gt;Enter &amp;nbsp;&lt;b&gt;* # 7284 #&lt;/b&gt;&lt;/li&gt;&lt;li&gt;If the code above is entered properly then the Micro USB Test app launches&amp;nbsp;&lt;/li&gt;&lt;li&gt;Select &lt;b&gt;Modem, Tethered Call&lt;/b&gt;&lt;/li&gt;&lt;li&gt;You are prompted to restart the device&lt;/li&gt;&lt;li&gt;Connect your Omnia 7 to your computer via USB&lt;/li&gt;&lt;/ul&gt;In my attempt I was prompted to install the Samsung USB Driver and Windows 7 provided me with a link. Try it out :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-5936675458021147546?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/5936675458021147546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=5936675458021147546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/5936675458021147546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/5936675458021147546'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/11/how-to-enable-internet-tethering-on.html' title='How to enable Internet Tethering on a Samsung Omnia 7'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-3646266930041184440</id><published>2010-11-05T10:39:00.000+01:00</published><updated>2010-11-05T10:39:39.644+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><title type='text'>Chris' Puzzle Game on the Windows Phone 7 Marketplace</title><content type='html'>I got my first application published on the Marketplace. The process was surprisingly fast, took overnight to get it certified and another day before it appeared on the Marketplace. I have a video demo of the game &lt;a href="http://christian-helle.blogspot.com/2010/10/chris-puzzle-game-for-windows-phone-7.html"&gt;&lt;span id="goog_644636216"&gt;&lt;/span&gt;here&lt;/a&gt;&amp;nbsp;and I demonstrate how parts of the game was built in an article called &lt;a href="http://christian-helle.blogspot.com/2010/09/writing-puzzle-game-for-windows-phone-7.html"&gt;Writing a Puzzle Game for Windows Phone 7 using XNA&lt;/a&gt;. Try the game out, I'd love to get some feedback. It's a game made over a weekend and the main purpose was to experience the publishing process. If you have some comments, suggestions, or questions on the game then please send them to me and I'll see what I can do.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_kVNAYTvQ3QE/TNPOj-gBg3I/AAAAAAAACsI/mBxypFG3iGE/s1600/Chris'+Puzzle+Game+on+Marketplace.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="322" src="http://1.bp.blogspot.com/_kVNAYTvQ3QE/TNPOj-gBg3I/AAAAAAAACsI/mBxypFG3iGE/s640/Chris'+Puzzle+Game+on+Marketplace.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-3646266930041184440?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/3646266930041184440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=3646266930041184440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/3646266930041184440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/3646266930041184440'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/11/chris-puzzle-game-on-windows-phone-7.html' title='Chris&apos; Puzzle Game on the Windows Phone 7 Marketplace'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_kVNAYTvQ3QE/TNPOj-gBg3I/AAAAAAAACsI/mBxypFG3iGE/s72-c/Chris&apos;+Puzzle+Game+on+Marketplace.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-5050046703164963045</id><published>2010-11-02T13:10:00.000+01:00</published><updated>2010-11-02T13:10:38.101+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><title type='text'>How to launch the Marketplace in the Windows Phone 7 Emulator</title><content type='html'>You probably noticed by now that the default Windows Phone 7 emulator only contains Internet Explorer and the Settings. I stumbled upon a tip from&amp;nbsp;&lt;a href="http://danielvaughan.orpius.com/"&gt;Daniel Vaughan&lt;/a&gt;&amp;nbsp;about Launchers and Choosers today and I learned about a task that can start up the Marketplace Hub.&amp;nbsp;Unfortunately you will have to create an application that calls into the &lt;a href="http://msdn.microsoft.com/en-us/library/ff769550.aspx"&gt;Launcher API&lt;/a&gt; to accomplish this.&lt;br /&gt;&lt;br /&gt;Here's what you need to do:&lt;br /&gt;&lt;br /&gt;1) Create a new Silverlight Windows Phone Application&lt;br /&gt;2) In your MainPage.cs and add a using directive to the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.aspx"&gt;Microsoft.Phone.Tasks&lt;/a&gt;&amp;nbsp;namespace.&lt;br /&gt;3) Add the following in the constructor of MainPage.cs after calling the InitializeComponent() method:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Segoe UI', Verdana, Arial; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Consolas, Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; word-break: break-all; word-wrap: break-word;"&gt;&lt;div style="background: white; color: black; font-family: Courier New; font-size: 10pt;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; task = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;MarketplaceHubTask&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;task.ContentType = &lt;span style="color: #2b91af;"&gt;MarketplaceContentType&lt;/span&gt;.Applications;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;task.Show();&lt;/pre&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;4) Launch the application and you should be good to go.&lt;br /&gt;&lt;br /&gt;Here's how the Marketplace looks like on the emulator:&lt;br /&gt;&lt;br /&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/XQ45Yy8b_Dc?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/XQ45Yy8b_Dc?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Click &lt;a href="http://msdn.microsoft.com/en-us/library/ff955600.aspx"&gt;here&lt;/a&gt; to see a list of supported launchers and choosers for Windows Phone 7.&amp;nbsp;You can read more about Launchers and Choosers &lt;a href="http://msdn.microsoft.com/en-us/library/ff769542.aspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-5050046703164963045?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/5050046703164963045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=5050046703164963045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/5050046703164963045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/5050046703164963045'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/11/how-to-launch-marketplace-in-windows.html' title='How to launch the Marketplace in the Windows Phone 7 Emulator'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-9216438525601233997</id><published>2010-10-26T12:36:00.013+02:00</published><updated>2010-10-26T12:49:00.053+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><title type='text'>How to use the keyboard in the Windows Phone 7 Emulator</title><content type='html'>The one thing that irritated me the most about the Windows Phone 7 emulator the first time I used it was that the host computer keyboard is not directly mapped to the emulator. This means you by default have to use the software input panel that is built in Windows Phone 7. &lt;br /&gt;&lt;br /&gt;I immediately looked for a solution and found some MSDN documentation on the keyboard mappings for the emulator.&lt;br /&gt;&lt;br /&gt;To enable the keyboard in the emulator - press the &lt;span style="font-weight:bold;"&gt;PAGE UP&lt;/span&gt; key or &lt;span style="font-weight:bold;"&gt;PAUSE/BREAK&lt;/span&gt; key.&lt;br /&gt;&lt;br /&gt;To disable the keyboard in the emulator - press the &lt;span style="font-weight:bold;"&gt;PAGE DOWN&lt;/span&gt; key &lt;span style="font-weight:bold;"&gt;PAUSE/BREAK&lt;/span&gt; key.&lt;br /&gt;&lt;br /&gt;If you want to learn more then I suggest you check out this article called &lt;a href="http://msdn.microsoft.com/en-us/library/ff754352.aspx"&gt;Keyboard Mapping for Windows Phone Emulator&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-9216438525601233997?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/9216438525601233997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=9216438525601233997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/9216438525601233997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/9216438525601233997'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/10/how-to-use-keyboard-in-windows-phone-7.html' title='How to use the keyboard in the Windows Phone 7 Emulator'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-6952286049895048299</id><published>2010-10-25T10:37:00.014+02:00</published><updated>2010-10-25T11:02:03.574+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><title type='text'>Windows Phone 7 Unlocked Emulator</title><content type='html'>If are not pleased with the emulator that shipped with the Windows Phone 7 developer tools then here's a quick way to replace the trimmed down emulator with the full version&lt;br /&gt;&lt;br /&gt;1) Create a back up of your current emulator image file, to avoid re-installing the developer tools if in case anything goes wrong. This file will be under &lt;span style="font-weight:bold;"&gt;[PROGRAM FILES (x86)]\Microsoft SDKs\Windows Phone\v7.0\Emulator\Images\&lt;/span&gt; and is called &lt;span style="font-weight:bold;"&gt;WM70C1.en-US.bin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2) Find and download an unlocked image in your search engine of choice, search for &lt;span style="font-weight:bold;"&gt;WM70C1.en-US.unlocked&lt;/span&gt; :)&lt;br /&gt;&lt;br /&gt;3) Once downloaded, Copy the unlocked emulator image to &lt;span style="font-weight:bold;"&gt;[PROGRAM FILES (x86)]\Microsoft SDKs\Windows Phone\v7.0\Emulation\Images\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;4) Rename the unlocked emulator image to &lt;span style="font-weight:bold;"&gt;WM70C1.en-US.bin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;5) Run the emulator :)&lt;br /&gt;&lt;br /&gt;If all goes well you should be able to run the unlocked emulator and it should look like this:&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/KLBY1h1o6ds?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/KLBY1h1o6ds?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;I would advise to make sure that you can deploy and debug applications with Visual Studio. If not then you probably found an older version of the unlocked emulator image and you should try to search again for a newer version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-6952286049895048299?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/6952286049895048299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=6952286049895048299' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6952286049895048299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6952286049895048299'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/10/windows-phone-7-unlocked-emulator.html' title='Windows Phone 7 Unlocked Emulator'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-7065080365683066550</id><published>2010-10-22T09:00:00.012+02:00</published><updated>2010-10-22T10:02:18.739+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><title type='text'>Chris' Puzzle Game for Windows Phone 7</title><content type='html'>I finally managed to find the time to complete my puzzle game for Windows Phone 7. This will be my first attempt to publish anything on the marketplace. Let's see how it goes!&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IRVK2iPnUeY?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/IRVK2iPnUeY?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;If you're interested in how I made the game then I'll be more than willing to share. I might be able to post code directly as this is soon be available commercially, but I can always give some tips and share knowledge. I wrote a step by step article on how to &lt;a href="http://christian-helle.blogspot.com/2010/09/writing-puzzle-game-for-windows-phone-7.html"&gt;Create a Puzzle Game for Windows Phone 7 using XNA&lt;/a&gt;. The puzzle game logic is described in this article and I pretty use the same logic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-7065080365683066550?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/7065080365683066550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=7065080365683066550' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/7065080365683066550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/7065080365683066550'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/10/chris-puzzle-game-for-windows-phone-7.html' title='Chris&apos; Puzzle Game for Windows Phone 7'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-2363429546681266049</id><published>2010-10-21T23:44:00.005+02:00</published><updated>2010-10-21T23:59:03.290+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>Motorola Dual Bluetooth Stack Support</title><content type='html'>Apparently most Motorola devices support 2 Bluetooth Stacks: Microsoft and StoneStreet. To switch which stack to use you would have to make some changes in the registry and restart the device.&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\SymbolBluetooth]&lt;br /&gt;&lt;br /&gt;"SSStack"=DWORD:1&lt;br /&gt;&lt;br /&gt;0 = Microsoft Stack &lt;br /&gt;1 = StoneStreet One Stack&lt;br /&gt;&lt;br /&gt;The StoneStreet One Stack is supported in all devices except the ES400 and MC65. For the Microsoft stack, any device running Windows Mobile 6.1, Windows Mobile 6.5.x and Windows CE 6.0&lt;br /&gt;&lt;br /&gt;Motorola recommendeds using the Microsoft stack for new development and I strongly agree with Motorola on this!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-2363429546681266049?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/2363429546681266049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=2363429546681266049' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/2363429546681266049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/2363429546681266049'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/10/motorola-dual-bluetooth-stack-support.html' title='Motorola Dual Bluetooth Stack Support'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-7477684092160171285</id><published>2010-10-20T12:58:00.017+02:00</published><updated>2010-10-20T13:22:22.073+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><title type='text'>Widcomm Bluetooth Pairing Prompt</title><content type='html'>Not so long ago I had a project that involved Bluetooth communication from a windows mobile device to some custom designed hardware. Everything went smoothly with only a few bumps during the scope of the project. When we had the applications on the field, certain users where running on devices that used the Widcomm Bluetooth Stack and that gave us a few headaches. For one, our system doesn't use any security features in bluetooth hence it doesn't not require pairing. Our security architecture is service based and checks for certain keys being passed back and forth to an online service. Very standard stuff. The problem we had with the devices running on a Widcomm Bluetooth stack was that the user was always prompted to pair even though the device did not require pairing. The application was not designed to handle user input aside from logging in/out and some diagnostic features. The application was designed to just run quietly in the background with the device tucked in the users pocket.&lt;br /&gt;&lt;br /&gt;Since quite a few devices use the Widcomm Bluetooth Stack I needed a quick fix/hack to avoid the user having to pick up the device and click "Yes" on the security prompt to communicate with the device. The fix had to be as simple as possible and had to run without disrupting the user. My not so clean solution was to create a small application that does nothing but check if the Widcomm security pairing prompt app was running and if so send a keystroke event to simulate the user clicking on "Yes".&lt;br /&gt;&lt;br /&gt;The Widcomm security prompt app main window uses the class name &lt;span style="font-weight:bold;"&gt;Broadcom_BTWizard&lt;/span&gt; with the window name &lt;span style="font-weight:bold;"&gt;Bluetooth&lt;/span&gt;. I check if this window exists and send the F1 keyboard event to simulate clicking on the left hardware button on the device&lt;br /&gt;&lt;br /&gt;Here's a code snippet in C#&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; FindWindow(&lt;span style="color: blue;"&gt;string&lt;/span&gt; lpClassName, &lt;span style="color: blue;"&gt;string&lt;/span&gt; lpWindowName);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; keybd_event(&lt;span style="color: blue;"&gt;byte&lt;/span&gt; bVk, &lt;span style="color: blue;"&gt;byte&lt;/span&gt; bScan, &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwFlags, &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwExtraInfo);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; KEYEVENTF_KEYUP = 0x02;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; KEYEVENTF_KEYDOWN = 0x00;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; running = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; CloseBroadcomWindowWorker()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;while&lt;/span&gt; (running)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hwnd = FindWindow(&lt;span style="color: #a31515;"&gt;&amp;quot;Broadcom_BTWizard&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;&amp;quot;Bluetooth&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (hwnd != &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt;.Zero)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event((&lt;span style="color: blue;"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.F1, 0, KEYEVENTF_KEYDOWN, 0);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event((&lt;span style="color: blue;"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.F1, 0, KEYEVENTF_KEYUP, 0);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Thread&lt;/span&gt;.Sleep(5000);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This is of course not the best solution but if you have a similar problem then this might save you some time if your only requirement is to get it to work as soon as possible. Otherwise, I would suggest avoiding the Widcomm Bluetooth Stack and just go for devices that use the Microsoft Bluetooth Stack&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-7477684092160171285?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/7477684092160171285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=7477684092160171285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/7477684092160171285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/7477684092160171285'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/10/widcomm-bluetooth-pairing-prompt.html' title='Widcomm Bluetooth Pairing Prompt'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-2515489116259400656</id><published>2010-10-15T15:45:00.010+02:00</published><updated>2010-10-15T16:00:05.665+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><title type='text'>Windows Phone 7 Game State Management using XNA</title><content type='html'>Not so long ago I wrote a Puzzle game for Windows Phone 7 using XNA. The game was really simple and had no menu or state management. Luckily, I recently stumbled upon a sample on MSDN that describes the basics of implementing game state management using XNA.&lt;br /&gt;&lt;br /&gt;To try things out a bit more I modified my existing puzzle game and included the sample game state management code. The results are pretty amazing!&lt;br /&gt;&lt;br /&gt;Here's how my Puzzle Game for Windows Phone 7 looks like now:&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CjmIzRYPlUs?fs=1&amp;amp;hl=da_DK"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/CjmIzRYPlUs?fs=1&amp;amp;hl=da_DK" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;If you're getting into writing games for Windows Phone 7 using XNA then you should really check out the Game State Management sample here:&lt;br /&gt;&lt;a href="http://create.msdn.com/en-US/education/catalog/sample/game_state_management"&gt;http://create.msdn.com/en-US/education/catalog/sample/game_state_management&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I described in detail how I built my puzzle game application in an article called &lt;a href="http://christian-helle.blogspot.com/2010/09/writing-puzzle-game-for-windows-phone-7.html"&gt;Writing a Puzzle Game for Windows Phone 7 using XNA&lt;/a&gt;. Try checking it out, I hope you find it interesting&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-2515489116259400656?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/2515489116259400656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=2515489116259400656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/2515489116259400656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/2515489116259400656'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/10/windows-phone-7-game-state-management.html' title='Windows Phone 7 Game State Management using XNA'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-1127109241581408403</id><published>2010-10-11T15:17:00.027+02:00</published><updated>2010-10-13T11:39:40.550+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><title type='text'>Microsoft Advertising SDK for Windows Phone 7</title><content type='html'>I recently stumbled upon the &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b0f00afc-9709-4cc2-ba2c-57728db6cbd6"&gt;Microsoft Advertising SDK for Windows Phone 7&lt;/a&gt;. At the client side, it provides a control called AdControl that retrieves banner information based on the specified ApplicationId and AdUnitId. In order to use the Microsoft Advertising’s ad delivery system, you first need to create a &lt;a href="http://pubcenter.microsoft.com/"&gt;Microsoft pubCenter&lt;/a&gt; account.&lt;br /&gt;&lt;br /&gt;Here's some information extracted from the help file included in the SDK:&lt;i&gt;&lt;br /&gt;&lt;blockquote&gt;The Microsoft Advertising SDK for Windows Phone 7 provides an AdControl that you can use to publish advertisements in Windows Phone 7 applications. The Microsoft Advertising AdControl communicates with Microsoft servers that deliver ads. When these servers return ads to the AdControl, the AdControl will render the ads within your Windows Phone 7 application.&lt;br /&gt;&lt;br /&gt;In order to use the Microsoft Advertising’s ad delivery system, you first need to create a Microsoft pubCenter account. Microsoft pubCenter is an advertising publisher management system that enables you to create ad placements and collect advertising revenue. Once you create an account, you will register your mobile applications by using Microsoft pubCenter. When a Windows Phone 7 application is registered with Microsoft pubCenter it will receive a unique mobile application identifier (ApplicationId).&lt;br /&gt;&lt;br /&gt;When a mobile application displays a window, the application can define a space within the window for the presentation of advertisements. Each ad placement that is presented is called an ad unit. You will define and create mobile ad units by using Microsoft pubCenter, and each mobile ad unit will be assigned a unique ad unit identifier (AdUnitId).&lt;br /&gt;&lt;br /&gt;The ApplicationId and the AdUnitId are required for your Windows Phone 7 application to request ads from Microsoft Advertising’s ad delivery system. The ApplicationId and the AdUnitId identify the ad unit that is delivered to a Windows Phone 7 application and the publisher that will receive credit for displaying the ad unit.&lt;br /&gt;&lt;br /&gt;It takes only a few easy steps to register with Microsoft pubCenter, create ad units, manage revenues, and integrate the Microsoft Advertising Mobile AdControl for Windows Phone 7 into your application.&lt;/blockquote&gt;&lt;/i&gt;&lt;br /&gt;Sounds fairly simple but not everything can be perfect in a first release. The first problem I found was that the  pubCenter Registration and Payment will only be available for publishers from the United States. So to be eligable for payments one must for example have a valid US address and a valid Tax Information Number (TIN) if the publisher is a business entity. As I'm not based in the US, I haven't tried this yet. But based on what I've read in the documentation, using the AdControl in a Windows Phone 7 application seems fairly easy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here are some C# and XAML snippets:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following C# code instantiates a new AdControl and sets mandatory targeting parameters.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;AdControl ctrl = &lt;span style="color: blue;"&gt;new&lt;/span&gt; AdControl();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;ctrl.ApplicationId = &lt;span style="color: #a31515;"&gt;&amp;quot;testapplication&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;ctrl.AdUnitId = &lt;span style="color: #a31515;"&gt;&amp;quot;testadunit&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.ContentGrid.Children.Add(ctrl);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The following C# code instantiates a new AdControl with manual ad rotation.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; applicationId = &lt;span style="color: #a31515;"&gt;&amp;quot;testapplication&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; adUnitId = &lt;span style="color: #a31515;"&gt;&amp;quot;testadunit&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt; isAutoRotation = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;AdControl ctrl = &lt;span style="color: blue;"&gt;new&lt;/span&gt; AdControl(applicationId, adUnitId, AdModel.Contextual, isAutoRotation);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;ctrl.Width = 480;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;ctrl.Height = 80;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.ContentGrid.Children.Add(ctrl);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The following XAML instantiates a new AdControl with mandatory targeting parameters.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns:adctl&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;clr-namespace:Microsoft.Advertising.Mobile.UI;assembly=Microsoft.Advertising.Mobile.UI&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Grid.Row&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;1&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;adctl:AdControl&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;80&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;480&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;AdUnitId&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;Test&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ApplicationId&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;Test&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;AdModel&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;Contextual&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I'm looking forward for these tools to be available in Europe so I can try them out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-1127109241581408403?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/1127109241581408403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=1127109241581408403' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/1127109241581408403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/1127109241581408403'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/10/microsoft-advertising-sdk-for-windows.html' title='Microsoft Advertising SDK for Windows Phone 7'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-3823128256528423396</id><published>2010-10-06T14:29:00.016+02:00</published><updated>2010-10-06T14:47:34.933+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='How to'/><title type='text'>How to retrieve a list of installed applications using .NETCF</title><content type='html'>In this short post I'd like to demonstrate how to retrieve a list of installed applications on a Windows Mobile device using OMA Client Provisioning. First you need to add a reference to the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.configuration.aspx"&gt;Microsoft.WindowsMobile.Configuration&lt;/a&gt; assembly. To retrieve the list we need to process a specific configuration (&lt;a href="http://msdn.microsoft.com/en-us/library/aa455977.aspx"&gt;UnInstall Configuration Service Provider&lt;/a&gt;) using the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.configuration.configurationmanager.processconfiguration.aspx"&gt;ConfigurationManager.ProcessConfiguration&lt;/a&gt; method. The configuration is described in an XML and the response to this will also be described in XML&lt;br /&gt;&lt;br /&gt;To query the device we process this configuration:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;wap-provisioningdoc&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;characteristic-query&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;UnInstall&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;wap-provisioningdoc&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The query above will only return installed application that can be &lt;b&gt;uninstalled&lt;/b&gt;. The device would then respond with something like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;wap-provisioningdoc&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;characteristic&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;UnInstall&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;characteristic&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;Microsoft Application#2&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;parm&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;uninstall&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;0&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;characteristic&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;characteristic&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;Microsoft Application#1&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;parm&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;uninstall&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;0&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;characteristic&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;characteristic&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;Demo Home Screen&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;parm&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;uninstall&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;0&lt;/span&gt;&amp;quot;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;characteristic&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;characteristic&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;wap-provisioningdoc&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And here's how to accomplish this task using .NETCF and C#&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; doc = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;XmlDocument&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;doc.LoadXml(&lt;span style="color: #a31515;"&gt;@&amp;quot;&amp;lt;wap-provisioningdoc&amp;gt;&amp;lt;characteristic-query type=&amp;quot;&amp;quot;UnInstall&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/wap-provisioningdoc&amp;gt;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;doc = &lt;span style="color: #2b91af;"&gt;ConfigurationManager&lt;/span&gt;.ProcessConfiguration(doc, &lt;span style="color: blue;"&gt;true&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; nodes = doc.SelectNodes(&lt;span style="color: #a31515;"&gt;&amp;quot;wap-provisioningdoc/characteristic[@type='UnInstall']/characteristic/@type&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; node &lt;span style="color: blue;"&gt;in&lt;/span&gt; nodes.Cast&amp;lt;&lt;span style="color: #2b91af;"&gt;XmlNode&lt;/span&gt;&amp;gt;())&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Trace&lt;/span&gt;.WriteLine(node.InnerText);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I hope you found this useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-3823128256528423396?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/3823128256528423396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=3823128256528423396' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/3823128256528423396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/3823128256528423396'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/10/how-to-retrieve-list-of-installed.html' title='How to retrieve a list of installed applications using .NETCF'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-4439275956730839714</id><published>2010-09-15T10:38:00.147+02:00</published><updated>2010-09-27T13:29:20.157+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Step by Step'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><category scheme='http://www.blogger.com/atom/ns#' term='How to'/><title type='text'>Writing a Puzzle Game for Windows Phone 7 using XNA</title><content type='html'>This article is a step by step guide on how to write a puzzle game for Windows Phone 7 using XNA. Before we get started you will need the &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce"&gt;Windows Phone 7 Developer Tools&lt;/a&gt;. Please note that I'm not really a game developer and I might not be doing the best practices. The intention of this article is just to demonstrate how easy it is to write a game using XNA even if one has little to no experience in game development.&lt;br /&gt;&lt;br /&gt;I've been playing around with XNA these past few nights and decided to write a few casual games. The first prototype I have is a port of my old Puzzle Game. The game is still really incomplete, like there is no menu or state management which means you can't shut it down properly and stuff. But I thought I'd share some thoughts on my experience with it and at the same time share some code.&lt;br /&gt;&lt;br /&gt;The structure of the game is fairly simple. I have 2 collections: one contains an image, another contains an index to the each of the elements of the first collection and its the area where to display the image on the screen. The collection that contains the indexes is my scrambled puzzle. Each time a piece is moved, I update the order of my scrambled list afterwards I check if all the items in my scrambled list are correctly sorted in an ascending fashion. If all the items are sorted properly then it means that the puzzle was solved.&lt;br /&gt;&lt;br /&gt;Enough said and let's get started. The first step is to of course fire up Visual Studio and create a new XNA Game Studio 4.0 - Windows Phone Game project. Let's call the project &lt;span style="font-weight:bold;"&gt;PuzzleGame&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kVNAYTvQ3QE/TJtLUfa1DqI/AAAAAAAACp4/3Zrdj2Wwv6I/s1600/Create+New+Project.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_kVNAYTvQ3QE/TJtLUfa1DqI/AAAAAAAACp4/3Zrdj2Wwv6I/s400/Create+New+Project.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5520088583676169890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now that we have a project we can start adding some &lt;a href="http://msdn.microsoft.com/en-us/library/bb447756.aspx"&gt;content&lt;/a&gt; or game assets. For this simple project, we will use 3 different game assets: the puzzle image, and 2 &lt;a href="http://msdn.microsoft.com/en-us/library/bb447673.aspx"&gt;Sprite Font&lt;/a&gt; for drawing the elapsed playing time and to draw text to congratulate the player once they complete the puzzle. To add content, right click on the PuzzleGameContent project, then click on Add.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_kVNAYTvQ3QE/TJtZcivezHI/AAAAAAAACqA/TykBTqmWDTA/s1600/Add+Existing+Item.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 396px;" src="http://2.bp.blogspot.com/_kVNAYTvQ3QE/TJtZcivezHI/AAAAAAAACqA/TykBTqmWDTA/s400/Add+Existing+Item.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5520104115169840242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For the puzzle image, we can pick up one of the sample pictures included in Windows 7 (e.g. \Users\Public\Pictures\Sample Pictures)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kVNAYTvQ3QE/TJtaDephfeI/AAAAAAAACqI/uWSd56n5XYU/s1600/Add+Existing+Item+-+Puzzle+Picture.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 242px;" src="http://4.bp.blogspot.com/_kVNAYTvQ3QE/TJtaDephfeI/AAAAAAAACqI/uWSd56n5XYU/s400/Add+Existing+Item+-+Puzzle+Picture.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5520104784086007266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After adding the puzzle image we should change the Asset Name property to &lt;span style="font-weight:bold;"&gt;PuzzleImage&lt;/span&gt;. This can be done through the Properties Window (Right click on the added image in the Solution Explorer and click Properties)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kVNAYTvQ3QE/TJtbggI4cQI/AAAAAAAACqQ/UmKYUH-0Du8/s1600/PuzzleImage+Asset+Name.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 357px; height: 275px;" src="http://4.bp.blogspot.com/_kVNAYTvQ3QE/TJtbggI4cQI/AAAAAAAACqQ/UmKYUH-0Du8/s400/PuzzleImage+Asset+Name.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5520106382213804290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To add Sprite Fonts, right click on the content project, click Add - New Item, then select Sprite Font. Let's add 2 sprite fonts and call them &lt;span style="font-weight:bold;"&gt;GameTime &lt;/span&gt;and &lt;span style="font-weight:bold;"&gt;Congratulations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_kVNAYTvQ3QE/TJtsw1bVi-I/AAAAAAAACqk/hXJH2R0c0bg/s1600/Add+New+Item.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 389px;" src="http://2.bp.blogspot.com/_kVNAYTvQ3QE/TJtsw1bVi-I/AAAAAAAACqk/hXJH2R0c0bg/s400/Add+New+Item.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5520125354503932898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kVNAYTvQ3QE/TJyRhIr0BqI/AAAAAAAACq0/53B1sBn8OAA/s1600/Add+Sprite+Font+-+GameTime.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 227px;" src="http://3.bp.blogspot.com/_kVNAYTvQ3QE/TJyRhIr0BqI/AAAAAAAACq0/53B1sBn8OAA/s400/Add+Sprite+Font+-+GameTime.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5520447241702344354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kVNAYTvQ3QE/TJttrdIcliI/AAAAAAAACqs/rLfJ38qzR5w/s1600/Add+Sprite+Font+-+Congratulations.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 226px;" src="http://3.bp.blogspot.com/_kVNAYTvQ3QE/TJttrdIcliI/AAAAAAAACqs/rLfJ38qzR5w/s400/Add+Sprite+Font+-+Congratulations.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5520126361594533410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let's change the Asset Name of the Sprite Fonts we just added to &lt;span style="font-weight:bold;"&gt;GameTimeFont&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;CongratulationsFont&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kVNAYTvQ3QE/TJ8qF-aMsnI/AAAAAAAACq8/AeNDq6mC-C4/s1600/GameTime+Sprite+Font+Name.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 214px;" src="http://1.bp.blogspot.com/_kVNAYTvQ3QE/TJ8qF-aMsnI/AAAAAAAACq8/AeNDq6mC-C4/s400/GameTime+Sprite+Font+Name.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5521177950320112242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kVNAYTvQ3QE/TJ8qN6NGpDI/AAAAAAAACrE/8beoa2FZ8Ck/s1600/Congratulations+Sprite+Font+Name.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 214px;" src="http://3.bp.blogspot.com/_kVNAYTvQ3QE/TJ8qN6NGpDI/AAAAAAAACrE/8beoa2FZ8Ck/s400/Congratulations+Sprite+Font+Name.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5521178086630401074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The SpriteFont content is actually just an XML file. The GameTime font's default description should be good enough but let's change the Congratulations font description to use a larger size. Open Congratulations.spritefont from the solution explorer and change the &lt;span style="font-weight:bold;"&gt;Size&lt;/span&gt; to 48, and change the &lt;span style="font-weight:bold;"&gt;Style&lt;/span&gt; to Bold&lt;br /&gt;&lt;br /&gt;Now that we have our game assets in place we can start coding. A lot of initial code is generated when creating a new XNA Game Studio project. To start things clean let's rename default Game1 class to PuzzleGame and delete all the contents leaving the PuzzleGame class empty. &lt;br /&gt;&lt;br /&gt;Before we start implementing our PuzzleGame class we'll need to create a class which will represent a piece of the puzzle, let's call this PuzzlePiece&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PuzzlePiece&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Index { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Vector2&lt;/span&gt; Bounds { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; GetHashCode()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; Index.GetHashCode();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; Equals(&lt;span style="color: blue;"&gt;object&lt;/span&gt; obj)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; piece = obj &lt;span style="color: blue;"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PuzzlePiece&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (piece != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; Index.Equals(piece.Index);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.Equals(obj);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We'll also need an enumeration that describes the state of the game. This state describes what to draw on the screen. Let's call this enum DrawMode. There are 2 simple states of the game:&lt;br /&gt;&lt;br /&gt;1. Puzzle - Draws the puzzle game&lt;br /&gt;2. Congratulations - Draws a "Congratulations" text once the player solves the puzzle&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DrawMode&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Puzzle,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Congratulations&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now we can start implementing our PuzzleGame class. The first step is to define our global variables and the constructor method&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;GraphicsDeviceManager&lt;/span&gt; graphics;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;SpriteBatch&lt;/span&gt; spriteBatch;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;Texture2D&lt;/span&gt; previewTexture;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;Vector2&lt;/span&gt; previewVector, emptyPiece, totalGameTimeVector, congratulationsVector;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;SpriteFont&lt;/span&gt; gameTimerFont,congratulationsFont;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;Texture2D&lt;/span&gt;&amp;gt; puzzlePieces;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;PuzzlePiece&lt;/span&gt;&amp;gt; scrambledPieces;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;DrawMode&lt;/span&gt; Mode;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt; height, width;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;double&lt;/span&gt; elapsedTime, playingTime;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;&amp;gt; pendingCommands;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PIECE_COUNT = 4 * 4;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt; solved;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; animating;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; PuzzleGame()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; graphics = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;GraphicsDeviceManager&lt;/span&gt;(&lt;span style="color: blue;"&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Content.RootDirectory = &lt;span style="color: #a31515;"&gt;&amp;quot;Content&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Next step is to implement the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game.initialize.aspx"&gt;Initialize()&lt;/a&gt; method. This method allows the game to perform any initialization it needs before it starts to run. With a simple game such as this one could debate where to put the initialization code, I could easily see myself having my initialize code in the constructor method. To make this example as XNA'ish let's initialize our non-content variables in the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game.initialize.aspx"&gt;Initialize()&lt;/a&gt; method.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Allows the game to perform any initialization it needs to before starting to run.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; This is where it can query for any required services and load any non-graphic&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; related content.&amp;nbsp; Calling base.Initialize will enumerate through any components&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; and initialize them as well.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Initialize()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pendingCommands = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Queue&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mode = &lt;span style="color: #2b91af;"&gt;DrawMode&lt;/span&gt;.Puzzle;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; previewVector = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Vector2&lt;/span&gt;(0, 0);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; totalGameTimeVector = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Vector2&lt;/span&gt;(10, 10);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.Initialize();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Next we implement the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game.loadcontent.aspx"&gt;LoadContent&lt;/a&gt;() and &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game.unloadcontent.aspx"&gt;UnloadContent&lt;/a&gt;()&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; LoadContent will be called once per game and is the place to load&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; all of your content.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; LoadContent()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; spriteBatch = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SpriteBatch&lt;/span&gt;(GraphicsDevice);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; previewTexture = Content.Load&amp;lt;&lt;span style="color: #2b91af;"&gt;Texture2D&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;PuzzleImage&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gameTimerFont = Content.Load&amp;lt;&lt;span style="color: #2b91af;"&gt;SpriteFont&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;GameTimeFont&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; congratulationsFont = Content.Load&amp;lt;&lt;span style="color: #2b91af;"&gt;SpriteFont&lt;/span&gt;&amp;gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;CongratulationsFont&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; size = congratulationsFont.MeasureString(&lt;span style="color: #a31515;"&gt;&amp;quot;Congrautulations!&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; congratulationsVector = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Vector2&lt;/span&gt;(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (GraphicsDevice.Viewport.Width - size.X) / 2,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (GraphicsDevice.Viewport.Height - size.Y) / 2);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Divide();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scramble();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; UnloadContent will be called once per game and is the place to unload&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; all content.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; UnloadContent()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; previewTexture.Dispose();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; item &lt;span style="color: blue;"&gt;in&lt;/span&gt; puzzlePieces)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; item.Value.Dispose();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; spriteBatch.Dispose();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You probably noticed that LoadContent calls methods called &lt;span style="font-weight:bold;"&gt;Divide&lt;/span&gt;() and &lt;span style="font-weight:bold;"&gt;Scramble&lt;/span&gt;(). &lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight:bold;"&gt;Divide&lt;/span&gt;() method splits the puzzle image into tiny pieces represented by the PuzzlePiece class. The full puzzle image is stored in a &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.texture2d.aspx"&gt;Texture2D&lt;/a&gt; object called previewTexture, to split this into pieces I copy the color information of the puzzle image within a specified bounds into an array of type Color and then I set this color information in a new instance of Texture2D.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Divide()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; idx = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; cells = &lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;.ToInt32(&lt;span style="color: #2b91af;"&gt;Math&lt;/span&gt;.Sqrt(PIECE_COUNT));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; height = GraphicsDevice.Viewport.Height / cells;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; width = GraphicsDevice.Viewport.Width / cells;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puzzlePieces = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;Texture2D&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; y = 0; y &amp;lt; GraphicsDevice.Viewport.Height; y += height)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; x = 0; x &amp;lt; GraphicsDevice.Viewport.Width; x += width)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; rectangle = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt;(x, y, width, height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; data = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;[width * height];&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; previewTexture.GetData&amp;lt;&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;&amp;gt;(0, rectangle, data, 0, data.Length);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; piece = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Texture2D&lt;/span&gt;(GraphicsDevice, width, height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; piece.SetData(data);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; puzzlePieces.Add(idx++, piece);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight:bold;"&gt;Scramble&lt;/span&gt;() method does exactly what the method name describes, it scrambles the puzzle. The field called &lt;span style="font-weight:bold;"&gt;scrambledPieces&lt;/span&gt; is a key/value pair collection that uses the index of the &lt;span style="font-weight:bold;"&gt;puzzlePieces&lt;/span&gt; collection as the key and the bounds of this image to be drawn on the screen as the value. The bounds of the image is stored in a &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector2.aspx"&gt;Vector2&lt;/a&gt; object.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Scramble()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; idx = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; random = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Random&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; capacity = puzzlePieces.Count - 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scrambledPieces = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;PuzzlePiece&lt;/span&gt;&amp;gt;(puzzlePieces.Count);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; y = 0; y &amp;lt; GraphicsDevice.Viewport.Height; y += height)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; x = 0; x &amp;lt; GraphicsDevice.Viewport.Width; x += width)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (idx &amp;lt; capacity)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; piece = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PuzzlePiece&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;while&lt;/span&gt; (&lt;span style="color: blue;"&gt;true&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; piece.Index = random.Next(0, capacity);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!scrambledPieces.ContainsValue(piece))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; piece.Bounds = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Vector2&lt;/span&gt;(x, y);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrambledPieces.Add(idx++, piece);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; emptyPiece = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Vector2&lt;/span&gt;(x, y);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scrambledPieces.Add(idx, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PuzzlePiece&lt;/span&gt; { Index = -1 });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;All we need now is to implement the &lt;a href="http://msdn.microsoft.com/en-us/library/bb203873.aspx"&gt;Game Loop&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game.update.aspx"&gt;Update&lt;/a&gt;() method will contain the game logic. The game logic will be used for updating the game surface, collision detection, accepting and handling user input, background music, sounds effects, etc. In our game we use it for accepting and handling user input. We accept the user input through polling the Mouse state by calling the static method&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.mouse.getstate.aspx"&gt; Mouse.GetState()&lt;/a&gt;. We handle the user input by doing a hit test to get which puzzle piece was clicked and moving this piece. Only one piece can be moved at a time and this piece can only move up, down, left, or right. For those who are not familiar with what a hit test is, here's my attempt to define it: A hit test is a way of detecting if 2 objects are touching or intersecting with each other. In our case, we use hit testing to figure out which puzzle piece was clicked by checking all the pieces of the puzzle if the mouse position is inside its bounds. Moving a puzzle piece is implemented as a very basic animation that runs on a separate thread. User input is not handled while the puzzle pieces are being moved around. The update method also updates the game playing time which we later on draw on the screen.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Allows the game to run logic such as updating the world,&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; checking for collisions, gathering input, and playing audio.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name=&amp;quot;gameTime&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Update(&lt;span style="color: #2b91af;"&gt;GameTime&lt;/span&gt; gameTime)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; mouseState = &lt;span style="color: #2b91af;"&gt;Mouse&lt;/span&gt;.GetState();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (mouseState.LeftButton == &lt;span style="color: #2b91af;"&gt;ButtonState&lt;/span&gt;.Pressed)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (animating)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.Update(gameTime);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; clickedRectangle = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt;(mouseState.X, mouseState.Y, width, height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; pieceRect = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt;(0, 0, width, height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; scrambledPieces.Count; i++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pieceRect.X = (&lt;span style="color: blue;"&gt;int&lt;/span&gt;)scrambledPieces[i].Bounds.X;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pieceRect.Y = (&lt;span style="color: blue;"&gt;int&lt;/span&gt;)scrambledPieces[i].Bounds.Y;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!pieceRect.Intersects(clickedRectangle))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;continue&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (mouseState.X &amp;gt;= emptyPiece.X &amp;amp;&amp;amp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mouseState.X &amp;lt;= emptyPiece.X + width &amp;amp;&amp;amp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mouseState.Y &amp;gt;= emptyPiece.Y &amp;amp;&amp;amp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mouseState.Y &amp;lt;= emptyPiece.Y + height)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;continue&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt; command = &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.None;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (pieceRect.X &amp;gt;= emptyPiece.X &amp;amp;&amp;amp; pieceRect.X &amp;lt;= emptyPiece.X)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (pieceRect.Y - height == emptyPiece.Y)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; command = &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Up;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (pieceRect.Y + height == emptyPiece.Y)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; command = &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Down;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (pieceRect.Y &amp;gt;= emptyPiece.Y &amp;amp;&amp;amp; pieceRect.Y &amp;lt;= emptyPiece.Y)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (pieceRect.X - width == emptyPiece.X)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; command = &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Left;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (pieceRect.X + width == emptyPiece.X)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; command = &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Right;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (command != &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.None &amp;amp;&amp;amp; !pendingCommands.Contains(command))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pendingCommands.Enqueue(command);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Debug&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;&amp;quot;Clicked: &amp;quot;&lt;/span&gt; + i);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; elapsedTime += gameTime.ElapsedGameTime.TotalMilliseconds;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (elapsedTime &amp;gt;= 10)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (pendingCommands.Count &amp;gt; 0)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MovePiece(pendingCommands.Dequeue());&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; elapsedTime = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!solved)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; playingTime += gameTime.ElapsedGameTime.TotalMilliseconds;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.Update(gameTime);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The MovePiece() method does a hit test to find which piece to move. Once the correct piece is found the Animate() method is called. &lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; MovePiece(&lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt; command)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; scrambledPieces.Count; i++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;switch&lt;/span&gt; (command)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Up:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (scrambledPieces[i].Bounds.X == emptyPiece.X &amp;amp;&amp;amp; scrambledPieces[i].Bounds.Y - height == emptyPiece.Y)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Animate(command, i);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Down:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (scrambledPieces[i].Bounds.X == emptyPiece.X &amp;amp;&amp;amp; scrambledPieces[i].Bounds.Y + height == emptyPiece.Y)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Animate(command, i);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Left:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (scrambledPieces[i].Bounds.Y == emptyPiece.Y &amp;amp;&amp;amp; scrambledPieces[i].Bounds.X - width == emptyPiece.X)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Animate(command, i);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Right:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (scrambledPieces[i].Bounds.Y == emptyPiece.Y &amp;amp;&amp;amp; scrambledPieces[i].Bounds.X + width == emptyPiece.X)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Animate(command, i);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The Animate() method starts a thread in the ThreadPool which will move the puzzle piece by 2 pixels at a time until the piece is placed in the empty area. The empty area information is stored in the &lt;span style="font-weight:bold;"&gt;emptyPiece&lt;/span&gt; object. Once the piece is in the empty area the scrambled index of the piece is updated together with its new bounds. Finally a check if the puzzle was solved by the move is done.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Animate(&lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt; direction, &lt;span style="color: blue;"&gt;int&lt;/span&gt; i)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; animating = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;ThreadPool&lt;/span&gt;.QueueUserWorkItem((state) =&amp;gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; INCREMENT = 2;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; newEmptyPiece = scrambledPieces[i].Bounds;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;while&lt;/span&gt; (scrambledPieces[i].Bounds != emptyPiece)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;switch&lt;/span&gt; (direction)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Up:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrambledPieces[i].Bounds = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Vector2&lt;/span&gt;(emptyPiece.X, scrambledPieces[i].Bounds.Y - INCREMENT);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Down:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrambledPieces[i].Bounds = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Vector2&lt;/span&gt;(emptyPiece.X, scrambledPieces[i].Bounds.Y + INCREMENT);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Left:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrambledPieces[i].Bounds = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Vector2&lt;/span&gt;(scrambledPieces[i].Bounds.X - INCREMENT, emptyPiece.Y);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Right:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scrambledPieces[i].Bounds = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Vector2&lt;/span&gt;(scrambledPieces[i].Bounds.X + INCREMENT, emptyPiece.Y);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Thread&lt;/span&gt;.Sleep(1);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; emptyPiece = newEmptyPiece;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;finally&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateScrambledIndex(direction, i);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CheckForCompletion();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; animating = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; UpdateScrambledIndex(&lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt; command, &lt;span style="color: blue;"&gt;int&lt;/span&gt; index)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; newIndex = -1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; INCREMENT = &lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;.ToInt32(&lt;span style="color: #2b91af;"&gt;Math&lt;/span&gt;.Sqrt(PIECE_COUNT));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;switch&lt;/span&gt; (command)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Up:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; newIndex = index - INCREMENT;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (newIndex &amp;lt; 0) newIndex = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Down:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; newIndex = index + INCREMENT;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (newIndex &amp;gt; scrambledPieces.Count - 1) newIndex = scrambledPieces.Count - 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Left:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; newIndex = index - 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (newIndex &amp;lt; 0) newIndex = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Keys&lt;/span&gt;.Right:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; newIndex = index + 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (newIndex &amp;gt; scrambledPieces.Count - 1) newIndex = scrambledPieces.Count - 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; temp = scrambledPieces[newIndex];&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scrambledPieces[newIndex] = scrambledPieces[index];&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scrambledPieces[index] = temp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; CheckForCompletion()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; scrambledPieces.Count - 1; i++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (scrambledPieces[i].Index != i)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; solved = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mode = &lt;span style="color: #2b91af;"&gt;DrawMode&lt;/span&gt;.Congratulations;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Last but not the least we implement the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game.draw.aspx"&gt;Draw&lt;/a&gt;() method. This is where we render the screen. We always start by clearing the screen and afterwards adding sprites to our &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritebatch.aspx"&gt;SpriteBatch&lt;/a&gt;. In our game we only have 2 ways of rendering the screen: rendering the puzzle game in play; and rendering if the puzzle was solved. &lt;br /&gt;&lt;br /&gt;To render the puzzle game I add a sprite that draws the game playing time on the top left corner then I add a sprite for each piece of the puzzle by iterating through my scrambledPieces collection..&lt;br /&gt;&lt;br /&gt;To render the screen when the puzzle is solved I draw 2 sprites. One is the playing time and the other is "Congratulations"&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; This is called when the game should draw itself.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name=&amp;quot;gameTime&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Provides a snapshot of timing values.&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Draw(&lt;span style="color: #2b91af;"&gt;GameTime&lt;/span&gt; gameTime)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GraphicsDevice.Clear(&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.Black);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; spriteBatch.Begin(&lt;span style="color: #2b91af;"&gt;SpriteSortMode&lt;/span&gt;.BackToFront, &lt;span style="color: #2b91af;"&gt;BlendState&lt;/span&gt;.AlphaBlend);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;switch&lt;/span&gt; (Mode)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DrawMode&lt;/span&gt;.Puzzle:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; spriteBatch.DrawString(gameTimerFont, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TimeSpan&lt;/span&gt;(0, 0, 0, 0, (&lt;span style="color: blue;"&gt;int&lt;/span&gt;)playingTime).ToString(), totalGameTimeVector, &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.White);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; scrambledPieces.Count; i++)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (scrambledPieces[i].Index == -1) &lt;span style="color: blue;"&gt;continue&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; piece = puzzlePieces[scrambledPieces[i].Index];&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; spriteBatch.Draw(piece, scrambledPieces[i].Bounds, &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.White);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DrawMode&lt;/span&gt;.Congratulations:&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; spriteBatch.DrawString(gameTimerFont, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TimeSpan&lt;/span&gt;(0, 0, 0, 0, (&lt;span style="color: blue;"&gt;int&lt;/span&gt;)playingTime).ToString(), totalGameTimeVector, &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.White);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; spriteBatch.DrawString(congratulationsFont, &lt;span style="color: #a31515;"&gt;&amp;quot;Congratulations!&amp;quot;&lt;/span&gt;, congratulationsVector, &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.White);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; spriteBatch.End();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.Draw(gameTime);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I hope you found this article useful and educational. You can grab the source code &lt;a href="http://cid-ca531e7fb4762c70.office.live.com/self.aspx/Code%20Samples/PuzzleGameWP7.zip"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-4439275956730839714?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/4439275956730839714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=4439275956730839714' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/4439275956730839714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/4439275956730839714'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/09/writing-puzzle-game-for-windows-phone-7.html' title='Writing a Puzzle Game for Windows Phone 7 using XNA'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_kVNAYTvQ3QE/TJtLUfa1DqI/AAAAAAAACp4/3Zrdj2Wwv6I/s72-c/Create+New+Project.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-6097183768724829755</id><published>2010-08-23T12:18:00.014+02:00</published><updated>2010-08-23T15:11:56.583+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RAPI'/><title type='text'>Copying files from the Desktop to the Device using .NET</title><content type='html'>Someone asked me recently how to copy files from the desktop to the device after reading my old article called &lt;a href="http://christian-helle.blogspot.com/2007/06/copying-files-from-device-to-desktop.html"&gt;How to copy files from the Device to the Desktop using .NET&lt;/a&gt;. Well here's how to do it:&lt;br /&gt;&lt;br /&gt;First, we'll need our P/Invokes to &lt;span style="font-weight:bold;"&gt;rapi.dll&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;rapi.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; CeRapiInit();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;rapi.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; CeRapiUninit();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;rapi.dll&amp;quot;&lt;/span&gt;, CharSet = &lt;span style="color: #2b91af;"&gt;CharSet&lt;/span&gt;.Unicode)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; CeCreateFile(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; lpFileName,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;uint&lt;/span&gt; dwDesiredAccess,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwShareMode,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; lpSecurityAttributes,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwCreationDisposition,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwFlagsAndAttributes,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; hTemplateFile);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;rapi.dll&amp;quot;&lt;/span&gt;, CharSet = &lt;span style="color: #2b91af;"&gt;CharSet&lt;/span&gt;.Unicode)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;internal&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; CeWriteFile(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hFile,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;byte&lt;/span&gt;[] lpBuffer,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nNumberOfbytesToWrite,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; lpNumberOfbytesWritten,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; lpOverlapped);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;rapi.dll&amp;quot;&lt;/span&gt;, CharSet = &lt;span style="color: #2b91af;"&gt;CharSet&lt;/span&gt;.Unicode)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;internal&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; CeSetFileTime(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hFile,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: blue;"&gt;long&lt;/span&gt; lpCreationTime,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: blue;"&gt;long&lt;/span&gt; lpLastAccessTime,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: blue;"&gt;long&lt;/span&gt; lpLastWriteTime);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; BUFFER_SIZE = 1024 * 5; &lt;span style="color: green;"&gt;// 5k transfer buffer&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; CREATE_ALWAYS = 2;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; ERROR_SUCCESS = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; FILE_ATTRIBUTE_NORMAL = 0x80;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;uint&lt;/span&gt; GENERIC_WRITE = 0x40000000;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; INVALID_HANDLE_VALUE = -1;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now let's wrap all those in a method called CopyToDevice(string localFile, string remoteFile). The localFile is the file located on the desktop and the remoteFile is the destination filename on the device.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt; CopyToDevice(&lt;span style="color: blue;"&gt;string&lt;/span&gt; localFile, &lt;span style="color: blue;"&gt;string&lt;/span&gt; remoteFile)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; rapi = CeRapiInit() == ERROR_SUCCESS;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!rapi)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; filePtr = CeCreateFile(remoteFile, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (filePtr == &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt;(INVALID_HANDLE_VALUE))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; localFileStream = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;FileStream&lt;/span&gt;(localFile, &lt;span style="color: #2b91af;"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="color: #2b91af;"&gt;FileAccess&lt;/span&gt;.Read))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; byteswritten = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; position = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; buffer = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;byte&lt;/span&gt;[BUFFER_SIZE];&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; bytesread = localFileStream.Read(buffer, position, BUFFER_SIZE);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;while&lt;/span&gt; (bytesread &amp;gt; 0)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; position += bytesread;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (CeWriteFile(filePtr, buffer, bytesread, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; byteswritten, 0) == ERROR_SUCCESS)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; bytesread = localFileStream.Read(buffer, 0, BUFFER_SIZE);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;catch&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; bytesread = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;finally&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CeRapiUninit();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;To use the code above you will have to know the full path of the file on the desktop. &lt;br /&gt;I hope you found this useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-6097183768724829755?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/6097183768724829755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=6097183768724829755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6097183768724829755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6097183768724829755'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/08/copying-files-from-desktop-to-device.html' title='Copying files from the Desktop to the Device using .NET'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-6095815715489791463</id><published>2010-07-29T07:47:00.011+02:00</published><updated>2010-07-29T08:24:56.007+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='32feet.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><title type='text'>Enumerating Bluetooth Devices from .NETCF</title><content type='html'>I recently had a project where I needed to send data to Bluetooth devices. The client applications where to run in several platforms, currently only J2ME (Nokia phones) and Windows Mobile phones. Windows Mobile actually offers a pretty decent Bluetooth stack but not all devices use this. One of the devices I needed to use used the Widcomm stack. Luckily, there is an open source project called &lt;a href="http://32feet.codeplex.com"&gt;32feet.NET&lt;/a&gt; which came in very handy for providing a layer over the 2 different stacks I use. The 32feet.NET library was also incredibly easy and fun to use. &lt;br /&gt;&lt;br /&gt;In this article I'd like to demonstrate how to enumerate Bluetooth devices using .NETCF and the 32feet.NET library. The following code will work on both Microsoft and Widcomm Bluetooth stacks:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Diagnostics;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; InTheHand.Net.Sockets;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; BluetoothSample&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Program&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Main()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;BluetoothDeviceInfo&lt;/span&gt;[] devices;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;BluetoothClient&lt;/span&gt; sdp = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BluetoothClient&lt;/span&gt;())&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; devices = sdp.DiscoverDevices();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;BluetoothDeviceInfo&lt;/span&gt; deviceInfo &lt;span style="color: blue;"&gt;in&lt;/span&gt; devices)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Debug&lt;/span&gt;.WriteLine(&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;&amp;quot;{0} ({1})&amp;quot;&lt;/span&gt;,deviceInfo.DeviceName, deviceInfo.DeviceAddress));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;An interesting thing I had to consider for this project was the CPU architecture or endianness of the device I'm running on and the device I'm sending data to. I needed to reverse the byte order of the numeric data I sent and received.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-6095815715489791463?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/6095815715489791463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=6095815715489791463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6095815715489791463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6095815715489791463'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/07/enumerating-bluetooth-devices-from.html' title='Enumerating Bluetooth Devices from .NETCF'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-6669003286060208652</id><published>2010-07-26T15:35:00.005+02:00</published><updated>2010-07-26T15:40:17.490+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='How to'/><title type='text'>Cropping an Image in .NETCF</title><content type='html'>I've seen some people ask how to crop an image in .NET Compact Framework in the community. Although the operation is pretty simple, I'll share a code snippet anyway.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Image&lt;/span&gt; Crop(&lt;span style="color: #2b91af;"&gt;Image&lt;/span&gt; image, &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt; bounds)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Image&lt;/span&gt; newImage = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt;(bounds.Width, bounds.Height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;Graphics&lt;/span&gt; g = &lt;span style="color: #2b91af;"&gt;Graphics&lt;/span&gt;.FromImage(newImage))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; g.DrawImage(image, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt;(0, 0, newImage.Width, newImage.Height), &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; bounds, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;GraphicsUnit&lt;/span&gt;.Pixel);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; newImage;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;What the code above does is to create a new image and draw part of the source image specified in the bounds to the new image.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-6669003286060208652?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/6669003286060208652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=6669003286060208652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6669003286060208652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/6669003286060208652'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/07/cropping-image-in-netcf.html' title='Cropping an Image in .NETCF'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-801787025464217927</id><published>2010-07-12T23:16:00.003+02:00</published><updated>2010-10-26T16:33:28.508+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><title type='text'>.NET Compact Framework 3.5 Data Driven Applications</title><content type='html'>I recently discovered a new book called .NET Compact Framework 3.5 Data Driven Applications. I've so far only read a few chapters but it seems like a promising book providing a lot of examples.&lt;br /&gt;&lt;br /&gt;Here's a downloadable free chapter :&lt;br /&gt;&lt;a href="http://www.packtpub.com/data-driven-applications-with-.net-compact-framework-3-5/book?utm_source=christian-helle.blogspot.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_003787"&gt;http://www.packtpub.com/data-driven-applications-with-.net-compact-framework-3-5/book?utm_source=christian-helle.blogspot.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_003787&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I plan to write a detailed review of the book once I'm done reading it&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-801787025464217927?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/801787025464217927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=801787025464217927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/801787025464217927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/801787025464217927'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/07/net-compact-framework-35-data-driven.html' title='.NET Compact Framework 3.5 Data Driven Applications'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-5663003056614670748</id><published>2010-05-17T14:49:00.034+02:00</published><updated>2010-05-17T20:57:02.158+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Transparent Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='How to'/><title type='text'>Themed Image Button in .NETCF</title><content type='html'>In this article I'd like to demonstrate how to create a themed image button control. I'll be using the same techniques in my previous article, &lt;a href="http://christian-helle.blogspot.com/2010/01/how-to-draw-textured-rounded-rectangle.html"&gt;How to draw a textured rounded rectangle&lt;/a&gt; and &lt;a href="http://christian-helle.blogspot.com/2010/01/semi-transparent-controls-in-netcf.html"&gt;Semi-Transparent Controls in .NETCF&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;First, we need to define our theme. We get the start and end gradient colors from alpha blending the SystemColors.Highlight color and Color.White&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Theme&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt; AlphaBlend(&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt; value1, &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt; value2, &lt;span style="color: blue;"&gt;int&lt;/span&gt; alpha)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; ialpha = 256 - alpha;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.FromArgb((value1.R * alpha) + (value2.R * ialpha) &amp;gt;&amp;gt; 8,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; (value1.G * alpha) + (value2.G * ialpha) &amp;gt;&amp;gt; 8,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; (value1.B * alpha) + (value2.B * ialpha) &amp;gt;&amp;gt; 8);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt; GradientLight&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; color = AlphaBlend(&lt;span style="color: #2b91af;"&gt;SystemColors&lt;/span&gt;.Highlight, &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.White, 100);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; AlphaBlend(&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.White, color, 50); ;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt; GradientDark&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; color = AlphaBlend(&lt;span style="color: #2b91af;"&gt;SystemColors&lt;/span&gt;.Highlight, &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.Black, 256);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; AlphaBlend(&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.White, color, 50); ;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We'll be using the &lt;a href="http://msdn.microsoft.com/en-us/library/aa453192.aspx"&gt;GradientFill&lt;/a&gt; method as well in this example. For this we need to define 2 structures, &lt;a href="http://msdn.microsoft.com/en-us/library/aa453818.aspx"&gt;TRIVERTEX&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/aa453193.aspx"&gt;GRADIENT_RECT&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;struct&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TRIVERTEX&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; x;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; y;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;ushort&lt;/span&gt; Red;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;ushort&lt;/span&gt; Green;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;ushort&lt;/span&gt; Blue;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;ushort&lt;/span&gt; Alpha;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; TRIVERTEX(&lt;span style="color: blue;"&gt;int&lt;/span&gt; x, &lt;span style="color: blue;"&gt;int&lt;/span&gt; y, &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt; color)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;span style="color: blue;"&gt;this&lt;/span&gt;(x, y, color.R, color.G, color.B, color.A)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; TRIVERTEX(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; x, &lt;span style="color: blue;"&gt;int&lt;/span&gt; y,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;ushort&lt;/span&gt; red, &lt;span style="color: blue;"&gt;ushort&lt;/span&gt; green, &lt;span style="color: blue;"&gt;ushort&lt;/span&gt; blue,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;ushort&lt;/span&gt; alpha)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.x = x;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.y = y;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Red = (&lt;span style="color: blue;"&gt;ushort&lt;/span&gt;)(red &amp;lt;&amp;lt; 8);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Green = (&lt;span style="color: blue;"&gt;ushort&lt;/span&gt;)(green &amp;lt;&amp;lt; 8);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Blue = (&lt;span style="color: blue;"&gt;ushort&lt;/span&gt;)(blue &amp;lt;&amp;lt; 8);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Alpha = (&lt;span style="color: blue;"&gt;ushort&lt;/span&gt;)(alpha &amp;lt;&amp;lt; 8);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;struct&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;GRADIENT_RECT&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;uint&lt;/span&gt; UpperLeft;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;uint&lt;/span&gt; LowerRight;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; GRADIENT_RECT(&lt;span style="color: blue;"&gt;uint&lt;/span&gt; ul, &lt;span style="color: blue;"&gt;uint&lt;/span&gt; lr)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; UpperLeft = ul;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LowerRight = lr;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Using the 2 structures above we can now define our P/Invoke for GradientFill&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; GradientFill(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hdc, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;TRIVERTEX&lt;/span&gt;[] pVertex, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwNumVertex, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;GRADIENT_RECT&lt;/span&gt;[] pMesh, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwNumMesh, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwMode);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Let's wrap the P/Invoke call to GradientFill in a nice method&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; GRADIENT_FILL_RECT_V = 0x00000001;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; GradientFill(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Graphics&lt;/span&gt; graphics,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt; rect,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt; startColor,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt; endColor)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; tva = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TRIVERTEX&lt;/span&gt;[2];&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tva[0] = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TRIVERTEX&lt;/span&gt;(rect.X, rect.Y, startColor);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tva[1] = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TRIVERTEX&lt;/span&gt;(rect.Right, rect.Bottom, endColor);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; gra = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;GRADIENT_RECT&lt;/span&gt;[] { &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;GRADIENT_RECT&lt;/span&gt;(0, 1) };&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hdc = graphics.GetHdc();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GradientFill(hdc, tva, tva.Length, gra, gra.Length, GRADIENT_FILL_RECT_V);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.ReleaseHdc(hdc);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In order to use the function we need to create a few GDI objects: a Pen to draw the border, and a Brush to fill the rectangle. We will mostly use P/Invoke for creating and releasing GDI objects&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PS_SOLID = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PS_DASH = 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; CreatePen(&lt;span style="color: blue;"&gt;int&lt;/span&gt; fnPenStyle, &lt;span style="color: blue;"&gt;int&lt;/span&gt; nWidth, &lt;span style="color: blue;"&gt;uint&lt;/span&gt; crColor);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; SetBrushOrgEx(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hdc, &lt;span style="color: blue;"&gt;int&lt;/span&gt; nXOrg, &lt;span style="color: blue;"&gt;int&lt;/span&gt; nYOrg, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt; lppt);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; CreateSolidBrush(&lt;span style="color: blue;"&gt;uint&lt;/span&gt; color);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; SelectObject(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hdc, &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hgdiobject);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; DeleteObject(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hgdiobject);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; CreatePatternBrush(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; HBITMAP);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; RoundRect(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hdc, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nLeftRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nTopRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nRightRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nBottomRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nWidth, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nHeight);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We'll draw a textured rounded rectangle with a gradient fill that uses the current theme's Highlight color as the base color.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; DrawThemedGradientRectangle(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Graphics&lt;/span&gt; graphics,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Pen&lt;/span&gt; border,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt; area,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Size&lt;/span&gt; ellipseSize)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; texture = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt;(area.Right, area.Bottom))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; g = &lt;span style="color: #2b91af;"&gt;Graphics&lt;/span&gt;.FromImage(texture))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GradientFill(g, area, &lt;span style="color: #2b91af;"&gt;Theme&lt;/span&gt;.GradientLight, &lt;span style="color: #2b91af;"&gt;Theme&lt;/span&gt;.GradientDark);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FillRoundedTexturedRectangle(graphics, border, texture, area, ellipseSize);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; CreateGdiPen(&lt;span style="color: #2b91af;"&gt;Pen&lt;/span&gt; pen)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; style = pen.DashStyle == &lt;span style="color: #2b91af;"&gt;DashStyle&lt;/span&gt;.Solid ? PS_SOLID : PS_DASH;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; CreatePen(style, (&lt;span style="color: blue;"&gt;int&lt;/span&gt;)pen.Width, GetColorRef(pen.Color));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; FillRoundedTexturedRectangle(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Graphics&lt;/span&gt; graphics,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Pen&lt;/span&gt; border,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt; texture,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt; rect,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Size&lt;/span&gt; ellipseSize)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt; old = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hdc = graphics.GetHdc();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hpen = CreateGdiPen(border);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hbitmap = texture.GetHbitmap();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hbrush = CreatePatternBrush(hbitmap);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetBrushOrgEx(hdc, rect.Left, rect.Top, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; old);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject(hdc, hpen);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject(hdc, hbrush);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RoundRect(hdc, rect.Left, rect.Top, rect.Right, rect.Bottom, ellipseSize.Width, ellipseSize.Height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetBrushOrgEx(hdc, old.Y, old.X, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; old);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeleteObject(hpen);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeleteObject(hbrush);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.ReleaseHdc(hdc);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Let's wrap all the code above as extension methods to the Graphics class and use them in our owner drawn button control. A button control is one of the easiest owner drawn controls to create. Let's keep it as simple as possible and only have 2 states for our button: pressed and not pressed.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ThemedImageButton&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;Control&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; pushed = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt; image;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt; offScreen;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt; Image&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; image; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; image = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Invalidate();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnResize(&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnResize(e);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (offScreen != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; offScreen.Dispose();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; offScreen = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; offScreen = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt;(ClientSize.Width, ClientSize.Height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnPaint(&lt;span style="color: #2b91af;"&gt;PaintEventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (offScreen == &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; offScreen = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt;(ClientSize.Width, ClientSize.Height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; attributes = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ImageAttributes&lt;/span&gt;())&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; g = &lt;span style="color: #2b91af;"&gt;Graphics&lt;/span&gt;.FromImage(offScreen))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (pushed)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; pen = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Pen&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;SystemColors&lt;/span&gt;.Highlight))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; g.DrawThemedGradientRectangle(pen, ClientRectangle, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Size&lt;/span&gt;(4, 4));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; g.Clear(Parent.BackColor);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; textSize = g.MeasureString(Text, Font);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; textArea = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;RectangleF&lt;/span&gt;(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (ClientSize.Width - textSize.Width) / 2,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (ClientSize.Height - textSize.Height),&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textSize.Width,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textSize.Height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (Image != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; imageArea = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt;(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (ClientSize.Width - Image.Width) / 2,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (ClientSize.Height - Image.Height) / 2,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Image.Width,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Image.Height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; key = Image.GetPixel(0, 0);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; attributes.SetColorKey(key, key);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; g.DrawImage(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Image,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; imageArea,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0, 0, Image.Width, Image.Height,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;GraphicsUnit&lt;/span&gt;.Pixel,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; attributes);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; brush = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SolidBrush&lt;/span&gt;(ForeColor))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; g.DrawString(Text, Font, brush, textArea);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (pushed)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; key = offScreen.GetPixel(0, 0);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; attributes.SetColorKey(key, key);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; attributes.ClearColorKey();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.Graphics.DrawImage(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; offScreen,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ClientRectangle,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0, 0, offScreen.Width, offScreen.Height,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;GraphicsUnit&lt;/span&gt;.Pixel,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; attributes);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnPaintBackground(&lt;span style="color: #2b91af;"&gt;PaintEventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnMouseDown(&lt;span style="color: #2b91af;"&gt;MouseEventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnMouseDown(e);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pushed = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Invalidate();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnMouseUp(&lt;span style="color: #2b91af;"&gt;MouseEventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnMouseUp(e);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pushed = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Invalidate();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnParentChanged(&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnParentChanged(e);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Invalidate();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnTextChanged(&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnTextChanged(e);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Invalidate();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I hope you found this useful. If you're interested in the full source code then you can grab it &lt;a href="http://cid-ca531e7fb4762c70.skydrive.live.com/self.aspx/Code%20Samples/ThemedRoundedRectangle.zip"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-5663003056614670748?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/5663003056614670748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=5663003056614670748' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/5663003056614670748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/5663003056614670748'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/05/themed-image-button-in-netcf.html' title='Themed Image Button in .NETCF'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-5976418551323130243</id><published>2010-04-29T13:02:00.032+02:00</published><updated>2010-04-29T19:32:31.886+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RAPI'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='How to'/><title type='text'>How to enumerate files on a Windows CE based device from the Desktop</title><content type='html'>In this article I'd like to demonstrate how to enumerate files on a Windows CE based device from the desktop. &lt;br /&gt;&lt;br /&gt;Listing the contents of a directly on a Windows CE from the desktop is something I found to be useful every now and then. It involves using the &lt;a href="http://msdn.microsoft.com/en-us/library/aa920177.aspx"&gt;Remote API&lt;/a&gt; and ActiveSync / Windows Mobile Device Center&lt;br /&gt;&lt;br /&gt;As usual this will involve a few P/Invokes:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;rapi.dll&amp;quot;&lt;/span&gt;, CharSet = &lt;span style="color: #2b91af;"&gt;CharSet&lt;/span&gt;.Unicode)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; CeRapiInit();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;rapi.dll&amp;quot;&lt;/span&gt;, CharSet = &lt;span style="color: #2b91af;"&gt;CharSet&lt;/span&gt;.Unicode)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; CeRapiUninit();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;rapi.dll&amp;quot;&lt;/span&gt;, CharSet = &lt;span style="color: #2b91af;"&gt;CharSet&lt;/span&gt;.Unicode)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; CeFindFirstFile(&lt;span style="color: blue;"&gt;string&lt;/span&gt; lpFileName, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CE_FIND_DATA&lt;/span&gt; lpFindFileData);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;rapi.dll&amp;quot;&lt;/span&gt;, CharSet = &lt;span style="color: #2b91af;"&gt;CharSet&lt;/span&gt;.Unicode)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; CeFindNextFile(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hFindFile, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CE_FIND_DATA&lt;/span&gt; lpFindFileData);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;rapi.dll&amp;quot;&lt;/span&gt;, CharSet = &lt;span style="color: #2b91af;"&gt;CharSet&lt;/span&gt;.Unicode)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; CeFindClose(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hFindFile);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We also need the &lt;a href="http://msdn.microsoft.com/en-us/library/aa917196.aspx"&gt;CE_FIND_DATA&lt;/a&gt; structure&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;StructLayout&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;LayoutKind&lt;/span&gt;.Sequential, CharSet = &lt;span style="color: #2b91af;"&gt;CharSet&lt;/span&gt;.Unicode)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;struct&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CE_FIND_DATA&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwFileAttributes;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;FILETIME&lt;/span&gt; ftCreationTime;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;FILETIME&lt;/span&gt; ftLastAccessTime;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;FILETIME&lt;/span&gt; ftLastWriteTime;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nFileSizeHigh;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nFileSizeLow;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwOID;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;UnmanagedType&lt;/span&gt;.ByValTStr, SizeConst = 260)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; cFileName;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;};&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;StructLayout&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;LayoutKind&lt;/span&gt;.Sequential)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;struct&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;FILETIME&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwLowDateTime;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwHighDateTime;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/aa922061.aspx"&gt;CeRapiInit&lt;/a&gt; method has be always called before performing Remote API operations. Once done, the &lt;a href="http://msdn.microsoft.com/en-us/library/aa918093.aspx"&gt;CeRapiUninit&lt;/a&gt; must be called. For listing the files in a directory, I use &lt;a href="http://msdn.microsoft.com/en-us/library/aa917424.aspx"&gt;CeFindFirstFile&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/aa918923.aspx"&gt;CeFindNextFile&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/aa917593.aspx"&gt;CeFindClose&lt;/a&gt;. How this works: If the file(s) exists CeFindFirstFile will return a valid handle that can be used for calling CeFindNextFile. After going through all the files CeFindNextFile will return false and a call to CeFindClose needs to be called.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;[] GetFiles(&lt;span style="color: blue;"&gt;string&lt;/span&gt; remoteDirectory)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CeRapiInit();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; list = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; findData = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CE_FIND_DATA&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hFindFile = CeFindFirstFile(remoteDirectory + &lt;span style="color: #a31515;"&gt;&amp;quot;\\*&amp;quot;&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; findData);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (hFindFile != &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt;(-1))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;do&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (findData.dwFileAttributes != (&lt;span style="color: blue;"&gt;int&lt;/span&gt;)&lt;span style="color: #2b91af;"&gt;FileAttributes&lt;/span&gt;.Directory)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; list.Add(findData.cFileName);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;span style="color: blue;"&gt;while&lt;/span&gt; (CeFindNextFile(hFindFile, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; findData));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;finally&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CeFindClose(hFindFile);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; list.ToArray();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;finally&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CeRapiUninit();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I hope you found this useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-5976418551323130243?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/5976418551323130243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=5976418551323130243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/5976418551323130243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/5976418551323130243'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/04/how-to-enumerate-files-on-windows-ce.html' title='How to enumerate files on a Windows CE based device from the Desktop'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-7170025817190813789</id><published>2010-01-27T07:41:00.039+01:00</published><updated>2010-01-27T08:52:50.629+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='How to'/><title type='text'>How to draw a textured rounded rectangle in .NETCF</title><content type='html'>I'd like to demonstrate how to draw patterned rounded rectangles by P/Invoking the GDI function &lt;a href="http://msdn.microsoft.com/en-us/library/aa929212.aspx"&gt;RoundRect&lt;/a&gt; using a patterned brush instead of a solid brush. Let's create an extension method called FillRoundedTexturedRectangle to the Graphics class. With this method we can fill rectangles with an image. This image will be drawn as tiles to fill the rectangle bounds. This method can come in handy for drawing complex textures or patterns into a rectangle. With a little alpha blending and gradient fills, one can achieve a modern glass effect in the user interface&lt;br /&gt;&lt;br /&gt;We create our brush with the &lt;a href="http://msdn.microsoft.com/en-us/library/ms908179.aspx"&gt;CreatePatternBrush&lt;/a&gt; function instead of &lt;a href="http://msdn.microsoft.com/en-us/library/ms959979.aspx"&gt;CreateSolidBrush&lt;/a&gt; as we did in my previous article on &lt;a href="http://christian-helle.blogspot.com/2010/01/how-to-draw-rounded-rectangle-in-netcf.html"&gt;How to draw a rounded rectangle in .NETCF&lt;/a&gt;. We will mostly use P/Invoke for creating and releasing GDI objects.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PS_SOLID = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PS_DASH = 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; CreatePen(&lt;span style="color: blue;"&gt;int&lt;/span&gt; fnPenStyle, &lt;span style="color: blue;"&gt;int&lt;/span&gt; nWidth, &lt;span style="color: blue;"&gt;uint&lt;/span&gt; crColor);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; SetBrushOrgEx(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hdc, &lt;span style="color: blue;"&gt;int&lt;/span&gt; nXOrg, &lt;span style="color: blue;"&gt;int&lt;/span&gt; nYOrg, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; Point lppt);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; SelectObject(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hdc, &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hgdiobject);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; DeleteObject(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hObject);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; CreatePatternBrush(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hbmp);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; RoundRect(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hdc, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nLeftRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nTopRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nRightRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nBottomRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nWidth, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nHeight);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;uint&lt;/span&gt; GetColorRef(Color value)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; 0x00000000 | ((&lt;span style="color: blue;"&gt;uint&lt;/span&gt;)value.B &amp;lt;&amp;lt; 16) | ((&lt;span style="color: blue;"&gt;uint&lt;/span&gt;)value.G &amp;lt;&amp;lt; 8) | (&lt;span style="color: blue;"&gt;uint&lt;/span&gt;)value.R;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now we have our P/Invoke definitions in place we can neatly wrap all P/Invoke operations in a single function and let's call that FillRoundedTexturedRectangle()&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; FillRoundedTexturedRectangle(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Graphics&lt;/span&gt; graphics,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Pen&lt;/span&gt; border,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt; texture,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt; rectangle,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Size&lt;/span&gt; ellipseSize)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; lppt = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hdc = graphics.GetHdc();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; style = border.DashStyle == &lt;span style="color: #2b91af;"&gt;DashStyle&lt;/span&gt;.Solid ? PS_SOLID : PS_DASH;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hpen = CreatePen(style, (&lt;span style="color: blue;"&gt;int&lt;/span&gt;)border.Width, GetColorRef(border.Color));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hbrush = CreatePatternBrush(texture.GetHbitmap());&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SetBrushOrgEx(hdc, rectangle.Left, rectangle.Top, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; lppt);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject(hdc, hpen);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject(hdc, hbrush);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RoundRect(hdc,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; rectangle.Left,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; rectangle.Top,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; rectangle.Right,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; rectangle.Bottom,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; ellipseSize.Width,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; ellipseSize.Height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;finally&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SetBrushOrgEx(hdc, lppt.Y, lppt.X, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; lppt);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DeleteObject(hpen);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DeleteObject(hbrush);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.ReleaseHdc(hdc);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;To use this extension method you need to create a Bitmap and a Pen. The pen will be used to draw the rounded border, and the Bitmap will be used as a fill (tiled). Here's an example where "e" is an instance of PaintEventArgs&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; pen = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Pen&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;SystemColors&lt;/span&gt;.Highlight, 5))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; texture = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Bitmap&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;@&amp;quot;\windows\msn.gif&amp;quot;&lt;/span&gt;))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Graphics.FillRoundedTexturedRectangle(pen, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; texture, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ClientRectangle, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Size&lt;/span&gt;(8, 8));&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I hope you found this useful. If you're interested in the full source code then you can grab it &lt;a href="http://cid-ca531e7fb4762c70.skydrive.live.com/self.aspx/Code%20Samples/TexturedRoundedRectangle.cs"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-7170025817190813789?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/7170025817190813789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=7170025817190813789' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/7170025817190813789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/7170025817190813789'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/01/how-to-draw-textured-rounded-rectangle.html' title='How to draw a textured rounded rectangle in .NETCF'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-5297336445844260040</id><published>2010-01-25T22:29:00.035+01:00</published><updated>2010-01-25T23:25:45.390+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='How to'/><title type='text'>How to draw a rounded rectangle in .NETCF</title><content type='html'>In this short article I'd like to demonstrate how to draw rounded rectangles by P/Invoking the GDI function &lt;a href="http://msdn.microsoft.com/en-us/library/aa929212.aspx"&gt;RoundRect&lt;/a&gt;. Let's create an extension method called FillRoundedRectangle to the Graphics class.&lt;br /&gt;&lt;br /&gt;In order to use the function we need to create a few GDI objects: a Pen to draw the border, and a Brush to fill the rectangle. We will mostly use P/Invoke for creating and releasing GDI objects&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PS_SOLID = 0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PS_DASH = 1;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; CreatePen(&lt;span style="color: blue;"&gt;int&lt;/span&gt; fnPenStyle, &lt;span style="color: blue;"&gt;int&lt;/span&gt; nWidth, &lt;span style="color: blue;"&gt;uint&lt;/span&gt; crColor);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; SetBrushOrgEx(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hdc, &lt;span style="color: blue;"&gt;int&lt;/span&gt; nXOrg, &lt;span style="color: blue;"&gt;int&lt;/span&gt; nYOrg, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt; lppt);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; CreateSolidBrush(&lt;span style="color: blue;"&gt;uint&lt;/span&gt; color);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; SelectObject(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hdc, &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hgdiobject);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; DeleteObject(&lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hgdiobject);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; RoundRect(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;IntPtr&lt;/span&gt; hdc, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nLeftRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nTopRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nRightRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nBottomRect, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nWidth, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; nHeight);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The CreateSolidBrush function in native code actually takes a &lt;a href="http://msdn.microsoft.com/en-us/library/aa923096.aspx"&gt;COLORREF&lt;/a&gt; parameter, and the developer would normally use the &lt;a href="http://msdn.microsoft.com/en-us/library/aa927387.aspx"&gt;RGB&lt;/a&gt; macro to create it. We need to translate that macro into a .NET function&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;uint&lt;/span&gt; GetColorRef(&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt; value)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; 0x00000000 | ((&lt;span style="color: blue;"&gt;uint&lt;/span&gt;)value.B &amp;lt;&amp;lt; 16) | ((&lt;span style="color: blue;"&gt;uint&lt;/span&gt;)value.G &amp;lt;&amp;lt; 8) | (&lt;span style="color: blue;"&gt;uint&lt;/span&gt;)value.R;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now we have our P/Invoke definitions in place we can neatly wrap all P/Invoke operations in a single function and let's call that FillRoundedRectangle()&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; FillRoundedRectangle(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Graphics&lt;/span&gt; graphics,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Pen&lt;/span&gt; border,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt; color,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt; rectangle,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Size&lt;/span&gt; ellipseSize)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; lppt = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Point&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hdc = graphics.GetHdc();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; style = border.DashStyle == &lt;span style="color: #2b91af;"&gt;DashStyle&lt;/span&gt;.Solid ? PS_SOLID : PS_DASH;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hpen = CreatePen(style, (&lt;span style="color: blue;"&gt;int&lt;/span&gt;)border.Width, GetColorRef(border.Color));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; hbrush = CreateSolidBrush(GetColorRef(color));&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SetBrushOrgEx(hdc, rectangle.Left, rectangle.Top, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; lppt);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject(hdc, hpen);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject(hdc, hbrush);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RoundRect(hdc, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; rectangle.Left, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; rectangle.Top, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; rectangle.Right, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; rectangle.Bottom, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; ellipseSize.Width, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; ellipseSize.Height);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;finally&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SetBrushOrgEx(hdc, lppt.Y, lppt.X, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; lppt);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DeleteObject(hpen);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DeleteObject(hbrush);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; graphics.ReleaseHdc(hdc);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Using this extension method should be straight forward, but here's an example where "e" is an instance of PaintEventArgs:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; pen = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Pen&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.Blue))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Graphics.FillRoundedRectangle(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pen, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.LightBlue, &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Rectangle&lt;/span&gt;(10, 10, 100, 100), &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Size&lt;/span&gt;(16, 16));&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I hope you found this useful. If you're interested in the full source code then you can grab it &lt;a href="http://cid-ca531e7fb4762c70.skydrive.live.com/self.aspx/Code%20Samples/RoundedRectangle.cs"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-5297336445844260040?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/5297336445844260040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=5297336445844260040' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/5297336445844260040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/5297336445844260040'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/01/how-to-draw-rounded-rectangle-in-netcf.html' title='How to draw a rounded rectangle in .NETCF'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-3750251679799100524</id><published>2010-01-24T22:06:00.003+01:00</published><updated>2010-01-24T22:14:42.057+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodePlex'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><title type='text'>Pocket News - Newsgroup reader for Windows Mobile</title><content type='html'>A few of you who know me probably have seen me from the Mobility community, MSDN Forums or the Newsgroups. I love helping out in the Newsgroups, I had so much fun doing so that I needed an application where I can do so while I'm on the go. Being the nerd that I am, my first reaction to this was that I needed to write a mobile newsgroup reader. I actually did before ever checking that a few of them already existed! Oh well, it was fun to write. I used the application a lot, especially while waiting in the airport, or for the train, or wherever that time feels like it stopped. &lt;br /&gt;&lt;br /&gt;I decided to share this application to the public and publish it on CodePlex. If you're interested in the source code or if you want to contribute to the project then check it out at &lt;a href="http://pocketnews.codeplex.com/"&gt;http://pocketnews.codeplex.com&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;Unfortunately the application misses some basic features that any messaging application should have like a drafts folder. Maybe some day I can pull myself together to finish it up, or maybe some one out there who loves the Newsgroups just as much as I do would want to contribute some time and code :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-3750251679799100524?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/3750251679799100524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=3750251679799100524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/3750251679799100524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/3750251679799100524'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/01/pocket-news-newsgroup-reader-for.html' title='Pocket News - Newsgroup reader for Windows Mobile'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-3550012131032276021</id><published>2010-01-24T21:59:00.004+01:00</published><updated>2010-01-24T22:05:57.686+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server Compact Edition'/><category scheme='http://www.blogger.com/atom/ns#' term='CodePlex'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><title type='text'>SQLCE Code Generator</title><content type='html'>Some time ago, I started a hobby project for generating data access layer code for SQL Compact Edition databases. I managed to get as far as creating a custom tool and generating a code behind data access layer file (currently only in C#) for every table in the database.&lt;br /&gt;&lt;br /&gt;I'm having a bit of a hard time finding the time to work on the project so I published it on CodePlex. If you're interested in the source code or if you want to contribute to the project then check it out at &lt;a href="http://sqlcecodegen.codeplex.com/"&gt;http://sqlcecodegen.codeplex.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4995334164049002857-3550012131032276021?l=christian-helle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://christian-helle.blogspot.com/feeds/3550012131032276021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4995334164049002857&amp;postID=3550012131032276021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/3550012131032276021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4995334164049002857/posts/default/3550012131032276021'/><link rel='alternate' type='text/html' href='http://christian-helle.blogspot.com/2010/01/sqlce-code-generator.html' title='SQLCE Code Generator'/><author><name>Christian Resma Helle</name><uri>http://www.blogger.com/profile/16521776612083091477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh4.google.com/image/xtianism/RQ0OmqXwABI/AAAAAAAAAPU/tmxhhte2xYo/STA70096.JPG?imgdl=1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4995334164049002857.post-9155466612543890030</id><published>2010-01-20T13:01:00.036+01:00</published><updated>2010-01-20T14:22:23.637+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Native Code'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='How to'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>How to toggle the Wi-fi radio</title><content type='html'>I had a task to complete today where I was to create an application to toggle the Wi-Fi radio. I had two major requirements for this task; I was supposed to not spend more an hour on this and it must run on older devices running Pocket PC 2003 (or older)&lt;br /&gt;&lt;br /&gt;This is what I came up with, 1 function (the entry point) and it uses only 3 power management API calls; &lt;a href="http://msdn.microsoft.com/en-us/library/ms889220.aspx"&gt;GetDevicePower&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms896927.aspx"&gt;DevicePowerNotify&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/ms889493.aspx"&gt;SetDevicePower&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Basically I spent most of the time finding the device name for the wireless device. It seems to be pretty used for Intermec devices as I tested it on 3 different devices (or it could also be that only those 3 devices used the same device name)&lt;br /&gt;&lt;br /&gt;Anyway, here's the code (works only for Intermec devices):&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;#include&lt;/span&gt; &lt;span style="color: #a31515;"&gt;&amp;lt;windows.h&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;#include&lt;/span&gt; &lt;span style="color: #a31515;"&gt;&amp;lt;pm.h&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;#define&lt;/span&gt; INTERMEC_WIFI_DEVICE&amp;nbsp;&amp;nbsp;&amp;nbsp; L&lt;span style="color: #a31515;"&gt;&amp;quot;{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\BCMCF1&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt; _tmain(&lt;span style="color: blue;"&gt;int&lt;/span&gt; argc, _TCHAR* argv[])&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CEDEVICE_POWER_STATE state;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDevicePower(INTERMEC_WIFI_DEVICE, POWER_NAME, &amp;amp;state);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CEDEVICE_POWER_STATE newState = (state == D0) ? D4 : D0;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DevicePowerNotify(INTERMEC_WIFI_DEVICE, newState, POWER_NAME);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetDevicePower(INTERMEC_WIFI_DEVICE, POWER_NAME, newState);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Normally when I experiment with the platform SDK, I just create native console applications and test how the function works. Since my application was simple and didn't need a UI, I just shipped it in native code.&lt;br /&gt;&lt;br /&gt;But for the sake of sharing knowledge I ported my tiny application to the .NET Compact Framework. Here's the code (works only for Intermec devices):&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Fixedsys; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;, SetLastError = &lt;span style="color: blue;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; DevicePowerNotify(&lt;span style="color: blue;"&gt;string&lt;/span&gt; name, &lt;span style="color: #2b91af;"&gt;CEDEVICE_POWER_STATE&lt;/span&gt; state, &lt;span style="color: blue;"&gt;int&lt;/span&gt; flags);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;, SetLastError = &lt;span style="color: blue;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; SetDevicePower(&lt;span style="color: blue;"&gt;string&lt;/span&gt; pvDevice, &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwDeviceFlags, &lt;span style="color: #2b91af;"&gt;CEDEVICE_POWER_STATE&lt;/span&gt; DeviceState);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;[&lt;span style="color: #2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;, SetLastError = &lt;span style="color: blue;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;extern&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; GetDevicePower(&lt;span style="color: blue;"&gt;string&lt;/span&gt; pvDevice, &lt;span style="color: blue;"&gt;int&lt;/span&gt; dwDeviceFlags, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CEDEVICE_POWER_STATE&lt;/span&gt; pDeviceState);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;CEDEVICE_POWER_STATE&lt;/span&gt; : &lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PwrDeviceUnspecified = -1,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; D0 = 0,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; D1 = 1,&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp
