<?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:blogger='http://schemas.google.com/blogger/2008' 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-4366671410070576626</id><updated>2026-03-22T03:24:14.697-03:00</updated><category term=".Net CF"/><category term="GUI"/><category term="Best practices"/><category term="samples"/><category term="tools"/><category term="news"/><category term="Blocks"/><category term="general"/><category term="Unit Testing"/><category term="deployment"/><category term="optimizations"/><category term="gac"/><category term="panorama app"/><category term="OAC"/><category term="custom controls"/><category term="worldcup"/><category term="CabWizFixer"/><category term="Fleux"/><category term="training"/><category term="DTPT"/><category term="WMDC"/><category term="activesync"/><category term="connectivity"/><category term="internet"/><category term="version"/><title type='text'>Mobile PractiCEs</title><subtitle type='html'>Here you can find best practices and advice for .Net CF and Windows Mobile development.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-7591655612856602579</id><published>2011-07-08T11:00:00.001-03:00</published><updated>2011-07-08T11:00:15.655-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="Fleux"/><category scheme="http://www.blogger.com/atom/ns#" term="general"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><category scheme="http://www.blogger.com/atom/ns#" term="panorama app"/><title type='text'>Fleux-powered KitchenPal won second prize in Microsoft embeddedSPARK competition</title><content type='html'>&lt;p&gt;Congrats to &lt;a href=&quot;http://embeddedlounge.blogspot.com/&quot; target=&quot;_blank&quot;&gt;Gianni Rosa Gallina&lt;/a&gt; for a fantastic project called “KitchenPal”. It won the second prize in the latest version of the former “Sparks Will Fly” contest, created by Microsoft aiming academics, developers and hobbyists currently called &lt;a href=&quot;http://www.microsoft.com/Presspass/Features/2011/jun11/WENC06-24EmbeddedSpark.mspx&quot; target=&quot;_blank&quot;&gt;embeddedSPARK&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Gianni did a great work making &lt;a href=&quot;http://fleux.codeplex.com&quot; target=&quot;_blank&quot;&gt;Fleux&lt;/a&gt; work in a Windows Embedded Compact 7 device, adding some great controls and features, and what is even better, his &lt;strong&gt;KitchenPal &lt;/strong&gt;project looks pretty amazing. Watch the video&lt;/p&gt; &lt;object width=&quot;425&quot; height=&quot;349&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/TEGlY4wAkAs?version=3&amp;amp;hl=en_US&amp;amp;rel=0&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/TEGlY4wAkAs?version=3&amp;amp;hl=en_US&amp;amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;425&quot; height=&quot;349&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p&gt;Sources:   &lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/Presspass/Features/2011/jun11/WENC06-24EmbeddedSpark.mspx&quot;&gt;http://www.microsoft.com/Presspass/Features/2011/jun11/WENC06-24EmbeddedSpark.mspx&lt;/a&gt;    &lt;br /&gt;&lt;a href=&quot;http://www.windowsfordevices.com/c/a/News/Microsoft-announces-winners-in-embeddedSPARK-2011-competition/&quot;&gt;http://www.windowsfordevices.com/c/a/News/Microsoft-announces-winners-in-embeddedSPARK-2011-competition/&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/7591655612856602579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/7591655612856602579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/7591655612856602579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/7591655612856602579'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2011/07/fleux-powered-kitchenpal-won-second.html' title='Fleux-powered KitchenPal won second prize in Microsoft embeddedSPARK competition'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-2788731475569456010</id><published>2010-11-16T16:42:00.001-03:00</published><updated>2010-11-16T16:43:04.445-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="Blocks"/><category scheme="http://www.blogger.com/atom/ns#" term="custom controls"/><category scheme="http://www.blogger.com/atom/ns#" term="Fleux"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><category scheme="http://www.blogger.com/atom/ns#" term="panorama app"/><category scheme="http://www.blogger.com/atom/ns#" term="samples"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><category scheme="http://www.blogger.com/atom/ns#" term="worldcup"/><title type='text'>Fleux is coming. Video Preview</title><content type='html'>&lt;p&gt;Fleux.Net is a new open source project I published in &lt;a href=&quot;http://www.codeplex.com/&quot;&gt;CodePlex&lt;/a&gt;, the open source portal from Microsoft. It includes some of the UX elements I was working on recently, and it’s also an evolution of the UI engine I used for the world cup app.&lt;/p&gt;  &lt;p&gt;For further information, you can go to the project portal at &lt;a href=&quot;http://fleux.codeplex.com/&quot;&gt;http://fleux.codeplex.com/&lt;/a&gt; and play with the latest &lt;a href=&quot;http://fleux.codeplex.com/SourceControl/list/changesets&quot;&gt;source code&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;It’s a .Net Compact Framework &lt;strong&gt;c# &lt;/strong&gt;development initiative, where I’m trying to share some of my UI dev experience with other Windows Mobile developers.&lt;/p&gt;  &lt;p&gt;Fleux is coming. If you want to contribute to the project, or if you want to use Fleux to power your project UI, feel free to contact me at&amp;#160; &lt;a href=&quot;mailto:jose@mobilepractices.net&quot;&gt;jose@mobilepractices.net&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Do you want to be part of it?&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:6d84d3df-5b68-499a-b4ed-31f2662a4e12&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;&lt;div id=&quot;f23d6fd0-fced-43e4-a148-f495a26d718a&quot; style=&quot;margin: 0px; padding: 0px; display: inline;&quot;&gt;&lt;div&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=Q4iXmKc_MqQ&amp;amp;feature=youtube_gdata_player&quot; target=&quot;_new&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXUq_I4jLuUvRh0TuCqwH1eCmDgof4R9HpDpiYRyjOehpVqCtkz68IwQ9iOcOPZylbURNLgdD-saS-3AEalCVdIIv231ihyphenhyphenZdfKGDUl4NijgYxsUyt7OWwaPeAEMTZhqIR10bHqmYR418/?imgmax=800&quot; style=&quot;border-style: none&quot; galleryimg=&quot;no&quot; onload=&quot;var downlevelDiv = document.getElementById(&#39;f23d6fd0-fced-43e4-a148-f495a26d718a&#39;); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;436\&amp;quot; height=\&amp;quot;245\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/Q4iXmKc_MqQ?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/Q4iXmKc_MqQ?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;436\&amp;quot; height=\&amp;quot;245\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;width:436px;clear:both;font-size:.8em&quot;&gt;Fleux sample app running on HTC HD2&lt;/div&gt;&lt;/div&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/2788731475569456010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/2788731475569456010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/2788731475569456010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/2788731475569456010'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2010/11/fleux-is-coming-video-preview.html' title='Fleux is coming. Video Preview'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-2301273604494199497</id><published>2010-10-22T16:37:00.001-03:00</published><updated>2010-10-22T16:37:22.414-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="general"/><title type='text'>Welcome Franco!</title><content type='html'>&lt;p&gt;I know it’s not new if I say that I was very busy lately. But this time my typical “free time” was occupied by what is the most important part of my life: my family. My second son, Franco, was born on October, 8th, and we all: his mom, his brother, and of course his dad, are extremely happy with the new member.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghIx7ebSnFVYLBwiypmxq7AUQSLrrfdKEvJVRmH5nNqZc6pTat42inTh0ONzWcMW3hmrSq5vVUuPrsu961c5fsvfdBo4eGhJMp9DNgeNgsCTg8PqbSaNeWNyz_xgYINgdbKbhGGf9FwN4/s1600-h/Franco%5B7%5D.jpg&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Franco&quot; border=&quot;0&quot; alt=&quot;Franco&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwfSIODI-wreamZSTXGfOBuN0Yw59x-Alyql6SNbTEjA3qh5P6kL7Jy-6-n7vSOpf7d9tdTcp-vut-tbM9VqYjPtjDBEPJCIHWDCDdgGhaznPGuCRYY1Kp69ZYCtXBx0NY7_1icufpdxc/?imgmax=800&quot; width=&quot;460&quot; height=&quot;322&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Thank you Franco for making all of us so happy!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/2301273604494199497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/2301273604494199497' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/2301273604494199497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/2301273604494199497'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2010/10/welcome-franco.html' title='Welcome Franco!'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwfSIODI-wreamZSTXGfOBuN0Yw59x-Alyql6SNbTEjA3qh5P6kL7Jy-6-n7vSOpf7d9tdTcp-vut-tbM9VqYjPtjDBEPJCIHWDCDdgGhaznPGuCRYY1Kp69ZYCtXBx0NY7_1icufpdxc/s72-c?imgmax=800" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-3234284283401548574</id><published>2010-06-03T22:46:00.001-03:00</published><updated>2010-06-24T23:31:09.817-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="custom controls"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="panorama app"/><category scheme="http://www.blogger.com/atom/ns#" term="samples"/><category scheme="http://www.blogger.com/atom/ns#" term="worldcup"/><title type='text'>World Cup 2010 Application for Windows Mobile: The panoramic UX proof of concept is here!</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEc4Wrfg1nfQJAX9bslWnHzSRljkbSWiWwiElwhQYxpHK0b9r3RWm002vcKpIAed3cCAAdZbr_E1h3FDUih0Fax1BL72ftaEzC-P1jiR771K0N01DOZuHhOu7KPejlrwe2ZY5SdBYcgTQ/s1600-h/worldcupapp%5B7%5D.jpg&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;worldcupapp&quot; border=&quot;0&quot; alt=&quot;worldcupapp&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0rpNse2OL4AUzsvNYCZRy3YJ_Vk8ckppbGXPRkZiAfnqAhj03m351V3xAtuu_91R-OqKnfOKejmE3hyphenhyphenQmc7IKNn_skwanTK_XWsXQjS8wBYWnm2lOyggCQ_LJsF_7Ua0IqAELNzR67l8/?imgmax=800&quot; width=&quot;469&quot; height=&quot;293&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I’m glad to introduce you this small &lt;strong&gt;World Cup 2010 application for Windows Mobile&lt;/strong&gt;, which has been entirely developed using the Compact Framework applying some UX concepts from Windows Phone 7 panoramic UI and spikes on fluent UI I recently worked on.&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:746fd2b7-3391-440a-a4b1-ff3e8c4e0cae&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;&lt;div id=&quot;d88595c8-966e-4425-9272-0355824b2cb8&quot; style=&quot;margin: 0px; padding: 0px; display: inline;&quot;&gt;&lt;div&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=XwZYtlG7ACk&amp;amp;hl=es_ES&amp;amp;fs=1&amp;amp;&quot; target=&quot;_new&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7HgEJdW5MD_IiaGvWjW7LbtJssNjxFzVZR0IdOeiS96getRebauBZbelSvCIsbz6BOeYMioaddW-h8wiLwUcIJ8XgCL3fZJvpKkdMUSAnu7NxdSRPBsW9gbUWoR1Pz2KX2v1YMJaim3M/?imgmax=800&quot; style=&quot;border-style: none&quot; galleryimg=&quot;no&quot; onload=&quot;var downlevelDiv = document.getElementById(&#39;d88595c8-966e-4425-9272-0355824b2cb8&#39;); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/XwZYtlG7ACk&amp;amp;hl=es_ES&amp;amp;fs=1&amp;amp;&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/XwZYtlG7ACk&amp;amp;hl=es_ES&amp;amp;fs=1&amp;amp;&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;This app requires a &lt;strong&gt;touch-screen &lt;/strong&gt;device with Windows Mobile and the &lt;strong&gt;Microsoft .Net Compact Framework 3.5&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;As &lt;strong&gt;&lt;u&gt;this is just a proof of concept&lt;/u&gt;&lt;/strong&gt;, you can download it &lt;strong&gt;&lt;u&gt;for free &lt;/u&gt;&lt;/strong&gt;following the links bellow:&lt;/p&gt;  &lt;h3&gt;New version v.0.3.beta available!&lt;/h3&gt;  &lt;h4&gt;English&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.CAB&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.CAB (252KB)&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.CAB.zip&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.CAB.ZIP (252KB)&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Español &lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.ES.CAB&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.ES.CAB (316KB)&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.ES.CAB.zip&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.ES.CAB.ZIP (316KB)&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Deutsch&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.DE.CAB&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.DE.CAB (316KB)&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.DE.CAB.zip&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.DE.CAB.ZIP (316KB)&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;&lt;/ul&gt;  &lt;h4&gt;Portuguese &lt;em&gt;(NEW!)&lt;/em&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.PT.CAB&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.PT.CAB (317KB)&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.PT.CAB.zip&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.PT.CAB.ZIP (317KB)&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;&lt;/ul&gt;  &lt;h4&gt;Brazilian Portuguese &lt;em&gt;(NEW!)&lt;/em&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.BR.CAB&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.BR.CAB (317KB)&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.BR.CAB.zip&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.BR.CAB.ZIP (317KB)&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Français &lt;em&gt;(NEW!)&lt;/em&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.FR.CAB&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.FR.CAB (317KB)&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.3.FR.CAB.zip&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.3.FR.CAB.ZIP (317KB)&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Chinese &lt;em&gt;(NEW!)&lt;/em&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.2.2.CN.CAB&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.2.2.CN.CAB (321KB)&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://downloads.mobilepractices.com/WorldCup/WorldCupInstaller.v.0.2.2.CN.CAB.zip&quot; target=&quot;_blank&quot;&gt;worldcupinstaller.v.0.2.2.CN.CAB.ZIP (321KB)&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Features&lt;/h4&gt;  &lt;p&gt;The features included are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;64 matches with detailed info which can be browsed by group, date or play off stage. &lt;/li&gt;    &lt;li&gt;8 Groups details. &lt;/li&gt;    &lt;li&gt;Play-offs chart &lt;/li&gt;    &lt;li&gt;Manual update on-line which will got the following:      &lt;ul&gt;       &lt;li&gt;World Cup news directly from the FIFA.Com News RSS feed, including pictures and links for full reading in your browser. &lt;/li&gt;        &lt;li&gt;Results for finished matches. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The application can run in almost any Windows Mobile 5.x, 6.x touch screen device. It automatically scales according to your screen size and resolution.&lt;/p&gt;  &lt;p&gt;I’ll continue posting about the technology around this app. Stay tuned!&lt;/p&gt;  &lt;h3&gt;Fixes on v.0.1:&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Fixes an issue while parsing dates on some localized versions of Windows Mobile (i.e. Danish, German ROMs) which was preventing the app to run. &lt;/li&gt;    &lt;li&gt;Recovery screen if any data inconsistence is detected after update. This is a very weird case, but the app will let you update and get a new set of data if needed. &lt;/li&gt;    &lt;li&gt;News screen support for longer text resizing accordingly. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Fixes on v.0.2.beta:&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;This version downloads the news directly from the Feeds sources, getting a faster connectivity and fresh information from FIFA.com. &lt;/li&gt;    &lt;li&gt;Calendar shows July 12th for time zones where the final match will be played that day. &lt;/li&gt;    &lt;li&gt;Small visual changes on Calendar. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Play-Offs: Fix on the games chart, which was showing a confusing wrong line-connection for Semi-Finals. The data was correct, but the lines were wrong. This version fixes that. &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;In some devices or orientations, the Play-offs chart was truncated. That issue is also fixed on this version. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Fixes on v.0.3.beta:&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;All the v.0.2.beta fixes/changes.&lt;/li&gt;    &lt;li&gt;This version doesn’t show the Recovery Page. &lt;/li&gt;    &lt;li&gt;Fixes an issue for v.0.2. on a clean installation when the Images folder wasn’t on the XmlData folder. &lt;/li&gt;    &lt;li&gt;Includes a new “Today section” allowing you to see the games for today at a glance. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Localization:&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;This version is published in &lt;strike&gt;four&lt;/strike&gt; &lt;strong&gt;seven&lt;/strong&gt; languages: English, Spanish, Portuguese, Brazilian Portuguese, French, Chinese and German. &lt;/li&gt;    &lt;li&gt;Let me say thanks to Marcus Bauer, Matthias Engler, Carlos Paulo, Ayrton Vasconcelos, Thomas Michiels, Nick Käser and Kenn Zhang for their help on translations.&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Quick Troubleshooting:&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;If the app crashes on your device, please email me (&lt;a href=&quot;mailto:jose@mobilepractices.net&quot;&gt;jose@mobilepractices.net&lt;/a&gt;) the “errorfound” file located on the xmlData folder. That file has the error log so I can see what the problem was. This file will be deleted if you have a successfully synchronization, so please make a copy before sync. &lt;/li&gt;    &lt;li&gt;The small portion of the next section visible at the right is intentionally there, to invite you to continue exploring the panorama.&lt;/li&gt;    &lt;li&gt;I got some reports where the problem was related to the device running low of resources (even if it has lots of memory). This issue was mostly reported on &lt;strong&gt;Omnia II &lt;/strong&gt;devices. I recommend you to take a look at the processes that are running on your device. A soft reset would help on those cases.&lt;/li&gt;    &lt;li&gt;If you think the app is showing wrong times for the matches, please check if your device has the right time zone configured. If that’s not the issue, feel free to send me an email. &lt;/li&gt;    &lt;li&gt;Any other issue you may have, don’t hesitate to contact me, because this piece of software is validating a UX engine that should be stable enough to be widespread reusable. &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Update (6/19/2010):&lt;/h4&gt;  &lt;p&gt;Wow! The proof of concept was an incredible success. I got an amazing feedback and the awesome quantity of 35.000+ downloads. This was definitely the kind of feedback I was looking for.&lt;/p&gt;  &lt;p&gt;If you have read my blog posts, you should be aware that this is just a UX Proof of concept, and of course, I didn’t expect such a huge amount of downloads ;).&lt;/p&gt;  &lt;p&gt;I’ve changed the host server and the updating mechanism, so the client can consume the news feed directly from its original source (i.e. FIFA.com), keeping you with fresher news and simplifying the updating process.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;I strongly recommend you to install v.0.3 if you’re still using v.0.1.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Thanks for such a wonderful feedback!.&amp;#160; Do you still interested on the technology behind this app?? Maybe you should start thinking on &lt;/strong&gt;&lt;strong&gt;what application can you develop with this kind of UX, or maybe just how can you re design your existing app to provide a fluid experience. Stay tuned!&lt;/strong&gt;&lt;/p&gt; &lt;a href=&quot;http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.mobilepractices.com%2f2010%2f06%2fworld-cup-2010-application-for-windows.html&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;kick it on DotNetKicks.com&quot; src=&quot;http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.mobilepractices.com%2f2010%2f06%2fworld-cup-2010-application-for-windows.html&quot; /&gt;&lt;/a&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/3234284283401548574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/3234284283401548574' title='106 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/3234284283401548574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/3234284283401548574'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2010/06/world-cup-2010-application-for-windows.html' title='World Cup 2010 Application for Windows Mobile: The panoramic UX proof of concept is here!'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0rpNse2OL4AUzsvNYCZRy3YJ_Vk8ckppbGXPRkZiAfnqAhj03m351V3xAtuu_91R-OqKnfOKejmE3hyphenhyphenQmc7IKNn_skwanTK_XWsXQjS8wBYWnm2lOyggCQ_LJsF_7Ua0IqAELNzR67l8/s72-c?imgmax=800" height="72" width="72"/><thr:total>106</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-514514648665115089</id><published>2010-05-29T20:56:00.001-03:00</published><updated>2010-05-29T20:56:10.544-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><category scheme="http://www.blogger.com/atom/ns#" term="panorama app"/><category scheme="http://www.blogger.com/atom/ns#" term="samples"/><category scheme="http://www.blogger.com/atom/ns#" term="worldcup"/><title type='text'>UX Proof of concept: Developing panorama applications in .Net CF. World Cup Application</title><content type='html'>&lt;p&gt;You have probably already seen a bunch of really cool applications demoed as part of the Windows Phone 7 momentum following a chrome-less and fluent approach getting a very rich user experience browsing information that Microsoft has called “Panorama Applications”. In the “UI Design and Interaction Guide for Windows Phone 7 Series” document, panoramic applications are described as applications that “offers a unique way to view controls, data, and services by using a long horizontal canvas that extends beyond the confines of the screen. These inherently dynamic application use layered animations and content so that layers smoothly pan at different speeds, similar to parallax effects”.&lt;/p&gt;  &lt;p&gt;I really like the way the information flows along a panorama application. That’s a great approach for browsing data in a mobile application, and it’s perfectly suitable in many use cases.&lt;/p&gt;  &lt;p&gt;If this is such a great approach, why aren’t we already developing Panorama Application for Windows Mobile? Maybe, because the task is not that easy without Silverlight and Blend for helping us. But I’m totally convinced that a Windows Mobile application can provide such a great user experience, it’s just a matter of developing the right custom controls, and that’s the tricky part. That said, I included some Panorama application concepts as part of my usual UX spikes that fills the little free time I have. It was basically a set of touch friendly controls, responsive and smoothly animated, supporting kinetic scrolling all around, alpha blending, transitions and so on.&lt;/p&gt;  &lt;p&gt;While I was working on that, one of the world biggest sport events start was getting really close: The FIFA Soccer World Cup South Africa 2010. And as a big soccer fan, I was really interested on it. I wanted to start following the tournament from my mobile device as well as from my laptop. But unfortunately, I didn’t find any world cup app on the Windows Mobile Marketplace. I did some research on the web, because WinMo users still can download a .cab installer from the web, and just install it on the device, but I didn’t find anything meeting my expectations though.&lt;/p&gt;  &lt;p&gt;But I’m a mobile applications developer and my free time development spikes were needing a bounded focus. Building a world cup app was a very good case study for validating the UX development I was working on. A panoramic approach for a World Cup app sounded great to me. So I decided to align my spikes targeting a World Cup Panorama Application, trying to keep it as simple as possible features-wide, but validating the panoramic approach in a .Net Compact Framework application. It was risky, as far as I didn’t have to much time for it (I had less than five weeks before the world cup starts, and this is just my pet project).&lt;/p&gt;  &lt;p&gt;Now, we’re only 13 days away from the World Cup first match, and the application is in very good shape. I recorded a small video to show you how it feels in action, running on my Samsung Epix.&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:f988676a-57e7-4a71-b349-9327a966f4a2&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;&lt;div id=&quot;603526a3-b2fc-4f7d-87e8-d5699b3b604e&quot; style=&quot;margin: 0px; padding: 0px; display: inline;&quot;&gt;&lt;div&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=XwZYtlG7ACk&amp;amp;hl=es_ES&amp;amp;fs=1&amp;amp;&quot; target=&quot;_new&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi3ua4HDLGElQzATm0mnXdX1v2UGXpOEHpbyAFFtPMeYZ8Be2i4QOtLtP6MEWw2ib-dOl-T7o6UzwKI7wJQiSwKPcdrmznE3oHCimzDtb_cub1Q5pMdWN15XkABeBeYWc4q_yvFb89-44/?imgmax=800&quot; style=&quot;border-style: none&quot; galleryimg=&quot;no&quot; onload=&quot;var downlevelDiv = document.getElementById(&#39;603526a3-b2fc-4f7d-87e8-d5699b3b604e&#39;); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/XwZYtlG7ACk&amp;amp;hl=es_ES&amp;amp;fs=1&amp;amp;&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/XwZYtlG7ACk&amp;amp;hl=es_ES&amp;amp;fs=1&amp;amp;&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;If you’re a soccer fan, and you have a Windows Mobile device, I bet you want it on your phone!. It will be available for downloading before the world cup starts. That means I’ll publish it on my blog as a free download, during next week.&lt;/p&gt;  &lt;p&gt;The requirements are .Net Compact Framework 3.5, and a touch-screen Windows Mobile device.&lt;/p&gt;  &lt;p&gt;If you’re a Windows Mobile developer, you’ll probably find this app very interesting. I hope we start seeing lots of Panorama Applications not only in Windows Phone 7, but also in Windows Mobile 6.x. If we have the ability to build such kind of UX in .Net CF, our applications eco system will be better for sure.&lt;/p&gt;  &lt;p&gt;Stay tuned! This story has just begun.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/514514648665115089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/514514648665115089' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/514514648665115089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/514514648665115089'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2010/05/ux-proof-of-concept-developing-panorama.html' title='UX Proof of concept: Developing panorama applications in .Net CF. World Cup Application'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-4592272476685499385</id><published>2009-07-23T00:02:00.001-03:00</published><updated>2009-07-23T00:02:48.461-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="Best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="custom controls"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="samples"/><title type='text'>Walkthrough: Custom Controls development for .Net Compact Framework (Episode 1)</title><content type='html'>&lt;h4&gt;Overview: What is this guy talking about?&lt;/h4&gt; &lt;p&gt;In most of the projects I had, there was always the need of develop at least one custom control to provide a really good user experience. As I said before in several posts, the user experience is such a critical aspect of any mobile development, that the standard controls are never enough for fulfilling it. And this need is even beyond the lack of some desired features in the current version of Windows Mobile standard controls. Even if we would have cinematic touch scrolling or transparent backgrounds in .Net CF controls, we will highly probably still needing to develop custom controls providing the right user experience to our users, when showing specific business data or interactions that cannot been achieve with the standard controls.&lt;/p&gt; &lt;p&gt;Unfortunately, there is not enough guidance about how to develop a .Net CF custom control in an start-to-end tutorialish approach, a way that you can follow it from scratch, passing thru a sequence of steps that will lead you to a finished custom control, with a clear understanding of what you should take care about during the development process.&lt;/p&gt; &lt;p&gt;So, I decided to start a series of posts on how to develop a real-world custom control for .Net CF. My hope is that these posts will be useful for any developer who needs to develop a .Net CF custom control for a real-world application. That includes people working with me and even myself :). My goal is to be focused not only on the User Control UI elements coding, but also on its usability during the development and application support, and how this control should interact with the business elements, taking care of keeping them decoupled and testable while the control stills providing the desired UX and performance.&lt;/p&gt; &lt;p&gt;Does it sound good? Quite ambitious maybe? I guess YES, YES. And I’ve already spent too many typing on this overview, so let’s start.&lt;/p&gt; &lt;h4&gt;What is a Custom Control? (Custom controls Vs. UserControls)&lt;/h4&gt; &lt;p&gt;For who are new to controls development in .Net, there used to be a big confusion between what is a &lt;strong&gt;UserControl&lt;/strong&gt; and what is a custom &lt;strong&gt;Control&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;A &lt;strong&gt;UserControl &lt;/strong&gt;is basically a UI component, which is made of other controls which can also be User Controls, and that has a design-time experience very similar to the Form’s one. A &lt;strong&gt;UserControl&lt;/strong&gt; is built based on composition. Its goal is helping you to reuse a set of UI elements on more than one Form providing a consistent look &amp;amp; feel and usability from both the development and user experience point of view.&lt;/p&gt; &lt;p&gt;So, if you need to show a Customer Details section in several views, you can create a CustomerDetails user control which will include a set of labels which will be filled with the customer info in the same consistent way along your forms. For achieving that you can just create a new User Control from the “Add Item” menu, call it “CustomerDetails.cs” and in a friendly designer experience, you can drop some labels, change its properties like name, text, font, position them as you prefer, and then using the UserControl code behind, expose a Customer property and fill your labels based on it.&lt;/p&gt; &lt;p&gt;In contrast, a custom &lt;strong&gt;Control &lt;/strong&gt;is a single control. A .Net control which is developed &lt;strong&gt;“from scratch”&lt;/strong&gt; and just by &lt;strong&gt;coding&lt;/strong&gt;. To make it simpler, it’s basically a class that inherits from &lt;strong&gt;System.Windows.Forms.Control &lt;/strong&gt;and overrides some of the Control’s methods, like &lt;strong&gt;OnPaint&lt;/strong&gt;, to provide the expected user experience.&lt;/p&gt; &lt;p&gt;While a &lt;strong&gt;UserControl&lt;/strong&gt; is easier to develop and support, a &lt;strong&gt;Custom Control &lt;/strong&gt;is lighter and faster at runtime, and it gives you the highest flexibility you can get in a .Net control, because you are free to draw whatever you want, even animations, and to handle input messages like keyboard and touch events.&lt;/p&gt; &lt;h4&gt;Why do we need a Custom Control? (Understanding the business)&lt;/h4&gt; &lt;p&gt;During this walkthrough, I will use an imaginary but concrete business case, because I think it’s the best way to understand the three main questions about a Custom Control:&lt;/p&gt; &lt;p&gt;1. Why do we need it?&lt;br&gt;2. What do we need from it?&lt;br&gt;3. How can we do it?&lt;/p&gt; &lt;p&gt;So, to answer the first question let’s start understanding the business case. My case study is an imaginary company that publish a worldwide Restaurant Guide, let’s call it &lt;strong&gt;RestoGuide&lt;/strong&gt;. It has around 150 reviewers around the world, which should collect information about restaurants and send the results to its centralized database. To improve the process, RestoGuide has decided to implement a mobile application (&lt;strong&gt;RestoGuideMobile&lt;/strong&gt;)that will be used by the reviewers to enter the information on site, with the ability to send it almost at real time updating the database for potential online queries.&lt;/p&gt; &lt;p&gt;By using &lt;strong&gt;RestoGuideMobile&lt;/strong&gt;, the reviewer avoids taking notes on paper or recording them on tape, with the need of enter them into the RestoGuide web site later, doubling the risk of human errors. &lt;strong&gt;RestoGuideMobile&lt;/strong&gt; can be used while he is in the restaurant, helping him during the process, and allowing the immediate upload to the centralized database.&lt;/p&gt; &lt;p&gt;Well, there is no mystery on this idea, &lt;strong&gt;RestoGuideMobile &lt;/strong&gt;is just another mobile app which can make the life of its user tons easier. But for making this assertion true, we should take it to the letter. Our app should really make the life of its user tons easier. And the users will interact with our app using the forms and controls we have. Then, for achieving our goal, we should take our app UX very seriously and don’t hesitate in spent several design and development cycles on it. It should fit the business perfectly and the best way is to start with some &lt;a href=&quot;http://www.mobilepractices.com/2009/04/using-balsamiq-mockups-for-design.html&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;mockups&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;An application will have lots of &lt;a href=&quot;http://www.mobilepractices.com/2009/04/using-balsamiq-mockups-for-design.html&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;mockups&lt;/strong&gt;&lt;/a&gt;, but we’ll focus our work on one screen:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ63dERr3X0iT2oeVoyn6UCjyVU9cIvgW2drdXsQxlysm3u0Qm0uAKhQLDrImqpoWsBvX0svl77Ge9fPWG22E6ZD4Z3U6FimWrQCoZk_eHEaog1OStP3oz-32kNlWNKrvt5LGu5Ph-29g/s1600-h/restaurants%5B6%5D.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;restaurants&quot; border=&quot;0&quot; alt=&quot;restaurants&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgScwvMIkaLKPRT4ewW4GPy7fQF2qmpEf__aEJcAQ63C5E1BL7EhruuQd6k8HRpkjkJeOvLf9i-8JfCVNliCnCHoP58s4cGwFbEqRXCw1wdKl6OXryG1to7ZxYXWg8nfJ6p25AebXq0zG8/?imgmax=800&quot; width=&quot;465&quot; height=&quot;315&quot;&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This is a mockup of the third step of the Review wizard, it let’s the user to enter the open days and rating for a given restaurant. The screen has been designed thinking in an easy way to enter the data using a mobile device. It’s easy to read and easy to change. But… &lt;em&gt;&lt;u&gt;is this mockup easy to implement in a Windows Mobile .Net Compact Framework application using standard controls?&lt;/u&gt;&lt;/em&gt; I think this is the answer for &lt;strong&gt;question 1&lt;/strong&gt;, “Why do we need to use custom controls?” we need them for tackling some specific UX challenges, like some of the controls we can see on this mockup, and we need them because we cannot box our mind on a reduced set of controls when we design a good mobile user experience.&lt;/p&gt; &lt;p&gt;From the mockup, we can see at least the following custom controls:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;WizardHeader&lt;/strong&gt;: Could be implemented with a User Control, but it has some inline font changes that could be much easier to implement in a Custom Control, and we can get a better look too.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;OpenDays&lt;/strong&gt;: This will include a week days multi-selector, that would be implemented using a ListView or a set of labels in a User Control, but a custom control will be much lighter and it gives us the possibility of making it look really good.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;RatingStars&lt;/strong&gt;: A typical control for show/enter a rating, but which is not present in Windows Mobile. Again, it can be implemented with a UserControl with a set of images, but a custom control will give us the chance of doing it lighter and to play freely with it.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;During the next posts, we’ll implement the three custom controls, and we’ll be tackling the diverse challenges along the way, like:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Designing the control API&lt;/li&gt; &lt;li&gt;Drawing the control elements&lt;/li&gt; &lt;li&gt;Providing a design time experience&lt;/li&gt; &lt;li&gt;Resource management&lt;/li&gt; &lt;li&gt;Building Drawing Helpers&lt;/li&gt; &lt;li&gt;Avoiding flickering (Double buffering)&lt;/li&gt; &lt;li&gt;Handling the user input&lt;/li&gt; &lt;li&gt;Animations&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Well, we have lots of work to do, so stay tuned, this will have tons of fun!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/4592272476685499385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/4592272476685499385' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/4592272476685499385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/4592272476685499385'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2009/07/walkthrough-custom-controls-development.html' title='Walkthrough: Custom Controls development for .Net Compact Framework (Episode 1)'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgScwvMIkaLKPRT4ewW4GPy7fQF2qmpEf__aEJcAQ63C5E1BL7EhruuQd6k8HRpkjkJeOvLf9i-8JfCVNliCnCHoP58s4cGwFbEqRXCw1wdKl6OXryG1to7ZxYXWg8nfJ6p25AebXq0zG8/s72-c?imgmax=800" height="72" width="72"/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-2742242935877879182</id><published>2009-05-22T11:22:00.001-03:00</published><updated>2009-05-22T11:22:11.951-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="Best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="Blocks"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>Mobile Application Blocks new Community Drop (05-21-2009) available for download.</title><content type='html'>&lt;p&gt;I’ve just uploaded the latest drop of the &lt;strong&gt;&lt;a href=&quot;http://mobile.codeplex.com/&quot; target=&quot;_blank&quot;&gt;Microsoft Patterns &amp;amp; Practices Mobile – Mobile Application Blocks&lt;/a&gt; &lt;/strong&gt;to the &lt;strong&gt;CodePlex &lt;/strong&gt;site.&lt;/p&gt; &lt;p&gt;This new &lt;strong&gt;&lt;a href=&quot;http://mobile.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27708&quot; target=&quot;_blank&quot;&gt;Community Drop (05-21-2009)&lt;/a&gt;&lt;/strong&gt; includes the following changes:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;All the &lt;b&gt;SQL CE references&lt;/b&gt; have been updated targeting to &lt;b&gt;SQLCE 3.5 SP1 (3.5.1.0)&lt;/b&gt; &lt;li&gt;The &lt;b&gt;ConfigSectionEncrypt&lt;/b&gt; sample tool which can be used to encrypt configuration sections has been ported and included on this drop.  &lt;li&gt;For each block we&#39;ve created &lt;b&gt;separate projects&lt;/b&gt; for &lt;b&gt;.Net CF 3.5&lt;/b&gt; and &lt;b&gt;2.0&lt;/b&gt;. So you currently will find projects named:  &lt;ul&gt; &lt;li&gt;&lt;b&gt;&amp;lt;BlockProjectName&amp;gt;.csproj&lt;/b&gt; - Targeting &lt;b&gt;.Net CF 3.5&lt;/b&gt; &lt;li&gt;&lt;b&gt;&amp;lt;BlockProjectName&amp;gt;.20.csproj&lt;/b&gt; - Targeting &lt;b&gt;.Net CF 2.0&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;b&gt;ContainerModel&lt;/b&gt; Block performance improvements and code simplifications.  &lt;li&gt;&lt;b&gt;Readme.htm&lt;/b&gt; file included with basic information about the project and online resources.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Notice that even the blocks were ported thinking on .Net CF 3.5, they still being compatible with .Net CF 2.0 and in fact, most of the blocks source code on previous drops were targeting 2.0. In this version we’ve cleaned up things and you have specific projects for each version.&lt;/p&gt; &lt;p&gt;The other main change is the inclusion of the &lt;strong&gt;ConfigSectionEncrypt &lt;/strong&gt;tool which was absent on previous drops. It’s a great sample and companion for working with the &lt;strong&gt;Configuration Block &lt;/strong&gt;using &lt;strong&gt;Encrypted Sections&lt;/strong&gt;. It was just a straight port at this time, and probably the tool’s UI is not the most intuitive you have seen. So, I’ll try to clarify how to use it in future posts. &lt;/p&gt; &lt;p&gt;About the installation, I recommend you to &lt;strong&gt;remove any previous version of the blocks before installing this&lt;/strong&gt;, and, if you’re installing the blocks for first time, please double check our &lt;strong&gt;&lt;a href=&quot;http://mobile.codeplex.com/Wiki/View.aspx?title=Mobile%20Application%20Blocks%20Requirements&quot; target=&quot;_blank&quot;&gt;Requirements Page&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/2742242935877879182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/2742242935877879182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/2742242935877879182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/2742242935877879182'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2009/05/mobile-application-blocks-new-community.html' title='Mobile Application Blocks new Community Drop (05-21-2009) available for download.'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-7735502536341339091</id><published>2009-05-14T15:43:00.001-03:00</published><updated>2009-05-14T15:43:43.763-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="samples"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><category scheme="http://www.blogger.com/atom/ns#" term="Unit Testing"/><title type='text'>VS2008 Add New Project: Smart Device Unit Testing Project? A simple project template that would make things easier</title><content type='html'>&lt;p&gt;Are you tired of the “Create Unit Test” wizard as the only way to create a Smart Device Unit Testing Project? Don’t you feel comfortable with the alternative of edit a Compact Framework Class Library project file changing Guids to convert it into a Unit Testing project? Well, let me try to help you with this smart device unit testing project template that maybe fits your needs.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://www.mobilepractices.net/smartdeviceunittestingproject.zip&quot; target=&quot;_blank&quot;&gt;SmartDeviceUnitTestingProject (8KB)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;You can put this zip file into the &lt;strong&gt;“%userprofile%\Documents\Visual Studio 2008\Templates\ProjectTemplates” &lt;/strong&gt;folder, and it will appear as a new option under &lt;strong&gt;“My templates” &lt;/strong&gt;when you try to create or add a new project into your solution:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimp0vVVLJPFSP-srlH80EDB88_Y_W7qAhxKd0reZhGosyxsPSYD5CJ5BhSuIpd66c6ZRfJMVilY0LDhAwdyhis8vBddYFut_R3EuwhmP9rc0ooLLcYUqGMvWQlOoQxnteqkcTlqnyllz0/s1600-h/image%5B4%5D.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_oqTxumuh-Y_HjOnJYXnjsSePB_qflbs4WVTtLhKvCSnM1SitJx0i7WaJodrcOWhFgAqaJFQVcjXrt-j4HQt64_YEpi2dmF-KHxSa8jhNlxR8CVjc0ZIy8mawgzs4NR4CY6sBS5SKXYs/?imgmax=800&quot; width=&quot;465&quot; height=&quot;296&quot;&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Much better! At least IMO ;). Enjoy!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/7735502536341339091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/7735502536341339091' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/7735502536341339091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/7735502536341339091'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2009/05/vs2008-add-new-project-smart-device.html' title='VS2008 Add New Project: Smart Device Unit Testing Project? A simple project template that would make things easier'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_oqTxumuh-Y_HjOnJYXnjsSePB_qflbs4WVTtLhKvCSnM1SitJx0i7WaJodrcOWhFgAqaJFQVcjXrt-j4HQt64_YEpi2dmF-KHxSa8jhNlxR8CVjc0ZIy8mawgzs4NR4CY6sBS5SKXYs/s72-c?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-383014676967010522</id><published>2009-04-29T10:55:00.001-03:00</published><updated>2009-04-29T10:55:43.825-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="Best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="Blocks"/><category scheme="http://www.blogger.com/atom/ns#" term="deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>Q4Tech Mobile Updater Application Block is now part of Mobile Contribute</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://www.q4tech.com/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Q4Tech&lt;/strong&gt;&lt;/a&gt; has moved its open source &lt;strong&gt;Mobile Updater Application Block&lt;/strong&gt; as part of the &lt;a href=&quot;http://mobilecontrib.codeplex.com/&quot; target=&quot;_blank&quot;&gt;Mobile Contribute Project at CodePlex&lt;/a&gt;, under the MS-PL license.&lt;/p&gt; &lt;p&gt;The block hasn’t been upgraded yet, and it stills targeting VS 2005, .Net CF2.0 and WM 5.0, but it was definitely a good move, and being in a community contribution project we can expect seeing it alive for a long time and hopefully we will see an updated updater soon ;)&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/383014676967010522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/383014676967010522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/383014676967010522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/383014676967010522'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2009/04/q4tech-mobile-updater-application-block.html' title='Q4Tech Mobile Updater Application Block is now part of Mobile Contribute'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-1677597709365608195</id><published>2009-04-24T11:22:00.001-03:00</published><updated>2012-07-17T18:14:28.054-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>Using Balsamiq Mockups to design a Windows Mobile app UX</title><content type='html'>&lt;b&gt;&lt;i&gt;UPDATE (7/17/2012): Please use &lt;a href=&quot;http://downloads.mobilepractices.com/WinMoProfessionalEditionMockups.zip&quot;&gt;this link for downloading the template&lt;/a&gt;.&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
As you probably already know, or are just about to realize, the success of any mobile application mostly depends on the user experience it provides. Besides how functional is a device which can be easily transported with you, the reduced size and autonomy required makes it a resources constrained machine not only in terms of processor, battery life and memory, it’s constrained also in terms of screen size and user interaction capabilities.&lt;br /&gt;
In fact, most of the mobile applications should interact with users without a mouse, a full sized hardware keyboard or even without any hardware keyboard at all. What’s worst, the apps should show the information and allow input in a very small screen. If you take in account that the scenario is even more complex because your UI would need to target several form factors and orientations, the UX design is something that you should be focused on and work on very seriously from the beginning of your development.&lt;br /&gt;
A great way to get the feeling of a UX before of building it is drawing mockups. You can do it by hand or using some tools around there, like &lt;a href=&quot;http://office.microsoft.com/es-es/visio/default.aspx&quot; target=&quot;_blank&quot;&gt;Microsoft Office Visio&lt;/a&gt; and some custom stencil add-ins available on the web.&lt;br /&gt;
One tool I really like is&lt;strong&gt; &lt;a href=&quot;http://www.balsamiq.com/&quot; target=&quot;_blank&quot;&gt;Balsamiq Mockups&lt;/a&gt;&lt;/strong&gt;. You can build mockups having a relaxed hand-drawn look’n feel which is great for sending a clear UX message without the noise of design specific elements like icons and so on. This way, the customer knows that you’re showing a just a mockup, not screenshots, and at the same time he gets clearly what is the UX you’re proposing.&lt;br /&gt;
A sample mockup of a login screen with the keyboard open can look like this:&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-SOfYNokrcOvB_hlCnGAmfBZUDa6D1KIMaoyPNkm3sm9Pj-D6ANsw3rG30ijnai3eRH5pIBN2_26LacKiaZ1flIolEtx6VS7q4QAjAQeMhzH_sjH3kqmksXYYrX1LCxDGNUIoGAwFzRw/s1600-h/image26.png&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;446&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEherd1NBqeCSMQkeequNzeM8NWYdGBGt1Tf6f5P5ZatlSWih6xqRN4cbJi94sKpVc_vIHvkRedNE2buBQRvJ1mYs9Xi-KC4bs3HppXi4w6-9DJXj_2iQiFaqzsAjgsMgIj69_Izwr8-Xn8/?imgmax=800&quot; style=&quot;border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;&quot; title=&quot;image&quot; width=&quot;311&quot; /&gt;&lt;/a&gt;&lt;br /&gt;And an Outgoing Orders list screen can look like this:&lt;br /&gt;
&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6NZVkX5aEjHu4qZhRmpQ7Hd2c-uowsEMdPeWPHarku77CIUJn1k4J0YRDytrTl6Q6-0Raepsgz91rsWPyOrU6gE3GNubfpGsUDFmiXRBciE3hrQ5Jb4e1HUhh50P0AKx8pCzrswdYu1A/s1600-h/image27.png&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;446&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAmeuT5T-RlgvE3ioeTgctadQ9DLW93KFx8pAHiEoGNwqXTscFB_fa9E3nVWLOp_1nS9hIanSJrKyfLuyhiXVEgh8pZm-dx1F8h7ifKWJoDtdhNxg1yFMqLL7O66pQpX19JygM5OLUHkQ/?imgmax=800&quot; style=&quot;border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;&quot; title=&quot;image&quot; width=&quot;409&quot; /&gt;&lt;/a&gt; &lt;br /&gt;
Really cool stuff, isn’t it? You can understand clearly what are the space constraints in your design and how the user should interact with the UI elements. Building a mockup you’re actually designing the real full User eXperience for your app.&lt;br /&gt;
Unfortunately, &lt;strong&gt;Balsamiq &lt;/strong&gt;doesn’t include &lt;strong&gt;Windows Mobile &lt;/strong&gt;mockups templates out of the box. But I did the homework, and included the template I built for default WM Professional Edition into their &lt;a href=&quot;http://www.mockupstogo.net/&quot; target=&quot;_blank&quot;&gt;MockupsToGo templates site&lt;/a&gt;.&lt;br /&gt;
You can have a look at it and download it following this link:&lt;strike&gt; &lt;a href=&quot;http://mockupstogo.net/windows-mobile-professional-edition&quot; target=&quot;_blank&quot;&gt;Windows Mobile Professional Edition Mockups&lt;/a&gt;. &lt;/strike&gt;&amp;nbsp;&lt;i&gt;&lt;b&gt;(The old link doesn&#39;t work anymore, &lt;a href=&quot;http://downloads.mobilepractices.com/WinMoProfessionalEditionMockups.zip&quot;&gt;please use this for download it&lt;/a&gt;.)&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
I’ll add some extra form factors later so we can build mockups for square screen and Standard Edition also.&lt;br /&gt;
I really like this tool, but I should also say that there are a couple of things that I don’t like about Balsamiq:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;It relies on Adobe Air&lt;/li&gt;
&lt;li&gt;It doesn’t have any freehand drawing tool.&lt;/li&gt;
&lt;li&gt;It lacks of some basic UI and annotation elements.&lt;/li&gt;
&lt;/ul&gt;
The good news is that it stills growing up, and having custom templates you can use it as a great mocking tool for windows mobile applications.&lt;br /&gt;
Hope you find it as useful as I do!</content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/1677597709365608195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/1677597709365608195' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/1677597709365608195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/1677597709365608195'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2009/04/using-balsamiq-mockups-for-design.html' title='Using Balsamiq Mockups to design a Windows Mobile app UX'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEherd1NBqeCSMQkeequNzeM8NWYdGBGt1Tf6f5P5ZatlSWih6xqRN4cbJi94sKpVc_vIHvkRedNE2buBQRvJ1mYs9Xi-KC4bs3HppXi4w6-9DJXj_2iQiFaqzsAjgsMgIj69_Izwr8-Xn8/s72-c?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-5992938858722387997</id><published>2009-04-22T22:20:00.001-03:00</published><updated>2009-04-22T22:20:40.667-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="optimizations"/><category scheme="http://www.blogger.com/atom/ns#" term="Unit Testing"/><title type='text'>How to convert an existing Smart Device project into a Smart Device Unit Testing Project</title><content type='html'>&lt;p&gt;Since I posted about Smart Device Unit Testing using the integrated &lt;strong&gt;Visual Studio 2008 Testing Framework&lt;/strong&gt;, I got a couple of questions regarding how to convert an existing project to a Smart Device Unit Testing Project. Well, let me try to help with the port on this post.&lt;/p&gt; &lt;h4&gt;1. It must be a .Net Compact Framework 3.5 project&lt;/h4&gt; &lt;p&gt;First of all, a Smart Device Unit Testing Project is a .Net Compact Framework 3.5 Class Library project. So, you may need to upgrade your project to the latest .Net CF version (In Solution Explorer right click your project and select &lt;strong&gt;&lt;em&gt;Upgrade Project&lt;/em&gt;&lt;/strong&gt;).&lt;/p&gt; &lt;h4&gt;2. Add Visual Studio Testing Framework References&lt;/h4&gt; &lt;p&gt;Right click on References folder and select “Add Reference”. Switch, if you’re not already in, to the Browse tab and enter the path of the UnitTestFramework assembly for smart devices which typically is on&lt;/p&gt;&lt;code&gt; &lt;p&gt;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.SmartDevice.UnitTestFramework.dll&lt;/p&gt;&lt;/code&gt; &lt;h4&gt;3. Include the Smart Device Unit Testing TypeGuids&lt;/h4&gt; &lt;p&gt;Open the project source code. You’ll need first to unload the project by right clicking on it and selecting &lt;strong&gt;&lt;em&gt;&quot;Unload Project”&lt;/em&gt;&lt;/strong&gt;. Next, please right click on it again and select &lt;strong&gt;&lt;em&gt;&quot;Edit Project File”&lt;/em&gt;&lt;/strong&gt;. &lt;br&gt;The &lt;strong&gt;.csproj &lt;/strong&gt;project file is an &lt;strong&gt;xml &lt;/strong&gt;file containing project definitions. Please look for the &lt;strong&gt;&amp;lt;ProjectTypeGuids&amp;gt; &lt;/strong&gt;element, and replace it with the following:&lt;code&gt;&lt;/p&gt; &lt;p&gt;&amp;lt;ProjectTypeGuids&amp;gt;{73A5A715-AF05-47af-9C33-47A864AF9AE7};{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}&amp;lt;/ProjectTypeGuids&amp;gt;&lt;/p&gt;&lt;/code&gt; &lt;p&gt;Save the file and right click on your project again and select &lt;em&gt;&lt;strong&gt;“Reload Project”&lt;/strong&gt;&lt;/em&gt;. If &lt;strong&gt;Visual Studio &lt;/strong&gt;asks for your confirmation please select &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/p&gt; &lt;h4&gt;4. Add a Test Run Configuration File&lt;/h4&gt; &lt;p&gt;Now your Smart Device project has been turned into a Smart Device Unit Testing Project. But you need to define at least one .testrunconfig file targeting the emulator or an actual device to run your tests. If you are not familiar with &lt;a href=&quot;http://www.mobilepractices.com/2008/02/creating-testrunconfig-files-to-run-net.html&quot; target=&quot;_blank&quot;&gt;how to add a test run configuration file, please take a look at this post&lt;/a&gt;.&lt;/p&gt; &lt;h4&gt;5. Make your tests build and start running them!&lt;/h4&gt; &lt;p&gt;It’s time to build your code… and just run the tests on the target platform of your choice!.&lt;/p&gt; &lt;p&gt;Piece of cake! Isn’t it? ;)&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/5992938858722387997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/5992938858722387997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/5992938858722387997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/5992938858722387997'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2009/04/how-to-convert-existing-smart-device.html' title='How to convert an existing Smart Device project into a Smart Device Unit Testing Project'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-995378990397806533</id><published>2009-04-17T11:59:00.001-03:00</published><updated>2009-04-17T11:59:17.783-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="Best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="Blocks"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><title type='text'>What’s new on the Mobile Application Blocks Community Drop (03-31-2009)?</title><content type='html'>&lt;p&gt;It was two weeks ago, but we have a &lt;a href=&quot;http://mobile.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25565&quot; target=&quot;_blank&quot;&gt;new community drop on the CodePlex site&lt;/a&gt; for the &lt;strong&gt;&lt;a href=&quot;http://mobile.codeplex.com/&quot; target=&quot;_blank&quot;&gt;Mobile Application Blocks&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;This new community drop includes the return of the &lt;strong&gt;Subscription Block &lt;/strong&gt;as part of the project. It hasn’t been included on the previous drop but it was ported and included now.&lt;/p&gt; &lt;p&gt;The other major change was the integration of great updates from the &lt;strong&gt;Microsoft Dynamics Mobile &lt;/strong&gt;product team. They did several wonderful improvements around the &lt;strong&gt;Configuration Block&lt;/strong&gt;, the &lt;strong&gt;Connection Monitor &lt;/strong&gt;Cell Connection, &lt;strong&gt;Subscription Block&lt;/strong&gt;, &lt;strong&gt;Endpoint Catalog &lt;/strong&gt;and the &lt;strong&gt;Disconnected Agent&lt;/strong&gt;. Those improvements have been integrated in our code base in a &lt;strong&gt;TDD &lt;/strong&gt;approach.&lt;/p&gt; &lt;p&gt;One interesting addition was the &lt;strong&gt;IWSCredentialService &lt;/strong&gt;interface as part of the &lt;strong&gt;Disconnected Agent &lt;/strong&gt;Block. This is a side effect of an new abstraction on the &lt;strong&gt;Endpoint Catalog&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;The &lt;strong&gt;Endpoint Catalog &lt;/strong&gt;is the responsible to provide information required to access a logical endpoint as the &lt;strong&gt;URL &lt;/strong&gt;address and authentication related data depending on an specified network name. E.g. you may need to consume a web service and for your application this web service can be identified with a logical name such as “ProductsService”. That web service can require different URL addresses and even different credentials for different networks, so if you’re connected to the internet you may need to use:&lt;/p&gt; &lt;p&gt;URL: “&lt;em&gt;http://mycompany.com/services/productsservice/&lt;/em&gt;”&lt;br&gt;Username: joe.mycompany.com&lt;br&gt;Password: xxxxxx&lt;/p&gt; &lt;p&gt;But if you’re connected to the intranet, you can access it directly using the following information:&lt;/p&gt; &lt;p&gt;URL: “&lt;em&gt;http://services/productsservice/&lt;/em&gt;”&lt;br&gt;Username: joe&lt;br&gt;Password: xxxxxx&lt;/p&gt; &lt;p&gt;The &lt;strong&gt;Endpoint Catalog&lt;/strong&gt; used to address this issue by providing a catalog with default configuration and specific configuration by network name for a logical endpoint name. This configuration information used to include the address and credentials (username, password and optionally the domain). This information is retrieved from the configuration file, which can be encrypted to keep your data safe.&lt;/p&gt; &lt;p&gt;That approach was good, but it carries on with two issues:&lt;/p&gt; &lt;p&gt;1. We don’t have a clear entry point to inject a service that can ask the user for credentials if needed.&lt;/p&gt; &lt;p&gt;2. We don’t have a way to reuse credentials for several endpoints or networks.&lt;/p&gt; &lt;p&gt;To address both issues, the &lt;strong&gt;Dynamics Mobile &lt;/strong&gt;group has included a new abstraction of the credentials resolution, defining that the endpoint catalog won’t include the authentication details anymore, but only an account name. So, you can now specify that your endpoint configuration from the internet is:&lt;/p&gt;URL: “&lt;em&gt;http://mycompany.com/services/productsservice/&lt;/em&gt;”&lt;br&gt;AccountName: “&lt;em&gt;MyInternetAccount&lt;/em&gt;”&lt;br&gt; &lt;p&gt;And we can point several endpoint configurations to reuse the same account by using the same account name.&lt;/p&gt; &lt;p&gt;At the same time, when we need to inject i.e. the actual credentials into the web service proxy, we can use a Credential Service to resolve this account name to actual credentials.&lt;/p&gt; &lt;p&gt;This is what we’ve included as part of the &lt;strong&gt;Disconnected Agent&lt;/strong&gt;. A new &lt;strong&gt;IWSCredentialService &lt;/strong&gt;and a default implementation that retrieves the credentials for each account name from the configuration file named the &lt;strong&gt;ConfigurationCredentialService&lt;/strong&gt;. With this interface, you have now a good customization point where you can inject your own Credential Service which would ask the user for credentials for a given account name when needed.&lt;/p&gt; &lt;p&gt;I’ll talk later about the &lt;strong&gt;Connection Monitor &lt;/strong&gt;design changes, but in the meantime I invite you to download the drop from &lt;a title=&quot;http://mobile.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25565&quot; href=&quot;http://mobile.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25565&quot;&gt;http://mobile.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25565&lt;/a&gt; and take a look at the full list of changes on the wiki &lt;a title=&quot;Changes from MCSF v1&quot; href=&quot;http://mobile.codeplex.com/Wiki/View.aspx?title=Changes%20from%20MCSF%20v1&quot;&gt;Changes from MCSF v1&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I suggest you also take a look at &lt;a href=&quot;http://www.clariusconsulting.net/blogs/kzu/archive/2009/04/17/141951.aspx&quot; target=&quot;_blank&quot;&gt;this great introductory post&lt;/a&gt; of Kzu regarding the new &lt;strong&gt;Container Model &lt;/strong&gt;block.&lt;/p&gt; &lt;p&gt;Have a nice weekend!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/995378990397806533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/995378990397806533' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/995378990397806533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/995378990397806533'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2009/04/whats-new-on-mobile-application-blocks.html' title='What’s new on the Mobile Application Blocks Community Drop (03-31-2009)?'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-6595805790220022887</id><published>2009-02-25T16:02:00.001-02:00</published><updated>2009-02-25T16:02:46.689-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="Best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="Blocks"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><title type='text'>Patterns &amp;amp; Practices Mobile Application Blocks First Community Drop available</title><content type='html'>&lt;p&gt;As &lt;a href=&quot;http://www.mobilepractices.com/2009/02/working-on-new-mobile-client-software.html&quot; target=&quot;_blank&quot;&gt;I posted before&lt;/a&gt;, we’re working on the &lt;a href=&quot;http://mobile.codeplex.com/&quot; target=&quot;_blank&quot;&gt;new Community Release of the Patterns &amp;amp; Practices Mobile Application Blocks&lt;/a&gt;, formerly Mobile Client Software Factory. And this week we’ve started to publish early bits on the &lt;a href=&quot;http://mobile.codeplex.com/&quot; target=&quot;_blank&quot;&gt;Codeplex site&lt;/a&gt;. In fact, this is our &lt;a href=&quot;http://www.codeplex.com/Mobile/Release/ProjectReleases.aspx?ReleaseId=23660&quot; target=&quot;_blank&quot;&gt;first community drop&lt;/a&gt;, and there still much work to do, but it’s a good first look at what we’re working on.&lt;/p&gt; &lt;p&gt;We’ll continue publishing community drops so you can follow the project progress and give us some feedback before we ship. Keep in touch!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/6595805790220022887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/6595805790220022887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/6595805790220022887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/6595805790220022887'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2009/02/patterns-practices-mobile-application.html' title='Patterns &amp;amp; Practices Mobile Application Blocks First Community Drop available'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-2226395564791744729</id><published>2009-02-10T00:25:00.001-02:00</published><updated>2009-02-10T00:25:45.469-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="Best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="Blocks"/><category scheme="http://www.blogger.com/atom/ns#" term="general"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><title type='text'>Working on a new Mobile Client Software Factory (VS 2008, .Net CF 3.5, WM 6.x!)</title><content type='html'>&lt;p&gt;It’s been almost two years since I started working on the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa480471.aspx&quot; target=&quot;_blank&quot;&gt;Microsoft Patterns &amp;amp; Practices Mobile Client Software Factory&lt;/a&gt;, and those application blocks, shipped on July 2006, still being very valuable for the mobile developer. But it’s really hard to install it on Visual Studio 2008, in spite of some nice articles about it, like &lt;a href=&quot;http://blogs.msdn.com/gblock/archive/2008/04/22/porting-mobile-client-software-factory-to-visual-studio-2008.aspx&quot; target=&quot;_blank&quot;&gt;this great one from Glenn Block&lt;/a&gt;, which have &lt;a href=&quot;http://weblogs.asp.net/cschittko/archive/2008/09/25/mobile-client-software-factory-on-vs-2008-sure.aspx&quot; target=&quot;_blank&quot;&gt;some little missing steps I sent to Christoph and he posted here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Well, soon you’ll be able to install it and without all that pain. It’s time to have a new set of mobile blocks updated and working on &lt;strong&gt;VS 2008&lt;/strong&gt;, &lt;strong&gt;Windows Mobile 6.x&lt;/strong&gt; and &lt;strong&gt;.NET CF 3.5&lt;/strong&gt;. Some of the original MCSF team members (Per, &lt;a href=&quot;http://blogs.msdn.com/francischeung/&quot; target=&quot;_blank&quot;&gt;Francis&lt;/a&gt;, Rohit, Alex, &lt;a href=&quot;http://www.clariusconsulting.net/blogs/kzu/&quot; target=&quot;_blank&quot;&gt;Kzu&lt;/a&gt; and &lt;a href=&quot;http://www.mobilepractices.com/&quot; target=&quot;_blank&quot;&gt;me&lt;/a&gt;) with the help of an excellent advisory board, were started working on updating some of the original blocks (Configuration, Data Access, Connection Monitor, Endpoint Catalog, Subscription Manager, Disconnected Agent and Password Authentication) and building some new ones targeting modularity and location awareness. As you can see, the Mobile Composite UI Application Block won’t be updated and it will be removed from the new version, same with &lt;a href=&quot;http://www.orientationaware.net/&quot; target=&quot;_blank&quot;&gt;OAC which has been already updated by Clarius&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;This version will be published on &lt;a href=&quot;http://mobile.codeplex.com/&quot;&gt;http://mobile.codeplex.com/&lt;/a&gt; and ideally it will be the place for future great mobile development blocks.&lt;/p&gt; &lt;p&gt;We still working on prioritization and full feature set. Your feedback is totally welcome. If you have any suggestion, bug report or comment regarding this new project, please feel free to contact me: &lt;a href=&quot;mailto:jose@mobilepractices.net&quot;&gt;jose@mobilepractices.net&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Thanks!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/2226395564791744729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/2226395564791744729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/2226395564791744729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/2226395564791744729'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2009/02/working-on-new-mobile-client-software.html' title='Working on a new Mobile Client Software Factory (VS 2008, .Net CF 3.5, WM 6.x!)'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-6229211982838133553</id><published>2009-01-30T11:42:00.001-02:00</published><updated>2009-01-30T11:42:19.726-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="Best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="optimizations"/><category scheme="http://www.blogger.com/atom/ns#" term="Unit Testing"/><title type='text'>Making your Smart Device Unit Tests run on the desktop</title><content type='html'>&lt;p&gt;In spite of &lt;a href=&quot;http://www.mobilepractices.com/2008/01/unit-testing-for-net-compact-framework.html&quot; target=&quot;_blank&quot;&gt;Smart Device Unit Testing in Visual Studio 2008&lt;/a&gt; is working really good, you may want faster test runs for doing Test-Driven-Development. Actually, that’s what I want :). In that case a very good option is to perform small TDD cycles running the tests on the desktop and run them on the device after some significant progress. But, how can we make our tests run on the desktop?&lt;/p&gt; &lt;h4&gt;Adding a Desktop Test Run Configuration&lt;/h4&gt; &lt;p&gt;The first step is quiet easy, you just need to &lt;a href=&quot;http://www.mobilepractices.com/2008/02/creating-testrunconfig-files-to-run-net.html&quot; target=&quot;_blank&quot;&gt;add (if you don’t already have one) a new .testRunConfig file&lt;/a&gt;. Right click on the solution and &lt;strong&gt;Add – New Item – Test Run Configuration file&lt;/strong&gt;. I like to call it &lt;em&gt;&lt;strong&gt;“Desktop.testrunconfig”&lt;/strong&gt;&lt;/em&gt;. The default configuration should work, so closing the properties dialog should be enough.&lt;/p&gt; &lt;p&gt;The second step is even easier, we need to select Desktop.testrunconfig as the active configuration, so, go to the &lt;em&gt;&lt;strong&gt;Test &lt;/strong&gt;&lt;/em&gt;menu, &lt;strong&gt;&lt;em&gt;Select Active Test Run Configuration &lt;/em&gt;&lt;/strong&gt;and click on &lt;em&gt;&lt;strong&gt;Desktop (desktop.testrunconfig)&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDuv9-5aKSY6Y1NUxrRVJAXI_dZ8M-CzOR9702ef394jFdXrz0GC8KTkugJMq_lCVQ_aYWrgaSUA65UyV0kcRea9ILRYwkMQgjyyPl1eUOofnJ_1-W-0nSIJ7rxrA-_zNx8GvjF3hsViM/s1600-h/image5.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;142&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ESM4OBYyBC88U2T422NNCpRdntSkjuyMosM5U4CnqwW8k9brzt6u4ZfMiIdwcN3GAB-YelcJUR7gzdX03PC60Z5odwdzlbIzF-gZi141ihssMpdpMwQXOiIfyU7npKpNlBbhh3eL9R4/?imgmax=800&quot; width=&quot;465&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You are now ready for run your tests on the desktop!. Assuming that all your tests pass on the device, hopefully, all of them will also pass on the desktop. But, that was not my case! My project includes 12 tests passing on the emulator, but &lt;strong&gt;5 of them don’t pass on the desktop. What’s going wrong?&lt;/strong&gt;&lt;/p&gt; &lt;h4&gt;Handling Windows Mobile specific functionality&lt;/h4&gt; &lt;p&gt;As we’re developing a mobile application, our unit tests may include some windows mobile specific functionality which cannot be run on the desktop. It can be using a Windows Mobile API for trying to access the Outlook Mobile Contacts, checking if a new appointment has been scheduled, sending an SMS message or checking the battery level. We need to identify those scenarios and avoid them when running on the desktop. &lt;/p&gt; &lt;p&gt;In two of my failing tests, the tested code uses an API which doesn’t exist on the desktop. To avoid it from failing on the desktop, I need to place it inside an IF statement asking for the current platform and executing it only if it’s the expected platform. You can use the following code snippet as a way to do it:&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;[&lt;span style=&quot;color: #2b91af&quot;&gt;TestMethod&lt;/span&gt;]&lt;br /&gt;&lt;span style=&quot;color: blue&quot;&gt;public void &lt;/span&gt;testName()&lt;br /&gt;{&lt;br /&gt;    &lt;span style=&quot;color: blue&quot;&gt;if &lt;/span&gt;(&lt;span style=&quot;color: #2b91af&quot;&gt;Environment&lt;/span&gt;.OSVersion.Platform == &lt;span style=&quot;color: #2b91af&quot;&gt;PlatformID&lt;/span&gt;.WinCE)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style=&quot;color: green&quot;&gt;// Test body here&lt;br /&gt;        // ....&lt;br /&gt;    &lt;/span&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;ExpectedException fails!&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;The other 3 failing tests are verifying cases where an Exception is expected. All of them use the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.expectedexceptionattribute.aspx&quot; target=&quot;_blank&quot;&gt;ExpectedException&lt;/a&gt; attribute for this purpose, and it’s ignored when you run a smart device unit testing project on the desktop.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;You have two options here: 1. Avoid the tests when running on the desktop as we did before 2. Replace &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.expectedexceptionattribute.aspx&quot; target=&quot;_blank&quot;&gt;ExpectedException&lt;/a&gt; with an alternative approach. As I want to keep most of the test running on the desktop as possible, I prefer the second one.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Actually ExpectedException already has some disadvantages even besides this smart device / desktop running issue. With ExpectedException we can not check that an specific line of the test is the responsible for throwing the exception, or we cannot validate any additional info of the exception, like the message or an InnerException, we just can check for an exception type. So, this is not only a problem, this is also an improvement opportunity, and I like the &lt;a href=&quot;http://www.codeplex.com/xunit&quot; target=&quot;_blank&quot;&gt;XUnit&lt;/a&gt; approach for this, with the Assert.Throws method. So, why we cannot just implement something similar as follows:&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;public static class &lt;/span&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;ExtendedAssert&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span style=&quot;color: blue&quot;&gt;public delegate void &lt;/span&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;ThrowsDelegate&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: blue&quot;&gt;public static &lt;/span&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;Exception &lt;/span&gt;Throws&amp;lt;exceptionType&amp;gt;(&lt;span style=&quot;color: #2b91af&quot;&gt;ThrowsDelegate &lt;/span&gt;target)&lt;br /&gt;        &lt;span style=&quot;color: blue&quot;&gt;where &lt;/span&gt;exceptionType : &lt;span style=&quot;color: #2b91af&quot;&gt;Exception&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style=&quot;color: blue&quot;&gt;try&lt;br /&gt;        &lt;/span&gt;{&lt;br /&gt;            target();&lt;br /&gt;            &lt;span style=&quot;color: #2b91af&quot;&gt;Assert&lt;/span&gt;.Fail(&lt;span style=&quot;color: #a31515&quot;&gt;&quot;No Exception was thrown.&quot;&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;        &lt;span style=&quot;color: blue&quot;&gt;catch&lt;/span&gt;(exceptionType ex)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: blue&quot;&gt;return &lt;/span&gt;ex;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: blue&quot;&gt;return null&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Now we can replace a test like this:&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;[&lt;span style=&quot;color: #2b91af&quot;&gt;TestMethod&lt;/span&gt;]&lt;br /&gt;[&lt;span style=&quot;color: #2b91af&quot;&gt;ExpectedException&lt;/span&gt;(&lt;span style=&quot;color: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;color: #2b91af&quot;&gt;ArgumentOutOfRangeException&lt;/span&gt;))]&lt;br /&gt;&lt;span style=&quot;color: blue&quot;&gt;public void &lt;/span&gt;BackgroundSizeSmallerThanSizeThrowsArgumentOutOfRangeException()&lt;br /&gt;{&lt;br /&gt;    &lt;span style=&quot;color: #2b91af&quot;&gt;Desktop &lt;/span&gt;desktop = &lt;span style=&quot;color: blue&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;Desktop&lt;/span&gt;();&lt;br /&gt;    desktop.Size = &lt;span style=&quot;color: blue&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;Size&lt;/span&gt;(20, 20);&lt;br /&gt;    desktop.BackgroundSize = &lt;span style=&quot;color: blue&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;Size&lt;/span&gt;(5, 5);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;With something like this:&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;[&lt;span style=&quot;color: #2b91af&quot;&gt;TestMethod&lt;/span&gt;]&lt;br /&gt;&lt;span style=&quot;color: blue&quot;&gt;public void &lt;/span&gt;BackgroundSizeSmallerThanSizeThrowsArgumentOutOfRangeException()&lt;br /&gt;{&lt;br /&gt;    &lt;span style=&quot;color: #2b91af&quot;&gt;Desktop &lt;/span&gt;desktop = &lt;span style=&quot;color: blue&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;Desktop&lt;/span&gt;();&lt;br /&gt;    desktop.Size = &lt;span style=&quot;color: blue&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;Size&lt;/span&gt;(20, 20);&lt;br /&gt;    &lt;span style=&quot;color: #2b91af&quot;&gt;ExtendedAssert&lt;/span&gt;.Throws&amp;lt;&lt;span style=&quot;color: #2b91af&quot;&gt;ArgumentOutOfRangeException&lt;/span&gt;&amp;gt;(&lt;br /&gt;        &lt;span style=&quot;color: blue&quot;&gt;delegate &lt;/span&gt;{ desktop.BackgroundSize = &lt;span style=&quot;color: blue&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;Size&lt;/span&gt;(5, 5); });&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Now, the test pass on the device and also on the desktop, and at the same time, it’s clear what line should throw the exception. Enjoy!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/6229211982838133553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/6229211982838133553' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/6229211982838133553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/6229211982838133553'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2009/01/making-your-smart-device-unit-tests-run.html' title='Making your Smart Device Unit Tests run on the desktop'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ESM4OBYyBC88U2T422NNCpRdntSkjuyMosM5U4CnqwW8k9brzt6u4ZfMiIdwcN3GAB-YelcJUR7gzdX03PC60Z5odwdzlbIzF-gZi141ihssMpdpMwQXOiIfyU7npKpNlBbhh3eL9R4/s72-c?imgmax=800" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-9023349268712331879</id><published>2008-10-26T21:52:00.002-02:00</published><updated>2008-10-26T22:03:59.145-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="Best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="samples"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>Setup.dll Sample and Walkthrough: Terms &amp;amp; Conditions / End User License Agreement for a Smart Device CAB installer</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://www.mobilepractices.com/2008/02/how-to-create-windows-mobile-smart.html&quot; target=&quot;_blank&quot;&gt;Visual Studio Smart Device CAB projects&lt;/a&gt; are extremely helpful in many ways for building a &lt;strong&gt;&lt;em&gt;cab installer&lt;/em&gt;&lt;/strong&gt;, even thought they have some pending issues, like a more natural &lt;em&gt;MSBUILD&lt;/em&gt; integration, they allow us to have a cleaner and dynamic definition of our mobile app installation &lt;em&gt;based on our source projects &lt;/em&gt;instead of relying just in binary and .inf files.&lt;/p&gt;&lt;p&gt;Sometimes we need to perform some custom actions before and after the installation or uninstallation. Typically we can need to check for pre requisites or show a Terms &amp;amp; Conditions/EULA before the installation and continue only if the user accepts it or, as another example, we can need to remove temporary files and registry entries after uninstallation.&lt;/p&gt;&lt;p&gt;In this post I want to show you a very simple way to implement a &lt;strong&gt;&lt;em&gt;Setup.dll &lt;/em&gt;&lt;/strong&gt;which shows a Terms &amp;amp; Conditions dialog which requires the explicit user acceptance to continue the installation.&lt;/p&gt;&lt;h4&gt;What we need to start?&lt;/h4&gt;&lt;p&gt;We&#39;ll use Visual Studio 2008 but this procedure also works with VS2005. You&#39;ll need Visual C++ and Smart Devices support installed.&lt;/p&gt;&lt;p&gt;I recommend you to take a look at &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa924308.aspx&quot; target=&quot;_blank&quot;&gt;this article in MSDN&lt;/a&gt; regarding Setup.dll files for better context.&lt;/p&gt;&lt;p&gt;Choose any of your mobile applications (or create a new empty one) and create a new Smart Device Cab project for it, as I describe in &lt;a href=&quot;http://www.mobilepractices.com/2008/02/how-to-create-windows-mobile-smart.html&quot; target=&quot;_blank&quot;&gt;this post&lt;/a&gt;. Once you got it, we&#39;re ready to start.&lt;/p&gt;&lt;p&gt;I&#39;ll use a port of &lt;a href=&quot;http://www.mobilepractices.com/2007/11/creating-splash-screen-for-your-net-cf.html&quot; target=&quot;_blank&quot;&gt;SplashScreenSample&lt;/a&gt; for VS2008. For instance, my solution explorer looks like this:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/mobilepractices/SQUCGZFVB0I/AAAAAAAAAMw/hF3C9o5jC1Y/s1600-h/image%5B20%5D.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px&quot; height=&quot;328&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SQUCHGN28uI/AAAAAAAAAM0/FItV9iKpRQg/image_thumb%5B14%5D.png?imgmax=800&quot; width=&quot;338&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;h4&gt;Creating a new Setup.dll&lt;/h4&gt;&lt;p&gt;First thing to do is to create a new &lt;strong&gt;&lt;em&gt;Visual C++ &lt;/em&gt;&lt;/strong&gt;Smart Device DLL project. Right click on the solution and select &quot;Add&quot; - &quot;New Project&quot;. &lt;/p&gt;&lt;p&gt;The &quot;Add New Project&quot; dialog will pop up. Please select &lt;strong&gt;&lt;em&gt;Visual C++ / Smart Device &lt;/em&gt;&lt;/strong&gt;in &lt;em&gt;&quot;&lt;strong&gt;Project types&lt;/strong&gt;&quot;&lt;/em&gt; and use the &lt;strong&gt;&lt;em&gt;&quot;Win32 Smart Device Project&quot; &lt;/em&gt;&lt;/strong&gt;template.&lt;/p&gt;&lt;p&gt;I&#39;ll call it &lt;em&gt;&lt;strong&gt;&quot;EULASetup&quot;&lt;/strong&gt;.&lt;/em&gt; Once you&#39;ve entered the name just press &lt;strong&gt;&lt;em&gt;&quot;OK&quot;&lt;/em&gt;&lt;/strong&gt;.&lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SQUCJG29jRI/AAAAAAAAAM4/6QQbPa2U0Kw/s1600-h/image%5B24%5D.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px&quot; height=&quot;307&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/mobilepractices/SQUCKzLxIdI/AAAAAAAAAM8/vB4RmTQ6l3M/image_thumb%5B16%5D.png?imgmax=800&quot; width=&quot;465&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Nice... and now it&#39;s wizard time. Let&#39;s follow the &quot;Win32 Smart Device Project Wizard&quot; &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/mobilepractices/SQUCMwJdJMI/AAAAAAAAANA/GP1983ttm2s/s1600-h/image%5B26%5D.png&quot;&gt;&lt;img style=&quot;BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px&quot; height=&quot;393&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/mobilepractices/SQUCOs6GtMI/AAAAAAAAANE/B7x_ACPx6dk/image_thumb%5B18%5D.png?imgmax=800&quot; width=&quot;465&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Select the platform corresponding to your project. In this particular sample I&#39;m targeting Windows Mobile 6 Standard:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SQUCQvwjSlI/AAAAAAAAANI/tnml0O7S12o/s1600-h/image%5B40%5D.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px&quot; height=&quot;393&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SQUCSQH5GtI/AAAAAAAAANM/rUICVS2WhSQ/image_thumb%5B26%5D.png?imgmax=800&quot; width=&quot;465&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;As we want to implement a very simple DLL, just select &quot;&lt;strong&gt;&lt;em&gt;&lt;u&gt;D&lt;/u&gt;LL&quot;&lt;/em&gt;&lt;/strong&gt; as &lt;em&gt;&lt;strong&gt;Application Type &lt;/strong&gt;&lt;/em&gt;and don&#39;t check anything else (&quot;&lt;em&gt;Precompiled headers&lt;/em&gt;&quot; cannot be modified so let them checked). &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SQUCUPwxQSI/AAAAAAAAANQ/m5EwEeJ0UC8/s1600-h/image%5B39%5D.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px&quot; height=&quot;393&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SQUCVj-kbcI/AAAAAAAAANU/s4OtG0V-1QM/image_thumb%5B25%5D.png?imgmax=800&quot; width=&quot;465&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Once we press &quot;&lt;em&gt;&lt;strong&gt;Finish&lt;/strong&gt;&lt;/em&gt;&quot; the wizard will create a new native C++ project in our Solution. The new project should look like this:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/mobilepractices/SQUCWIFkVyI/AAAAAAAAANY/iy1Qya_A4ec/s1600-h/image%5B59%5D.png&quot;&gt;&lt;img style=&quot;BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px&quot; height=&quot;198&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SQUCXbDVN3I/AAAAAAAAANc/IhFkIeOODDo/image_thumb%5B37%5D.png?imgmax=800&quot; width=&quot;303&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;h4&gt;Showing the EULA dialog at installation begin&lt;/h4&gt;&lt;p&gt;If it&#39;s not already open, please open &lt;strong&gt;&lt;em&gt;EULASetup.cpp &lt;/em&gt;&lt;/strong&gt;by double clicking on it. This class currently contains the DLLMain entry point for the library. We actually don&#39;t need this function in our setup.dll so this function can be removed.&lt;/p&gt;&lt;p&gt;What we need is to implement a function to be called when the user tries to install the cab. This function is &lt;strong&gt;&lt;em&gt;Install_Init&lt;/em&gt;&lt;/strong&gt;. In this function we&#39;ll show the terms &amp;amp; conditions for our application installation and according with the user response we can continue the installation or cancel it. &lt;/p&gt;&lt;p&gt;Our code needs to include &lt;strong&gt;&lt;em&gt;&quot;ce_setup.h&quot;&lt;/em&gt;&lt;/strong&gt; to get the required knowledge of &lt;strong&gt;&lt;em&gt;Install_Init&lt;/em&gt;&lt;/strong&gt; signature types, in this sample &lt;strong&gt;codeINSTALL_INIT&lt;/strong&gt;, an enumeration which gives us the two possible result values: &lt;strong&gt;codeINSTALL_INIT_CONTINUE&lt;/strong&gt; or &lt;strong&gt;codeINSTALL_INIT_CANCEL&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;For simplicity, we can put the text in a string directly hardcoded within the source.  I&#39;m calling it &lt;em&gt;&quot;Message&quot;&lt;/em&gt;. &lt;strong&gt;&lt;em&gt;Install_Init &lt;/em&gt;&lt;/strong&gt;will show the message using the MessageBox API, and handling a &quot;Yes&quot; response continuing with the installation or a negative response canceling it.&lt;/p&gt;&lt;p&gt;It&#39;s important to remark that &lt;strong&gt;&lt;em&gt;Install_Init&lt;/em&gt;&lt;/strong&gt; may be called more than once, with different values for the installation directory; for example when the current directory doesn&#39;t have enough room. So we need to handle the fFirstCall parameter value to only show the dialog the first time our function is called.&lt;/p&gt;&lt;p&gt;How looks our code? please replace the entire content of &lt;strong&gt;&lt;em&gt;EULASetup.cpp&lt;/em&gt;&lt;/strong&gt; with the following:&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;#include &lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;stdafx.h&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;#include &lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;ce_setup.h&quot;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:green;&quot;&gt;// This is a variable containing the text to be displayed&lt;br /&gt;// in the Terms &amp;amp; Conditions dialog&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;TCHAR Message[] = _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;TERMS &amp;amp; CONDITIONS\r\n &quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Selecting YES you&#39;re accepting our terms &amp;amp; conditions.\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;This is just a sample application.\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;From http://www.mobilepractices.com\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;You can replace this text with your own.\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;We&#39;re using a setup.dll to show this dialog.\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Extra line to force vertical scrollbar.\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Extra line to force vertical scrollbar.\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Extra line to force vertical scrollbar.\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Extra line to force vertical scrollbar.\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Extra line to force vertical scrollbar.\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Extra line to force vertical scrollbar.\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Last line.\r\n&quot;&lt;/span&gt;)&lt;br /&gt;        ;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green;&quot;&gt;// This function will be called when the user&lt;br /&gt;// tries to install the cab. According to its return&lt;br /&gt;// value the installation continues or is cancelled.&lt;br /&gt;// As this could be called more than once&lt;br /&gt;// (i.e. if there is not enough space on the target)&lt;br /&gt;// we should take care about fFirstCall parameter&lt;br /&gt;// to show the dialog only once.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;codeINSTALL_INIT Install_Init(    HWND        hwndParent,&lt;br /&gt;            BOOL        fFirstCall,&lt;br /&gt;            BOOL        fPreviouslyInstalled,&lt;br /&gt;            LPCTSTR     pszInstallDir )&lt;br /&gt;{&lt;br /&gt;    &lt;span style=&quot;color:blue;&quot;&gt;if &lt;/span&gt;(!fFirstCall&lt;br /&gt;            &lt;br /&gt;            ::MessageBoxW(0, Message,&lt;br /&gt;            _T(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;SplashScreenSample&quot;&lt;/span&gt;)&lt;br /&gt;                    , MB_YESNO) == IDYES)&lt;br /&gt;        &lt;span style=&quot;color:blue;&quot;&gt;return &lt;/span&gt;codeINSTALL_INIT_CONTINUE;&lt;br /&gt;    &lt;span style=&quot;color:blue;&quot;&gt;else&lt;br /&gt;        return &lt;/span&gt;codeINSTALL_INIT_CANCEL;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Exporting Install_Init function using a .DEF file&lt;/h4&gt;&lt;p&gt;As our &lt;strong&gt;&lt;em&gt;Install_Init&lt;/em&gt;&lt;/strong&gt; function should be visibly externally to allow WCELOAD.EXE to call it during the .cab file processing; it means that we need to export it, and in this sample we&#39;ll use a .def file for doing it.&lt;/p&gt;&lt;p&gt;Please, press right click on EULASetup (the project) and select &lt;strong&gt;&lt;em&gt;Add - New Item...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SQUCZLsV7QI/AAAAAAAAANg/q6XMqRbFQd8/s1600-h/image%5B66%5D.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;296&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SQUCcOJe6_I/AAAAAAAAANk/7zWZcSNTG70/image_thumb%5B42%5D.png?imgmax=800&quot; width=&quot;465&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Please select &lt;strong&gt;&lt;em&gt;&quot;Module-Definition File (.def)&quot;&lt;/em&gt;&lt;/strong&gt; and enter &lt;strong&gt;&lt;em&gt;&quot;EULASetup&quot;&lt;/em&gt;&lt;/strong&gt; as its name. Press &lt;strong&gt;&lt;em&gt;&quot;Add&quot;.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A new &lt;strong&gt;&lt;em&gt;&quot;EULASetup.dll&quot;&lt;/em&gt;&lt;/strong&gt; is included in your project. If it&#39;s not already open in the editor, please open it and replace the body with the following:&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;LIBRARY    &quot;EULASetup&quot;&lt;br /&gt;EXPORTS&lt;br /&gt;Install_Init @1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;In this .def file we&#39;re just exporting &lt;strong&gt;&lt;em&gt;Install_Init&lt;/em&gt;&lt;/strong&gt;. Save the changes and build it. No errors should be found.&lt;/p&gt;&lt;h4&gt;Adding the Setup.dll to our Smart Device CAB Project&lt;/h4&gt;&lt;p&gt;Finally, we need to add &lt;strong&gt;&lt;em&gt;&quot;EULASetup.dll&quot;&lt;/em&gt;&lt;/strong&gt; as the setup.dll for our Smart Device CAB Project. This is really straightforward. Right click on the Installer project and &lt;strong&gt;&lt;em&gt;&quot;Add - Project Output...&quot;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/mobilepractices/SQUCdeWf2UI/AAAAAAAAANo/9U1bzUjtkpg/s1600-h/image%5B75%5D.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;165&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/mobilepractices/SQUCeAEscmI/AAAAAAAAANs/tUZJJRCXzSw/image_thumb%5B47%5D.png?imgmax=800&quot; width=&quot;415&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;What we&#39;re doing is adding the output of build EULASetup to the installer. In fact, we&#39;re adding EULASetup.dll into the cab installer. The way to do it is selecting &lt;strong&gt;&lt;em&gt;EULASetup&lt;/em&gt;&lt;/strong&gt; as the project and &lt;strong&gt;&lt;em&gt;&quot;Primary Output&quot; &lt;/em&gt;&lt;/strong&gt;as what we want to include. Press &lt;strong&gt;&lt;em&gt;&quot;OK&quot;&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/mobilepractices/SQUCexBlNQI/AAAAAAAAANw/4pyUdAHhFhM/s1600-h/image%5B81%5D.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;445&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SQUCgKZ_BaI/AAAAAAAAAN0/IGJB5oeggcE/image_thumb%5B51%5D.png?imgmax=800&quot; width=&quot;387&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Now we have in our installer project the Primary Output from EULASetup.&lt;br /&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SQUCg4SIx_I/AAAAAAAAAN4/-xKacAf6mr0/s1600-h/image%5B86%5D.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;229&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SQUChhbEKxI/AAAAAAAAAN8/JiEqmvDtEYI/image_thumb%5B54%5D.png?imgmax=800&quot; width=&quot;362&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;The final step is to select it as the Setup.dll for our installer. Just select the Installer project by clicking on it&lt;br /&gt;&lt;a href=&quot;http://lh4.ggpht.com/mobilepractices/SQUCiPlKCrI/AAAAAAAAAOA/F945nMneBiM/s1600-h/image%5B70%5D.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;110&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SQUCi2BjdJI/AAAAAAAAAOE/w9SKqj6D7RU/image_thumb%5B44%5D.png?imgmax=800&quot; width=&quot;229&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;In the Properties pane for &lt;strong&gt;&lt;em&gt;&quot;CE Setup DLL&quot;&lt;/em&gt;&lt;/strong&gt; select &lt;strong&gt;&lt;em&gt;(Browse...)&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SQUCjbKGV-I/AAAAAAAAAOI/0pYSDnfFh7w/s1600-h/image%5B91%5D.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;180&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SQUCkEk_fbI/AAAAAAAAAOM/y9R7R56epHQ/image_thumb%5B57%5D.png?imgmax=800&quot; width=&quot;322&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;The Primary Output of a project is placed by default into the &quot;Application Folder&quot; of the CAB File System. So, in the following dialog please select &lt;strong&gt;&lt;em&gt;&quot;Application Folder&quot;&lt;/em&gt;&lt;/strong&gt; and press &lt;strong&gt;&lt;em&gt;&quot;OK&quot;&lt;/em&gt;&lt;/strong&gt; to open that folder&lt;br /&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SQUClfSuepI/AAAAAAAAAOQ/aSD3zn76cR0/s1600-h/image%5B105%5D.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;328&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/mobilepractices/SQUCmvKS-hI/AAAAAAAAAOU/2dbCkhXxjYc/image_thumb%5B65%5D.png?imgmax=800&quot; width=&quot;465&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In the Application Folder select &lt;strong&gt;&lt;em&gt;&quot;Primary Output from EULASetup (Active)&quot;&lt;/em&gt;&lt;/strong&gt; and press &lt;strong&gt;&lt;em&gt;&quot;OK&quot; &lt;/em&gt;&lt;/strong&gt;again.&lt;br /&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SQUCn0PAPHI/AAAAAAAAAOY/DpTr1A48EM8/s1600-h/image%5B103%5D.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;328&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SQUCpqLo9PI/AAAAAAAAAOc/pAlRY3_vHqk/image_thumb%5B63%5D.png?imgmax=800&quot; width=&quot;465&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;And... that&#39;s it! We&#39;ve included EULASetup as the Setup DLL for our installer. &lt;/p&gt;&lt;p&gt;We&#39;re ready to rebuild the project and generate the .CAB File. Now when we try to install SplashSampleInstaller.CAB, we&#39;ll first get the following dialog:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SQUCsnitUmI/AAAAAAAAAOg/K0SE4Wz5u5g/s1600-h/image%5B110%5D.png&quot;&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;488&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SQUCvuQ9iUI/AAAAAAAAAOo/BiRm1uj91lg/image_thumb%5B68%5D.png?imgmax=800&quot; width=&quot;232&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;If the user selects &quot;No&quot;, the installation will be aborted. It will only continue if the user selects &quot;Yes&quot;. I know the text could be improved a lot, and you even can use a more elaborated dialog, but... that&#39;s your homework!&lt;/p&gt;&lt;p&gt;Hope you like this walkthrough, and most important, it helps you. If you want to see the source code, just download it from the following link:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.mobilepractices.net/EULASetupDLLSample.zip&quot; target=&quot;_blank&quot;&gt;EULASetupDLLSample.zip (36Kb)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/9023349268712331879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/9023349268712331879' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/9023349268712331879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/9023349268712331879'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2008/10/setupdll-sample-and-walkthrough-terms.html' title='Setup.dll Sample and Walkthrough: Terms &amp;amp; Conditions / End User License Agreement for a Smart Device CAB installer'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/mobilepractices/SQUCHGN28uI/AAAAAAAAAM0/FItV9iKpRQg/s72-c/image_thumb%5B14%5D.png?imgmax=800" height="72" width="72"/><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-6936894641677449346</id><published>2008-10-15T17:51:00.002-03:00</published><updated>2008-10-15T18:51:19.465-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="Best practices"/><category scheme="http://www.blogger.com/atom/ns#" term="CabWizFixer"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="OAC"/><category scheme="http://www.blogger.com/atom/ns#" term="samples"/><title type='text'>How to add Screen Rotation support to your app in .Net Compact Framework using OAC</title><content type='html'>&lt;p&gt;In a &lt;a href=&quot;http://www.mobilepractices.com/2008/09/cabwizfixer-support-for-files-with-same.html&quot; target=&quot;_blank&quot;&gt;previous post&lt;/a&gt; I included a very simple application called &quot;BasicCatalog&quot; intended for showing one case of having more than one file with the same name on your deploy.&lt;/p&gt;  &lt;p&gt;One of the problems of that PocketPC application is the lack of smart screen rotation awareness. Actually, if you rotate the Pocket PC emulator screen using the &lt;a href=&quot;http://www.mobilepractices.net/basiccatalog.draft.sourcecode.zip&quot; target=&quot;_blank&quot;&gt;originally provided source code&lt;/a&gt; you&#39;ll see something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SPZW-fYbFfI/AAAAAAAAAMQ/n3hdp3WYHLQ/s1600-h/image1%5B1%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;234&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/mobilepractices/SPZXAAfr_WI/AAAAAAAAAMU/kEqrVZ1Smaw/image1_thumb.png?imgmax=800&quot; width=&quot;184&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://lh4.ggpht.com/mobilepractices/SPZXCIpFG5I/AAAAAAAAAJY/BN-OesfrXq8/s1600-h/image17.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;183&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/mobilepractices/SPZXEh4tKEI/AAAAAAAAAJc/QyqV9x_LwKg/image_thumb12.png?imgmax=800&quot; width=&quot;222&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As well as this layout still showing the picture, the description is almost invisible. We definitely can improve it having a better screen distribution for landscape screen orientation.&lt;/p&gt;  &lt;p&gt;We&#39;ll use the &lt;a href=&quot;http://www.orientationaware.net/&quot; target=&quot;_blank&quot;&gt;Clarius Orientation Aware Control&lt;/a&gt; Community Edition, which can be downloaded for free. It includes support for creating a completely new layout at design time for landscape and portrait orientations within visual studio 2008 (and VS2005) designer.&lt;/p&gt;  &lt;p&gt;This is a very detailed walk-through. You can follow it and do it very quickly in spite of this could look as a very long post ;)&lt;/p&gt;  &lt;p&gt;For better understanding, I divided the article in the following steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Adding a new Orientation Aware Control to our project &lt;/li&gt;    &lt;li&gt;Moving our original form design to the new OAC &lt;/li&gt;    &lt;li&gt;Moving Form functionality to the new OAC &lt;/li&gt;    &lt;li&gt;Adding an OAC instance to the existing form &lt;/li&gt;    &lt;li&gt;Designing the horizontal layout &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Please start downloading &lt;a href=&quot;http://www.mobilepractices.net/basiccatalog.draft.sourcecode.zip&quot; target=&quot;_blank&quot;&gt;the original source code from this link&lt;/a&gt;, it will be our starting point for the whole work. We&#39;ll need the &lt;a href=&quot;http://www1.orientationaware.net/downloads.html&quot; target=&quot;_blank&quot;&gt;Community Edition of the Clarius Orientation Aware Control&lt;/a&gt; installed. If you already have any of the Clarius Orientation Aware Control 2008 editions installed, this preparation step is not needed, go straight to step 1:&lt;/p&gt;  &lt;h4&gt;1) Adding a new Orientation Aware Control to our project&lt;/h4&gt;  &lt;p&gt;Lets start creating a new Orientation Aware Control:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SPZXFZfRuMI/AAAAAAAAAJg/hLUYR0gM1nY/s1600-h/image22.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;166&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SPZXGVngd1I/AAAAAAAAAJk/aGRTaSwm9t4/image_thumb15.png?imgmax=800&quot; width=&quot;405&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Right click on BasicCatalog project - Add - New Item...&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/mobilepractices/SPZXH_1KZ-I/AAAAAAAAAJo/rsPaecEqM78/s1600-h/image47.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;249&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/mobilepractices/SPZXJVQj9MI/AAAAAAAAAJs/Z1yLvev_PqI/image_thumb32.png?imgmax=800&quot; width=&quot;415&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Select the Orientation Aware Control template, and enter &quot;&lt;em&gt;CatalogControl.cs&lt;/em&gt;&quot; in the &quot;&lt;em&gt;Name&lt;/em&gt;&quot; field. Press &quot;Add&quot;.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SPZXKID-HWI/AAAAAAAAAJw/nLSLT0Z44Wg/s1600-h/image53.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;213&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SPZXKtP08ZI/AAAAAAAAAJ0/WQ7wKH5TgCc/image_thumb36.png?imgmax=800&quot; width=&quot;198&quot; align=&quot;right&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;A new &lt;em&gt;CatalogControl.cs [Design]&lt;/em&gt; tab will appear on Visual Studio. This canvas should be used as the new design surface for our form.&lt;/p&gt;  &lt;p&gt;If you take a look at the Properties panel for this control, you&#39;ll see a new &lt;strong&gt;&lt;em&gt;Orientation&lt;/em&gt;&lt;/strong&gt; property with &quot;Vertical&quot; value. There is another new property named &lt;strong&gt;&lt;em&gt;ScreenSize&lt;/em&gt;&lt;/strong&gt; which is read only in the Community Edition, fixed to 240x320(QVGA), the default form factor for Pocket PC. In other OAC editions (Professional and Trial) this property can be changed freely to design different layouts for each supported screen size. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/mobilepractices/SPZXLgWT7hI/AAAAAAAAAJ4/-7ilqTeNRUc/s1600-h/image63.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;216&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/mobilepractices/SPZXMoRdvhI/AAAAAAAAAJ8/yLdeYktxuDI/image_thumb44.png?imgmax=800&quot; width=&quot;429&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;2) Moving our original Form design to the new OAC&lt;/h4&gt;  &lt;p&gt;Let&#39;s move all the controls included in our Form to the new &lt;em&gt;CatalogControl&lt;/em&gt;. Double click &quot;&lt;em&gt;Form1.cs&lt;/em&gt;&quot; in Solution Explorer to open it in design mode. &lt;/p&gt;  &lt;p&gt;Press &lt;em&gt;CTRL+A&lt;/em&gt; to select all the controls in the form (or do it thru the &lt;em&gt;Edit - Select All &lt;/em&gt;menu option). You&#39;ll get something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/mobilepractices/SPZXOm3zVeI/AAAAAAAAAKA/jXJ4a_h89oo/s1600-h/image79.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;302&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SPZXPw3r1ZI/AAAAAAAAAKE/mxcoWe07D0w/image_thumb54.png?imgmax=800&quot; width=&quot;205&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Copy all of them &lt;em&gt;(CTRL + C)&lt;/em&gt;, switch to &lt;em&gt;&quot;CatalogControl.cs [Design]&quot;&lt;/em&gt; and paste &lt;em&gt;(CTRL + V)&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/mobilepractices/SPZXQgmriUI/AAAAAAAAAKI/u3dYSKZKhEY/s1600-h/image75.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;239&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SPZXRqzrYuI/AAAAAAAAAKM/T49SoqFApk0/image_thumb50.png?imgmax=800&quot; width=&quot;240&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Please select &quot;&lt;strong&gt;&lt;em&gt;mainMenu1&lt;/em&gt;&lt;/strong&gt;&quot; from the bottom bar and delete it (Delete key or right click - Delete). The menu shouldn&#39;t be in CatalogControl anymore.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SPZXSG4at0I/AAAAAAAAAKQ/87WRAHvdwes/s1600-h/image85.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;174&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SPZXTE9uf8I/AAAAAAAAAKU/MxrNHHSv65M/image_thumb58.png?imgmax=800&quot; width=&quot;179&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SPZXTpI-IWI/AAAAAAAAAKY/h-9V0l3yfmw/s1600-h/image92.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;178&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SPZXUNyiWSI/AAAAAAAAAKc/pJ818TkolX0/image_thumb63.png?imgmax=800&quot; width=&quot;170&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SPZXU43bNzI/AAAAAAAAAKg/ZFUfhBJnPD4/s1600-h/image100.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;92&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SPZXVr97hkI/AAAAAAAAAKk/o2KcAo1_13w/image_thumb69.png?imgmax=800&quot; width=&quot;242&quot; align=&quot;right&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Select &lt;em&gt;&lt;strong&gt;BasicCatalog&lt;/strong&gt;&lt;/em&gt; from the Properties pane combo box and set the size to &lt;strong&gt;240x268&lt;/strong&gt; (The regular OAC size for QVGA portrait).&lt;/p&gt;  &lt;p&gt;We&#39;ve already moved our layout to &lt;em&gt;BasicCatalog&lt;/em&gt;. Now, our design should look like this:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SPZXXLzuTjI/AAAAAAAAAKo/ACFdwr2PuZ0/s1600-h/image104.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;240&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SPZXX3__uSI/AAAAAAAAAKs/JjyfNol9T-M/image_thumb71.png?imgmax=800&quot; width=&quot;198&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;3) Moving Form functionality to the new OAC&lt;/h4&gt;  &lt;p&gt;As this is a sample application for demo purposes only, it has all its basic logic defined in the Form source code. Actually, this used to be a very common scenario in mobile applications. Now we need to move all the functionality from the form source code to the &lt;em&gt;CatalogControl source code&lt;/em&gt;, except for the menu related which will still being handled by the form.&lt;/p&gt;  &lt;p&gt;So, let&#39;s start preparing &lt;em&gt;CatalogControl&lt;/em&gt;. &lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SPZXYeQdnhI/AAAAAAAAAKw/r_POK3lpWQc/s1600-h/image114.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;145&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SPZXZZpRBZI/AAAAAAAAAK0/es-FG0mNqlw/image_thumb77.png?imgmax=800&quot; width=&quot;240&quot; align=&quot;right&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Open &lt;em&gt;CatalogControl.cs &lt;/em&gt;source code doing right click on the control and selecting &lt;em&gt;View Code&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Remove all the three methods after the &lt;em&gt;CatalogControl() constructor&lt;/em&gt;. The sourcecode should look as the following:&lt;/p&gt;  &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System.ComponentModel;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System.Drawing;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System.Data;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System.Text;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System.Windows.Forms;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;Clarius.UI;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;namespace &lt;/span&gt;MobilePractices.BasicCatalog&lt;br /&gt;{&lt;br /&gt;   &lt;span style=&quot;color:blue;&quot;&gt;public partial class &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;CatalogControl &lt;/span&gt;: &lt;span style=&quot;color:#2b91af;&quot;&gt;OrientationAwareControl&lt;br /&gt;   &lt;/span&gt;{&lt;br /&gt;       &lt;span style=&quot;color:blue;&quot;&gt;public &lt;/span&gt;CatalogControl()&lt;br /&gt;       {&lt;br /&gt;           InitializeComponent();&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Now, open the &lt;em&gt;Form1.cs&lt;/em&gt; code: from Solution Explorer right click on &lt;em&gt;Form1.cs&lt;/em&gt; - &quot;&lt;em&gt;View code&lt;/em&gt;&quot;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/mobilepractices/SPZXZ43qQoI/AAAAAAAAAK4/gE1A_aNfNGU/s1600-h/image109.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;141&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SPZXazLyntI/AAAAAAAAAK8/lbEBJFG7cPU/image_thumb74.png?imgmax=800&quot; width=&quot;285&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Select from line 28 (&lt;em&gt;private void FillComboBox()&lt;/em&gt;) to line 128 (up to the end of comboBox1_SelectedIndexChanged) and cut all the selected code &lt;em&gt;(CTRL + X)&lt;/em&gt;.  Go back to &lt;em&gt;CatalogControl.cs&lt;/em&gt; source code, and paste the code after the default constructor within the class (&lt;em&gt;CTRL + V&lt;/em&gt;).&lt;/p&gt;&lt;p&gt;Additionally, we need to move the following using clauses:&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System.IO;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System.Reflection;&lt;/pre&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;and the class member &quot;&lt;em&gt;pictures&lt;/em&gt;&quot; which should be now part of the &lt;em&gt;CatalogControl&lt;/em&gt; class&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;List&lt;/span&gt;&amp;lt;ShowableDirectory&amp;gt; pictures = &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;List&lt;/span&gt;&amp;lt;ShowableDirectory&amp;gt;();&lt;/pre&gt;&lt;p&gt;BuildCollection() and FillComboBox() method calls should be removed from the Form1 constructor and placed as part of a new override OnLoad method in CatalogControl:&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;protected override void &lt;/span&gt;OnLoad(&lt;span style=&quot;color:#2b91af;&quot;&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt;{&lt;br /&gt;   &lt;span style=&quot;color:blue;&quot;&gt;base&lt;/span&gt;.OnLoad(e);&lt;br /&gt;   BuildCollection();&lt;br /&gt;   FillComboBox();&lt;br /&gt;}&lt;/pre&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;p&gt;Now it&#39;s time to move the menu item click handlers functionality from Form1 to CatalogControl. Both handlers will be now internal functions with no parameters (because in this application they don&#39;t need any parameter as part of their logic).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Copy&lt;/strong&gt; (do not cut) and paste &lt;em&gt;menuItem1_Click&lt;/em&gt; and &lt;em&gt;menuItem2_Click&lt;/em&gt; into &lt;em&gt;CatalogControl&lt;/em&gt; and replace their parameters, names and modifiers to look as following:&lt;/p&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;internal void &lt;/span&gt;SelectPrev()&lt;br /&gt;{&lt;br /&gt;   &lt;span style=&quot;color:blue;&quot;&gt;if &lt;/span&gt;(comboBox1.SelectedIndex &amp;gt; 0)&lt;br /&gt;       comboBox1.SelectedIndex -= 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;internal void &lt;/span&gt;SelectNext()&lt;br /&gt;{&lt;br /&gt;   &lt;span style=&quot;color:blue;&quot;&gt;if &lt;/span&gt;(comboBox1.SelectedIndex &amp;lt; (comboBox1.Items.Count - 1))&lt;br /&gt;       comboBox1.SelectedIndex++;&lt;br /&gt;}&lt;/pre&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;p&gt;These methods will be called from the form menu item click handlers, so we need to make them accessible from the form turning them &quot;internal&quot; instead of &quot;private&quot;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/mobilepractices/SPZXbQWaf_I/AAAAAAAAALA/yz04YjEKwfo/s1600-h/image119.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;147&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/mobilepractices/SPZXczJhA9I/AAAAAAAAALE/y_mkYfJcakg/image_thumb80.png?imgmax=800&quot; width=&quot;181&quot; align=&quot;right&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Finally, we need to wire up the selected index changed handler from CatalogControl to the corresponding event in the combo box. Go back to &lt;em&gt;CatalogControl&lt;/em&gt; designer, select &lt;em&gt;comboBox1&lt;/em&gt; and press the &quot;Events&quot; button:&lt;/p&gt;&lt;p&gt;In &quot;SelectedIndexChanged&quot; select from the drop down list &quot;comboBox1_SelectedIndexChanged&quot; as following:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/mobilepractices/SPZXdaH6awI/AAAAAAAAALI/t-QUd8qjyR0/s1600-h/image124.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;94&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SPZXd_Ay5tI/AAAAAAAAALM/9yF6bjQzEJo/image_thumb83.png?imgmax=800&quot; width=&quot;426&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Save all the files &lt;em&gt;(CTRL + SHIFT + S)&lt;/em&gt;.&lt;/p&gt;&lt;h4&gt;4) Adding an OAC instance to the existing form&lt;/h4&gt;&lt;p&gt;To add CatalogControl to the existing form, we need to have it as part of the toolbox. To get it there, just build the solution. &lt;em&gt;Menu Build - Build Solution.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;The build should succeed with no errors. If you have any error please check the previous steps to find out what could be different.&lt;/p&gt;&lt;p&gt;Open &lt;em&gt;Form1&lt;/em&gt; in design mode (double click on &lt;em&gt;Form1.cs&lt;/em&gt; in Solution Explorer). Remove comboBox1, textBox1 and pictureBox1 from the form (those three controls have been copied to CatalogControl during step 2). &lt;/p&gt;&lt;p&gt;Drag the CatalogControl from &quot;BasicCatalog Components&quot; in the ToolBox to the form:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SPZXfLVAQ5I/AAAAAAAAALQ/StwcXwoiDSo/s1600-h/image%5B4%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;245&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/mobilepractices/SPZXhh6ll0I/AAAAAAAAALU/rJDl-R1LnM8/image_thumb%5B2%5D.png?imgmax=800&quot; width=&quot;450&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;The new control is called &lt;em&gt;CatalogControl1 &lt;/em&gt;by default, and that&#39;s good enough for our sample. Click on the smart tasks icon at the top right of &lt;em&gt;&lt;strong&gt;CatalogControl1&lt;/strong&gt;&lt;/em&gt; and select Dock in parent container.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SPZXiVZ_KKI/AAAAAAAAALY/PEM8xY-wGlc/s1600-h/image%5B10%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;155&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SPZXjJvWpjI/AAAAAAAAALc/v7tqnvJRDYY/image_thumb%5B6%5D.png?imgmax=800&quot; width=&quot;460&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;This step is required for allowing OAC to detect screen size changes.&lt;/p&gt;&lt;p&gt;Go to the source code, and replace &lt;em&gt;menuItem1_Click&lt;/em&gt; and &lt;em&gt;menuItem2_Click&lt;/em&gt; with the following:&lt;/p&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;private void &lt;/span&gt;menuItem1_Click(&lt;span style=&quot;color:blue;&quot;&gt;object &lt;/span&gt;sender, &lt;span style=&quot;color:#2b91af;&quot;&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt;{&lt;br /&gt;   catalogControl1.SelectPrev();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;private void &lt;/span&gt;menuItem2_Click(&lt;span style=&quot;color:blue;&quot;&gt;object &lt;/span&gt;sender, &lt;span style=&quot;color:#2b91af;&quot;&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt;{&lt;br /&gt;   catalogControl1.SelectNext();&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Now the handlers in the form are just calling the correspond SelectPrev() or SelectNext() methods in &lt;em&gt;CatalogControl&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;We&#39;re ready to see the app running! Press F5 ...&lt;/p&gt;&lt;p&gt;The app should behaves in exactly the same way it used to do before all our changes, even with the same disappointing horizontal layout design. Frustrating? no way!... we&#39;ve just included an OAC in our app so we can now easily build a better horizontal layout.&lt;/p&gt;&lt;h4&gt;5) Designing the horizontal layout&lt;/h4&gt;&lt;p&gt;Close the application if it still running pressing the OK button.&lt;/p&gt;&lt;p&gt;In Visual Studio, open CatalogControl in design mode by double clicking on it in Solution Explorer.&lt;/p&gt;&lt;p&gt;Be sure that you have CatalogControl selected, if needed please select it from the Properties pane combo box. &lt;/p&gt;&lt;p&gt;We need to rotate the screen, just Right click on any empty area of the designer and select &quot;&lt;em&gt;Rotate&lt;/em&gt;&quot;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SPZXjuRwstI/AAAAAAAAALg/E_6yFl4a2po/s1600-h/image%5B15%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;349&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/mobilepractices/SPZXkks9eMI/AAAAAAAAALk/4uGI1uFAzM4/image_thumb%5B9%5D.png?imgmax=800&quot; width=&quot;402&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;There are several ways to rotate an OAC, you can also change the &quot;&lt;em&gt;Orientation&lt;/em&gt;&quot; property from the Properties pane to &quot;Horizontal&quot; or using the &quot;Rotate&quot; command:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SPZXlBt-s3I/AAAAAAAAALo/ZGFcAXZ1bfI/s1600-h/image%5B20%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;230&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/mobilepractices/SPZXl3p1OBI/AAAAAAAAALs/UfAGEultvfk/image_thumb%5B12%5D.png?imgmax=800&quot; width=&quot;307&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;The designer will change to the &quot;&lt;em&gt;Horizontal&lt;/em&gt;&quot; Layout. First thing to do is to change the CatalogControl size to &lt;strong&gt;320x188&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/mobilepractices/SPZXmjv1SgI/AAAAAAAAALw/7CuSqBIH7-g/s1600-h/image%5B25%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;113&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SPZXnDtpgUI/AAAAAAAAAL0/6eoxZhs1Nlc/image_thumb%5B15%5D.png?imgmax=800&quot; width=&quot;307&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;The layout looks as in the app when running in a horizontal screen. This is our starting point.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/mobilepractices/SPZXnppj3YI/AAAAAAAAAL4/XbdY-MvygwE/s1600-h/image%5B40%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;254&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/mobilepractices/SPZXoSq7H-I/AAAAAAAAAL8/lo_MzGk2fig/image_thumb%5B24%5D.png?imgmax=800&quot; width=&quot;374&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Select &lt;strong&gt;pictureBox1&lt;/strong&gt; and change the &lt;em&gt;&lt;strong&gt;Docking&lt;/strong&gt;&lt;/em&gt; property to &lt;strong&gt;&lt;em&gt;Right&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;sizeMode&lt;/em&gt;&lt;/strong&gt; to &lt;strong&gt;&lt;em&gt;CenterImage &lt;/em&gt;&lt;/strong&gt;and &lt;strong&gt;&lt;em&gt;Size &lt;/em&gt;&lt;/strong&gt;to &lt;strong&gt;&lt;em&gt;160,166 &lt;/em&gt;&lt;/strong&gt;as follows:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SPZXox7lsmI/AAAAAAAAAMA/Ra57r6oD9u4/s1600-h/image%5B45%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;298&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/mobilepractices/SPZXpn8p4tI/AAAAAAAAAME/hD16pQra2U4/image_thumb%5B27%5D.png?imgmax=800&quot; width=&quot;255&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;The layout looks now much better:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SPZXqCIscnI/AAAAAAAAAMI/IEK35m1Kt8Q/s1600-h/image%5B35%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;250&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/mobilepractices/SPZXrcf_wvI/AAAAAAAAAMM/x1h2trxvyoI/image_thumb%5B21%5D.png?imgmax=800&quot; width=&quot;378&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;And that&#39;s it! The work is done! Try running the app by pressing F5.&lt;/p&gt;&lt;p&gt;Now you&#39;ll see the following behavior when rotating the screen:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SPZW-fYbFfI/AAAAAAAAAMQ/n3hdp3WYHLQ/s1600-h/image1%5B1%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;220&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/mobilepractices/SPZXAAfr_WI/AAAAAAAAAMU/kEqrVZ1Smaw/image1_thumb.png?imgmax=800&quot; width=&quot;175&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://lh3.ggpht.com/mobilepractices/SPZXwZm_skI/AAAAAAAAAMY/a1R72Yu8xLc/s1600-h/image%5B54%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;193&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/mobilepractices/SPZXyJOkm_I/AAAAAAAAAMc/JvTMGgjOCyk/image_thumb%5B34%5D.png?imgmax=800&quot; width=&quot;239&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;It&#39;s much better! isn&#39;t it?&lt;/p&gt;&lt;p&gt;You can download the final source code after completing the four steps from here:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.mobilepractices.net/basiccatalog.rotation.sourcecode.zip&quot; target=&quot;_blank&quot;&gt;basiccatalog.rotation.sourcecode.zip (66.7 KB)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;Some extra tips:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/mobilepractices/SPZXyoTUWSI/AAAAAAAAAMg/QVgvotk4c0I/s1600-h/image%5B70%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;64&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/mobilepractices/SPZXzLe1uSI/AAAAAAAAAMk/LgDFjdk_yM4/image_thumb%5B44%5D.png?imgmax=800&quot; width=&quot;97&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;You can rotate the emulator using the &quot;Calendar&quot; button at the right of the directional pad.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/mobilepractices/SPZX0IjFFHI/AAAAAAAAAMo/W6sX3XIiEvw/s1600-h/image%5B71%5D.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;167&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SPZX067PzoI/AAAAAAAAAMs/MTrFsyFmOZs/image_thumb%5B45%5D.png?imgmax=800&quot; width=&quot;240&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; You can rotate a Form &lt;strong&gt;at design time&lt;/strong&gt;, from a contextual menu in the Visual Studio designer if you right click on the title bar and select Rotate left or Right. Sometimes this menu fails while showing. In that case you just need to close the form designer and open it again. If your form contains an Orientation Aware Control, it will reflect the orientation change according to the rotation.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/6936894641677449346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/6936894641677449346' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/6936894641677449346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/6936894641677449346'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2008/10/how-to-add-screen-rotation-support-to.html' title='How to add Screen Rotation support to your app in .Net Compact Framework using OAC'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/mobilepractices/SPZXAAfr_WI/AAAAAAAAAMU/kEqrVZ1Smaw/s72-c/image1_thumb.png?imgmax=800" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-8564183140582671336</id><published>2008-10-15T09:43:00.001-03:00</published><updated>2008-10-15T09:43:58.999-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="general"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><title type='text'>Resco will participate in Microsoft Tech Ed EMEA Developers 2008</title><content type='html'>&lt;p&gt;Microsoft is preparing the start of &lt;a href=&quot;http://www.microsoft.com/emea/teched2008/developer/&quot; target=&quot;_blank&quot;&gt;Tech Ed EMEA Developers 2008&lt;/a&gt; for November 14th in the CCIB Barcelona, Spain. I&#39;ve just received news from &lt;a href=&quot;http://www.resco.net/developer/default.aspx&quot; target=&quot;_blank&quot;&gt;Resco&lt;/a&gt; about their participation showing some of their mobile products during the conference.&lt;/p&gt;  &lt;p&gt;If you&#39;ll be attending, take a look at the &lt;a href=&quot;http://www.resco.net/developer/company/news.aspx?file=2008-10-14&quot; target=&quot;_blank&quot;&gt;press release&lt;/a&gt; for further information.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/8564183140582671336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/8564183140582671336' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/8564183140582671336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/8564183140582671336'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2008/10/resco-will-participate-in-microsoft.html' title='Resco will participate in Microsoft Tech Ed EMEA Developers 2008'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-6624275992563825399</id><published>2008-09-26T15:38:00.001-03:00</published><updated>2008-10-13T22:07:56.606-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CabWizFixer"/><category scheme="http://www.blogger.com/atom/ns#" term="deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="samples"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>CabWizFixer: Support for files with the same name on Smart Device CAB installers</title><content type='html'>&lt;p&gt;There is a &lt;a href=&quot;http://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=117453&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;know bug in cabwiz.exe&lt;/strong&gt;&lt;/a&gt; when your deployment needs several files with the same name in separate folders. This is a typical scenario when you have &lt;strong&gt;multiple resource files (i.e. using localization) in a Smart Device Cab Project&lt;/strong&gt;, but it can also be present when you try to face an app in a generic approach depending on the folders/files structure or just even as a bad coincidence in your app file names. In all cases the cab installer will mess up your deploy copying the same file in all your folders for each group of namesakes. &lt;/p&gt;  &lt;p&gt;Let&#39;s see an example:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt; The originally posted 7Wonders sample application has been removed due to copyright issues after asking them about the usage of their material. I replaced that sample with this one: &lt;/em&gt;&lt;/p&gt;  &lt;h4&gt;The Small Catalog Mobile app&lt;/h4&gt;  &lt;p&gt;This is quite a basic sample, but useful enough, of a good generic approach for a problem. &lt;strong&gt;The Problem: &lt;/strong&gt;We need to implement a Pocket PC app to show a small and simple catalog of a few products. Just a way to show a set of pictures and a quick description of each product. The app should be very simple, and we don&#39;t need even to have a database. So, we can just rely on the file directory structure where each subfolder in our app folder will be a new product. The folder name is the product name, and it includes two files named &lt;em&gt;&lt;strong&gt;description.txt&lt;/strong&gt;&lt;/em&gt; and &lt;em&gt;&lt;strong&gt;picture.jpg&lt;/strong&gt;&lt;/em&gt; for the product description and image correspondingly.&lt;/p&gt;  &lt;p&gt;Actually, this approach also makes things easier during the development process. We can build the directory structure in our project as we want it once it&#39;s deployed on the device in a sort of WYSIWYG design experience.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;323&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/mobilepractices/SPPw64wW7OI/AAAAAAAAAJM/t9RGHaHqPLk/image6.png?imgmax=800&quot; width=&quot;259&quot; border=&quot;0&quot; /&gt; &lt;/p&gt;  &lt;p&gt;You can download the sample solution source code from the following link:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://www.mobilepractices.net/basiccatalog.draft.sourcecode.zip&quot; target=&quot;_blank&quot;&gt;basiccatalog.draft.sourcecode.zip (61K)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The solution includes two projects: &lt;em&gt;&lt;strong&gt;BasicCatalog&lt;/strong&gt;&lt;/em&gt; project itself, and a &lt;em&gt;&lt;strong&gt;setup project&lt;/strong&gt;&lt;/em&gt;. If you try to debug or run the solution &lt;strong&gt;from VS&lt;/strong&gt;, it will be deployed and run as expected. But if you try to install the cab generated thru the setup project, the app will show always the same description and picture for all the products. The reason of this behavior is the cabwiz bug described at the beginning of this post. The same picture.jpg and description.txt files have been installed in all the product folders.&lt;/p&gt;  &lt;h4&gt;CabWizFixer&lt;/h4&gt;  &lt;p&gt;Here&#39;s when &lt;strong&gt;CabWizFixer&lt;/strong&gt; can help us. This is a small tool we made internally based on part of the source code from the &lt;a href=&quot;http://www.orientationaware.net/&quot; target=&quot;_blank&quot;&gt;Clarius Orientation Aware Control&lt;/a&gt; which includes a built-in workaround for the cabwiz issue, a strong requirement for OAC applications as well as it relies on and extends the standard localization infrastructure provided by .NET Compact Framework.&lt;/p&gt;  &lt;p&gt;With &lt;strong&gt;CabWizFixer&lt;/strong&gt;, the Basic Catalog installer will work as expected. After install the tool, you just need to rebuild the installer and the new generated cab will install all the right files on the right location.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;CabWizFixer&lt;/strong&gt; is a experimental tool and it&#39;s provided &amp;quot;as is&amp;quot; with no warranties whatsoever. If you want to try it, here is the command-line installer:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://www.mobilepractices.net/cabwizfixerinstaller.zip&quot; target=&quot;_blank&quot;&gt;CabWizFixerInstaller.zip (18k)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For uninstall it just launch from a command-line console:&lt;/p&gt;  &lt;pre class=&quot;code&quot;&gt;CabWizFixerInstaller.exe /uninstall&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I hope this tool makes your life a little bit easier :) &lt;br /&gt;  &lt;br /&gt;Take care!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/6624275992563825399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/6624275992563825399' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/6624275992563825399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/6624275992563825399'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2008/09/cabwizfixer-support-for-files-with-same.html' title='CabWizFixer: Support for files with the same name on Smart Device CAB installers'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/mobilepractices/SPPw64wW7OI/AAAAAAAAAJM/t9RGHaHqPLk/s72-c/image6.png?imgmax=800" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-9022438878183996309</id><published>2008-09-01T11:29:00.002-03:00</published><updated>2008-10-15T09:44:56.699-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><category scheme="http://www.blogger.com/atom/ns#" term="OAC"/><title type='text'>Orientation Aware Control 2008 Released!</title><content type='html'>&lt;p&gt;Just last weekend we shipped &lt;a href=&quot;http://www.orientationaware.net/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Orientation Aware Control 2008&lt;/strong&gt;&lt;/a&gt;, the latest stable version of the popular control for .Net Compact Framework from &lt;strong&gt;Clarius&lt;/strong&gt;, formerly part of the Microsoft Patterns &amp;amp; Practices Mobile Client Software Factory.&lt;/p&gt;  &lt;p&gt;You can find it in three different flavors:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;OAC 2008 Community Edition&lt;/strong&gt;: A free version targeting small application development, supporting different horizontal and vertical layouts for the default form factor. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;OAC 2008 Professional Edition&lt;/strong&gt;: Commercial version of the product. Take a look at &lt;a href=&quot;http://www.orientationaware.net/features.html&quot; target=&quot;_blank&quot;&gt;the features comparison chart&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;OAC 2008 Trial Edition&lt;/strong&gt;: Fully functional Professional Edition that randomly shows a trial message. &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Why should I use OAC 2008 over the p&amp;amp;p OAC?&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;OAC 2008 &lt;/strong&gt;is an evolution of the original &lt;strong&gt;p&amp;amp;p OAC&lt;/strong&gt;. Beyond some bug fixes and VB.Net and Smartphone support, you can keep in mind:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Visual Studio 2008 &lt;/strong&gt;designer integration. As far as it targets VS 2005, p&amp;amp;p OAC doesn&#39;t support VS 2005. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;.Net CF 3.5&lt;/strong&gt; support &lt;/li&gt;    &lt;li&gt;It still being compatible with &lt;strong&gt;VS 2005&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Includes &lt;strong&gt;SipAwareContainer&lt;/strong&gt;, a pretty cool panel control which detects the software input panel (SIP) status and resizes itself accordingly. &lt;/li&gt;    &lt;li&gt;You can store layouts on satellite assemblies for reduced download time and use a tool for create separate .cab installers for each resolution/culture. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Wanna try it?&lt;/strong&gt; You can go to the &lt;strong&gt;&lt;a href=&quot;http://www.orientationaware.net/downloads.html&quot; target=&quot;_blank&quot;&gt;downloads page&lt;/a&gt;&lt;/strong&gt; and take a look at it. &lt;/p&gt;  &lt;p&gt;If you have previously installed &lt;strong&gt;&lt;a href=&quot;http://www.mobilepractices.com/2008/05/orientation-aware-control-june-2008-rc.html&quot; target=&quot;_blank&quot;&gt;Orientation Aware Control June 2008 RC Trial Edition&lt;/a&gt;&lt;/strong&gt; over both VS2008 and VS2005 &lt;strong&gt;on the same machine&lt;/strong&gt;, you should verify after uninstalling it and &lt;strong&gt;before installing OAC 2008 &lt;/strong&gt;that the following files have been removed from your system: &lt;/p&gt;  &lt;p&gt;&lt;code&gt;Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\Clarius.UI.OrientationAware.Designer.2.0.dll (v.2.0.2.0)     &lt;br /&gt;Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\DesignerMetadata\Clarius.UI.OrientationAware.*.asmmeta.dll &lt;/code&gt;&lt;/p&gt;  &lt;p&gt;If any of these files remain on your system, please close Visual Studio and delete all of them before installing Orientation Aware Control 2008.&lt;/p&gt;  &lt;p&gt;Hope you like the product. Remember to give us your feedback on the &lt;strong&gt;&lt;a href=&quot;http://forums.clariusconsulting.net/viewforum.php?f=3&quot; target=&quot;_blank&quot;&gt;OAC Forum&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;I&#39;ll continue posting about some of the features and usages of the OAC, so stay tuned!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/9022438878183996309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/9022438878183996309' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/9022438878183996309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/9022438878183996309'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2008/09/orientation-aware-control-2008-released.html' title='Orientation Aware Control 2008 Released!'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-7138873087573371438</id><published>2008-05-06T22:14:00.001-03:00</published><updated>2008-05-06T22:14:36.809-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="OAC"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>Orientation Aware Control June 2008 RC Trial Edition available for download!</title><content type='html'>&lt;p&gt;Some time ago the best way to deal with &lt;strong&gt;screen rotation &lt;/strong&gt;in your mobile application was to detect it programmatically and re-layout the screen at runtime, moving and resizing the controls and even changing their content &lt;strong&gt;manually&lt;/strong&gt;, or directly showing a different view with a completely different layout according to the new orientation. An easier option was to use anchoring and docking, which could be good enough in a few cases, but not in most of them. This challenge was not easy at all, and that was the reason because many developers decided to directly forget screen rotation and delivery applications that are almost unusable when the screen is rotated.&lt;/p&gt; &lt;p&gt;What about applications which should run on devices with &lt;strong&gt;different form factors&lt;/strong&gt;? Once again, anchoring and docking are not enough. Remember that in a mobile application you should design your UI thinking from the scratch in order to take &lt;strong&gt;full advantage of the screen and maximize the user experience&lt;/strong&gt;. &lt;/p&gt; &lt;p&gt;One of the main advantages of using Visual Studio 2005/2008 and the .Net Compact Framework is the &lt;strong&gt;design-time experience &lt;/strong&gt;which is great for a single form-factor / orientation, but it&#39;s almost useless when you need to design a solution thinking on a really &lt;strong&gt;outstanding mobile user experience&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;When we worked on the &lt;strong&gt;Microsoft Patterns &amp;amp; Practices Mobile Client Software Factory&lt;/strong&gt;, this challenge was part of our focus, and the need for a &lt;strong&gt;design-time experience &lt;/strong&gt;in order to support rotation and multiple form factors was the goal. The former &lt;strong&gt;Orientation Aware Control&lt;/strong&gt; was the first approach towards this goal. It&#39;s indeed part of the Mobile Client Software Factory, and by extending the Localization feature of the Visual Studio designer it provides a design-time approach for supporting screen rotation and multiple form-factors for Windows Mobile 5.0 Pocket PC and Visual Studio 2005. It is, in fact, one of the most popular application blocks of the MCSF, and &lt;strong&gt;it has changed the way in what .Net Compact Framework developers should deal with screen rotation and multiple form factors support&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Last year, &lt;a href=&quot;http://www.clariusconsulting.net/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Clarius Consulting&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;released a new and improved &lt;a href=&quot;http://www.orientationaware.net/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Orientation Aware Control&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;including support for &lt;strong&gt;Pocket PC 2003 &lt;/strong&gt;and &lt;strong&gt;Windows CE 5.0&lt;/strong&gt;. It was developed by the same people who worked on the MCSF Orientation Aware Control lead by &lt;a href=&quot;http://www.clariusconsulting.net/blogs/kzu/&quot; target=&quot;_blank&quot;&gt;Daniel Cazzulino&lt;/a&gt;. Unfortunately, this version was released before Orcas, and it didn&#39;t include any support for Visual Studio 2008, which was one of the most required features for the next version.&lt;/p&gt; &lt;p&gt;I&#39;m glad to announce that we&#39;ve just published the &lt;a href=&quot;http://www.orientationaware.net/downloads.html&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Orientation Aware Control June 2008 RC Trial Edition&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;!!&lt;/strong&gt; This is a new preview of the June Release Candidate, fully functional with a trial message at runtime. &lt;strong&gt;This version does include Visual Studio 2008 design-time support!&lt;/strong&gt; and several bug fixes and improvements. It&#39;s good to know that this version works with both VS2005 and VS2008, and it includes support for .Net Compact Framework 2.0 and 3.5!&lt;/p&gt; &lt;p&gt;What are you waiting for? Go ahead and &lt;a href=&quot;http://www.orientationaware.net/downloads.html&quot; target=&quot;_blank&quot;&gt;download it!&lt;/a&gt; Your feedback will be very appreciated! &lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/7138873087573371438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/7138873087573371438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/7138873087573371438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/7138873087573371438'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2008/05/orientation-aware-control-june-2008-rc.html' title='Orientation Aware Control June 2008 RC Trial Edition available for download!'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-1876381350438283395</id><published>2008-03-18T17:46:00.001-03:00</published><updated>2008-03-18T17:46:10.745-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="samples"/><category scheme="http://www.blogger.com/atom/ns#" term="training"/><title type='text'>How to allow minimize being in a modal dialog on Pocket PC using the .Net CF</title><content type='html'>&lt;p&gt;An interesting question came up today at the Mobility Metro train the trainers workshop in London: How can we allow the Pocket PC user to minimize the application even when he is in a modal dialog?&lt;/p&gt; &lt;p&gt;This is a particular requirement received by an attendee, and it was a little bit challenging problem. I did a small spike on this, and this is my suggested approach. &lt;/p&gt; &lt;p&gt;First of all, we cannot use &lt;strong&gt;&lt;em&gt;Form.ShowDialog()&lt;/em&gt;&lt;/strong&gt;, because it shows the &lt;strong&gt;&#39;OK&#39; &lt;/strong&gt;button at the top right corner, and ideally we should keep the standard &lt;strong&gt;&#39;X&#39; &lt;/strong&gt;smart minimize button there.&lt;/p&gt; &lt;p&gt;The solution is to use &lt;strong&gt;&lt;em&gt;Form.Show()&lt;/em&gt;&lt;/strong&gt; and handle the &lt;strong&gt;&lt;em&gt;Form.Closed&lt;/em&gt; &lt;/strong&gt;event of the dialog. We also should take care of the dialog &lt;strong&gt;&lt;em&gt;Owner&lt;/em&gt;&lt;/strong&gt; property in order to show only one entry on the &lt;strong&gt;Running Programs List&lt;/strong&gt;.&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;private void &lt;/span&gt;menuItem1_Click(&lt;span style=&quot;color: blue&quot;&gt;object &lt;/span&gt;sender, &lt;span style=&quot;color: #2b91af&quot;&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt;{&lt;br /&gt;    &lt;span style=&quot;color: #2b91af&quot;&gt;Dialog &lt;/span&gt;dialog = &lt;span style=&quot;color: blue&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;Dialog&lt;/span&gt;();&lt;br /&gt;    &lt;br /&gt;    &lt;span style=&quot;color: green&quot;&gt;//Prepare the app to be &#39;Running Programs Aware&#39;&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: blue&quot;&gt;this&lt;/span&gt;.Text = dialog.Text;&lt;br /&gt;    dialog.Owner = &lt;span style=&quot;color: blue&quot;&gt;this&lt;/span&gt;;&lt;br /&gt;    &lt;br /&gt;    &lt;span style=&quot;color: green&quot;&gt;//Subscribe to the dialog closed event&lt;br /&gt;    &lt;/span&gt;dialog.Closed += &lt;span style=&quot;color: blue&quot;&gt;delegate&lt;/span&gt;(&lt;span style=&quot;color: blue&quot;&gt;object &lt;/span&gt;s2, &lt;span style=&quot;color: #2b91af&quot;&gt;EventArgs &lt;/span&gt;e2)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style=&quot;color: green&quot;&gt;//Do something when the dialog is closed&lt;br /&gt;        &lt;/span&gt;label1.Text = &lt;span style=&quot;color: blue&quot;&gt;string&lt;/span&gt;.Format(&lt;span style=&quot;color: #a31515&quot;&gt;&quot;DialogResult = {0}&quot;&lt;/span&gt;, dialog.DialogResult.ToString());&lt;br /&gt;        &lt;span style=&quot;color: green&quot;&gt;//Update the form text back&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: blue&quot;&gt;this&lt;/span&gt;.Text = &lt;span style=&quot;color: #a31515&quot;&gt;&quot;MainForm&quot;&lt;/span&gt;;&lt;br /&gt;    };&lt;br /&gt;    dialog.Show();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Here you can find the spike sourcecode:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.mobilepractices.net/AllowMinimizeDialogSample.zip&quot; target=&quot;_blank&quot;&gt;AllowMinimizeDialog sample code (~12K)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/1876381350438283395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/1876381350438283395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/1876381350438283395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/1876381350438283395'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2008/03/how-to-allow-minimize-being-in-modal.html' title='How to allow minimize being in a modal dialog on Pocket PC using the .Net CF'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-7811557731352236215</id><published>2008-03-09T20:29:00.001-02:00</published><updated>2008-03-09T20:31:11.260-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="general"/><category scheme="http://www.blogger.com/atom/ns#" term="training"/><title type='text'>Going back to London for Microsoft Mobility Metro 2008 Train The Trainers (TTT)</title><content type='html'>&lt;p&gt;Well, I&#39;m glad to say that I&#39;ve been invited to be instructor in the &lt;strong&gt;Microsoft Mobility Metro&lt;/strong&gt; &quot;Train the Trainers&quot; in UK. It will be my second time in London and I&#39;m sure it&#39;ll be as great as the previous one was.&lt;/p&gt; &lt;p&gt;This will be a three days mobility training targeting european instructors audience, that will start on March 18th. The agenda includes several topics, starting with Windows Mobile platform concepts, moving thru the tools, managed code for devices, SQL Compact Edition, Optimization and guidance, and an interesting review of what&#39;s coming on in mobile development. Hope to see some of you there.&lt;/p&gt; &lt;p&gt;These days are very busy for me, but I&#39;ll try to keep blogging. Stay tuned!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/7811557731352236215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/7811557731352236215' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/7811557731352236215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/7811557731352236215'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2008/03/going-back-to-london-for-mobility-metro.html' title='Going back to London for Microsoft Mobility Metro 2008 Train The Trainers (TTT)'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-3654835287826632299</id><published>2008-03-01T11:17:00.001-02:00</published><updated>2008-03-01T11:17:36.059-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="samples"/><title type='text'>Looking for an OpenFileDialog for Smartphone? Porting the MobilePractices.OpenFileDialogEx from PocketPC to Smartphone</title><content type='html'>&lt;p&gt;This morning I&#39;ve ported the &lt;a href=&quot;http://www.mobilepractices.com/2008/02/custom-openfiledialog-implementation.html&quot; target=&quot;_blank&quot;&gt;MobilePractices.OpenFileDialogEx custom implementation of the OpenFileDialog&lt;/a&gt; to smartphone. Strictly, I&#39;ve ported it to Windows Mobile 6 Standard Edition. And I want to remark that &lt;strong&gt;Smartphone doesn&#39;t even support the standard OpenFileDialog&lt;/strong&gt;. If you try to use the standard version a &lt;em&gt;&lt;strong&gt;NotSupportedException &lt;/strong&gt;&lt;/em&gt;is raised. So I thought this port should be extremely useful, and it&#39;s additionally fully implemented using the .Net Compact Framework (.Net CF).&lt;/p&gt; &lt;p&gt;The port was pretty much straightforward, besides the expected design constrains. It took me exactly 75 minutes. What were the main issues I have during the process? First of all, the need to make it usable in the smartphone platform. It doesn&#39;t make sense to have the same structure with one combo box, the list, and the textbox at the bottom. So, my design decision was to leave the list. I know you may have a new smartphone device which has a qwerty keyboard, but I think it still being the simplest option just to browse the file system. Actually I used to do that even in my laptop. And if I keep the textbox, it&#39;ll leave less space for the list, and I think that&#39;s critical here. Anyway, if you prefer you can bring the textbox back from the pocket pc version.&lt;/p&gt; &lt;p&gt;The second main issue was how to provide the quick go back to any directory on the current path without the combo box. I&#39;ve decided to implement this using the right menu, the same way File Explorer does.&lt;/p&gt; &lt;p&gt;It looks this way in the Windows Mobile 6 Standard Edition emulator:&lt;/p&gt; &lt;p&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;248&quot; alt=&quot;image&quot; src=&quot;http://lh6.google.com/mobilepractices/R8lXah2KEiI/AAAAAAAAAHo/A2JmT5N0pN8/image%5B3%5D?imgmax=800&quot; width=&quot;201&quot; border=&quot;0&quot;&gt; &lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;242&quot; alt=&quot;image&quot; src=&quot;http://lh6.google.com/mobilepractices/R8lXbh2KEjI/AAAAAAAAAHw/fxFi4n0TuEU/image%5B7%5D?imgmax=800&quot; width=&quot;208&quot; border=&quot;0&quot;&gt; &lt;/p&gt; &lt;p&gt;Not bad! But it still being just a starting point. There are many features missing which you probably will find critical in your app. As you can probably noticed, the file list is not sorted, there are no InitialDirectory property, and it doesn&#39;t cached any directory info to improve the performance during the browsing. Feel free to add any feature you want. The source code is here:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://www.mobilepractices.net/OpenFileDialogSample.Smartphone.zip&quot; target=&quot;_blank&quot;&gt;MobilePractices.OpenFileDialogEx.Smartphone Sourcecode (~19k)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/3654835287826632299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/3654835287826632299' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/3654835287826632299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/3654835287826632299'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2008/03/looking-for-openfiledialog-for.html' title='Looking for an OpenFileDialog for Smartphone? Porting the MobilePractices.OpenFileDialogEx from PocketPC to Smartphone'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4366671410070576626.post-5264225786252837182</id><published>2008-02-25T00:46:00.001-02:00</published><updated>2008-02-25T00:46:50.176-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".Net CF"/><category scheme="http://www.blogger.com/atom/ns#" term="GUI"/><category scheme="http://www.blogger.com/atom/ns#" term="samples"/><title type='text'>A custom OpenFileDialog implementation that browses the full file system: MobilePractices.OpenFileDialogEx</title><content type='html'>&lt;p&gt;Doing a spike yesterday I had the need to use &lt;strong&gt;&lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/system.windows.forms.openfiledialog.aspx&quot; target=&quot;_blank&quot;&gt;OpenFileDialog&lt;/a&gt; &lt;/strong&gt;to browse and select an existing file. The problem was that I placed the files on the device root. And oops! &lt;u&gt;the Windows Mobile implementation&lt;/u&gt; of the &lt;strong&gt;&lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/system.windows.forms.openfiledialog.aspx&quot; target=&quot;_blank&quot;&gt;OpenFileDialog&lt;/a&gt;&lt;/strong&gt;, &lt;u&gt;this is not a .Net Compact Framework limitation&lt;/u&gt;, doesn&#39;t allow the user to browse the root. Actually, it doesn&#39;t allow the user to browse the whole file system, it just let you browse &lt;em&gt;My Documents &lt;/em&gt;subfolders and &lt;em&gt;Storage cards&lt;/em&gt;. Very bothering in some cases.&lt;/p&gt; &lt;p&gt;Indeed, this is not the first time I have to deal with it. An I thought I should be just one of many developers with the same problem. So I decided to implement a custom &lt;strong&gt;&lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/system.windows.forms.openfiledialog.aspx&quot; target=&quot;_blank&quot;&gt;OpenFileDialog&lt;/a&gt;&lt;/strong&gt; in c# targeting &lt;em&gt;&lt;strong&gt;PocketPC&lt;/strong&gt;&lt;/em&gt;, but &lt;em&gt;easily portable to &lt;strong&gt;Smartphone&lt;/strong&gt;&lt;/em&gt;, and customizable and extensible as well. Wow! I think I should have said that first of all, &lt;em&gt;&lt;u&gt;it&#39;s a very simple piece of code&lt;/u&gt;&lt;/em&gt;. And that&#39;s its best feature. You can use it as a starting point.&lt;/p&gt; &lt;p&gt;I&#39;ve not implemented the full Filter feature of the original &lt;strong&gt;&lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/system.windows.forms.openfiledialog.aspx&quot; target=&quot;_blank&quot;&gt;OpenFileDialog&lt;/a&gt; &lt;/strong&gt;because I think it&#39;s not a common scenario on mobile development and it make the UI overcrowded. Instead, the Filter property of my &lt;strong&gt;MobilePractices.OpenFileDialogEx&lt;/strong&gt; implementation, is just a search pattern.&lt;/p&gt; &lt;p&gt;The MobilePractices.OpenFileDialogEx looks this way:&lt;/p&gt; &lt;p&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;351&quot; alt=&quot;image&quot; src=&quot;http://lh3.google.com/mobilepractices/R8IsFbS_3DI/AAAAAAAAAHY/BbbILVevGXc/image3?imgmax=800&quot; width=&quot;276&quot; border=&quot;0&quot;&gt; &lt;/p&gt; &lt;p&gt;The dialog title can be changed as you wish thru the Text property. At the top of the screen, you can see a ComboBox which can be used to quickly go back to an specific folder.&lt;/p&gt; &lt;p&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;115&quot; alt=&quot;image&quot; src=&quot;http://lh6.google.com/mobilepractices/R8IsGLS_3EI/AAAAAAAAAHg/flLy1IcNK_o/image7?imgmax=800&quot; width=&quot;263&quot; border=&quot;0&quot;&gt; &lt;/p&gt; &lt;p&gt;Taking a look at the first snapshot you can notice that I&#39;m &lt;strong&gt;identifying storage cards &lt;/strong&gt;with a different icon. To identify a storage card you can check if the &lt;em&gt;&lt;strong&gt;FileInfo.Attributes&lt;/strong&gt;&lt;/em&gt; for it are &lt;strong&gt;&lt;em&gt;Directory &lt;/em&gt;&lt;/strong&gt;and &lt;strong&gt;&lt;em&gt;Temporary&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;if &lt;/span&gt;((info.Attributes &amp;amp; (&lt;span style=&quot;color: #2b91af&quot;&gt;FileAttributes&lt;/span&gt;.Directory | &lt;span style=&quot;color: #2b91af&quot;&gt;FileAttributes&lt;/span&gt;.Temporary))&lt;br /&gt;    == (&lt;span style=&quot;color: #2b91af&quot;&gt;FileAttributes&lt;/span&gt;.Directory | &lt;span style=&quot;color: #2b91af&quot;&gt;FileAttributes&lt;/span&gt;.Temporary))&lt;br /&gt;    &lt;span style=&quot;color: blue&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;FileSystemKind&lt;/span&gt;.StorageCard;&lt;/pre&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;How to continue with this is up to you. You can add an InitialDirectory property, or some way to keep the current path along the application run, or a modified version which allows you to select a directory instead of a file. Or you can take the code and port it to smartphone. Probably I&#39;ll do that soon in a new post. Once more, this is just a starting point!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Here you have the source code including a sample application:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.mobilepractices.net/OpenFileDialogSample.SourceCode.zip&quot; target=&quot;_blank&quot;&gt;OpenFileDialogSample.SourceCode.zip (aprox.19kb)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Enjoy!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://www.mobilepractices.com/feeds/5264225786252837182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4366671410070576626/5264225786252837182' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/5264225786252837182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4366671410070576626/posts/default/5264225786252837182'/><link rel='alternate' type='text/html' href='http://www.mobilepractices.com/2008/02/custom-openfiledialog-implementation.html' title='A custom OpenFileDialog implementation that browses the full file system: MobilePractices.OpenFileDialogEx'/><author><name>Jose Gallardo</name><uri>http://www.blogger.com/profile/06990898488326736094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='19' height='32' src='http://www.vl-abogados.com.ar/mobilepractices/josecusco.jpg'/></author><thr:total>5</thr:total></entry></feed>