<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Wot u do with .net  : UKDPETeam</title><link>http://blogs.msdn.com/paulfo/archive/tags/UKDPETeam/default.aspx</link><description>Tags: UKDPETeam</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>PDC 09 attendees get free Win7 laptop</title><link>http://blogs.msdn.com/paulfo/archive/2009/11/18/pdc-09-attendees-get-free-win7-laptop.aspx</link><pubDate>Wed, 18 Nov 2009 17:41:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9924408</guid><dc:creator>paulfo</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9924408.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9924408</wfw:commentRss><description>&lt;p&gt;Steven Sinofsky announced at PDC09 day 2 keynote, that all PDC 09 attendees would receive a MSFT designed, Acer built, Windows 7 laptop free of charge.&lt;/p&gt;  &lt;p&gt;The laptop has a touch screen, full sensor and location functionality, is 64-bit and fully loaded up with Office 2010 beta and lots more.&lt;/p&gt;  &lt;p&gt;Designed to enable application developers to get to grips with Windows 7 features, the keynote audience were first stunned and then jubilant at the gift.&lt;/p&gt;  &lt;p&gt;To get going on Windows 7 application enhancement take a look &lt;a href="http://bit.ly/sSlF"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ebfdb1cf-bf49-44ef-a747-64cd6eee95d6" class="wlWriterEditableSmartContent"&gt;&lt;div id="63915557-25d1-48bc-b8a8-ad2e325eed77" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=0jd_Y9vxY24" target="_new"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/paulfo/WindowsLiveWriter/PDC09attendeesgetfreeWin7laptop_F8CE/videoba1968d6d43a.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('63915557-25d1-48bc-b8a8-ad2e325eed77'); 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/0jd_Y9vxY24&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/0jd_Y9vxY24&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;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924408" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/Video/default.aspx">Video</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/PDC2008/default.aspx">PDC2008</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPETeam/default.aspx">UKDPETeam</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPE/default.aspx">UKDPE</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Paul+Foster/default.aspx">Paul Foster</category></item><item><title>Widget development in Windows Mobile 6.5</title><link>http://blogs.msdn.com/paulfo/archive/2009/10/22/widget-development-in-windows-mobile-6-5.aspx</link><pubDate>Thu, 22 Oct 2009 08:42:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911203</guid><dc:creator>paulfo</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9911203.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9911203</wfw:commentRss><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/paulfo/archive/2009/10/22/widget-development-in-windows-mobile-6-5.aspx";digg_title = "Widget development in Windows Mobile 6.5";digg_bgcolor = "#FFFFFF";digg_skin = "normal";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;I had two sessions to present at &lt;a href="http://overtheair09.org" target="_blank"&gt;Over The Air 09&lt;/a&gt;. The first was all about the new &lt;a href="http://wotudo.net/files/folders/how2/entry487.aspx" target="_blank"&gt;Widget runtime included in Windows Mobile 6.5&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The runtime brings a Microsoft implementation of W3C Widget support to Windows Mobile for the first time. Our implementation is coupled with the launch of our very own mobile application Marketplace – this goes live with the launch of Windows Mobile 6.5 devices on the 6th Oct – allowing Widgets and native code applications (&amp;lt;10mb in size) to be sold directly to Windows Mobile 6 and upward devices.&lt;/p&gt;  &lt;p&gt;If you are new to Widgets then here is a summary: The widget ideal is to be able to build mobile applications using web development skills – HTML, Script and AJAX. They are installed on the device and look like a native application with just enough device integration to use soft keys and device state.&lt;/p&gt;  &lt;p&gt;So what is in our Widget implementation.&lt;/p&gt;  &lt;p&gt;Firstly, we&amp;#160; are using the Internet Explorer 6 HTML presentation engine (HTML Control). This is coupled with most of the IE8 script engine. These are brought together in the Widget runtime application called RIAHOST.EXE.&lt;/p&gt;  &lt;p&gt;RIAHost adds other stuff, including shell support for devices with touch, soft keys and importantly the Widget object.&lt;/p&gt;  &lt;p&gt;The Widget object allows the Widget programmer to reach beyond the Widget into the state of the device. Being able to determine things like signal and battery strength. If the widget is in focus or hidden. As well as many other things.&lt;/p&gt;  &lt;p&gt;Widgets are brilliant but I immediately want to do more with my Widgets.&lt;/p&gt;  &lt;p&gt;I think, for Widgets to be successful the developer must make them Smart Widgets. Rather than just using them as installed ‘web pages’ Widgets need to know when to start and when to stop doing stuff. The widget that continually calls a web service data update even when it is no longer ‘visible’ to the end user is going to drain the device battery and drive up the users data plan bill!&lt;/p&gt;  &lt;p&gt;With the Widget object, we can get hold of when the device is in focus and when it is hidden – allowing us to start or stop doing stuff. We can also tell if the user is roaming or on their home network – a smart widget might do less data traffic when roaming, or at least remind the user of the potential cost while roaming.&lt;/p&gt;  &lt;p&gt;Widgets can use a local data persistence. Each field stored can be up to 4000bytes. This allows Widgets to have another trick – the perceived performance trick. Performance exists into states – perceived performance is the performance the user sees on their device. Real performance is how practical it is to make a device really do something. They are two different things, with perceived performance being more important than real performance. A smart Widget developer will ensure the perceived performance of their widget is fast. They can do this by making only asynchronous web service calls and by using only stored state on startup – thus removing any ‘web update’ delay.&lt;/p&gt;  &lt;p&gt;What I like even more about the Widget object is that it can be extended. This means over time as more W3C standard interfaces for device service (like geolocation for example) are delivered, then this functionality can be added to WM 6.5 devices. It also means that WM 6.5 devices are open for developers to&amp;#160; innovate and deliver some leading edge solutions!&lt;/p&gt;  &lt;p&gt;Let me give you a quick run down of how this works.&lt;/p&gt;  &lt;p&gt;Are you a COM programmer? Probably not – so let me just tell you something. Windows has all manner of different levels of interoperability, applicable to many different technologies and skill sets. At the fundamental core of Windows is COM. If you can’t extend or subvert Windows functions by any other means you are 99% likely to be able to do it at the COM level.&lt;/p&gt;  &lt;p&gt;The Widget object is implemented with support for the IDispatchEX COM interface. IDispatch is the typical COM automation interface. IDispatchEX – or EXpanded – allows a COM object’s IDispatch interface – which normally reports a static list of method calls – to be extended at runtime with more method calls.&lt;/p&gt;  &lt;p&gt;In a nut shell, Widget has a base level of functionality, which by using the IDispatchEX functionality we can add more functionality too. Quite literally, your new object’s methods appear on the Widget object. For example, Widget.MyMethod().&lt;/p&gt;  &lt;p&gt;How do you do this? Well because Widget has the IDispatchEX, all we have to do is implement a normal IDispatch on our component. This presents method and properties that can be called from our component and that will appear on Widget.&lt;/p&gt;  &lt;p&gt;We have to create a CAB installation file for our component – Widgets aren’t allowed to have ActiveX components in their installation package. This does present an initial installation issue, but basically your Widget needs to test for the existence of the dependant component/s and if they aren’t there redirect the user to the CAB URL so that this can be installed on first use. There after, the component/s will be available to the Widget and any other Widgets that want them.&lt;/p&gt;  &lt;p&gt;There is one more ‘special bit’. To tell Widget that our component is designed to extend it we have to set a registry key. This can be easily done by including the key definition in the CAB installation file for the component. &lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\Widgets\ObjectModels\&amp;lt;ObjectName&amp;gt;]&amp;#160;&amp;#160;&amp;#160; &amp;quot;CLSID&amp;quot;=&amp;quot;{GUID}“&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Where GUID is the GUID of your component control implementation.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;A small aside here. My device was running a near final but not final build of Windows Mobile 6.5. When I looked in the device registry to set this key I discovered my ObjectModels was actually BuiltinObjectModels. All the documentation I have seen says it is ObjectModels, but adding the above key to BuiltinObjectModels worked for me :-) Once it worked I didn’t go back to try doing it with a ObjectModels key – sorry pressures of work.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;With that done, and the component installed, our Widget can take advantage of our new functionality using script like this:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;Var myObj = widget.createObject(“ObjectName”);&lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;myObj.MyMethod();&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What might that new functionality be? Well it could be new W3C bits as they are defined. But what about that intellectual property of yours that you’d prefer not to implement in script for the world to easily see. Or many you just need some additional native code features to help exploit device capability.&lt;/p&gt;  &lt;p&gt;Using this feature means you can achieve all sorts of exciting stuff with your Widgets – or in fact, your exciting stuff can become the basis for other peoples widgets too.&lt;/p&gt;  &lt;p&gt;I’m currently exploring an Augmented Reality framework that could be implemented for Widgets to exploit. This needs some camera integration not available to the Widget script engine. A widget extension object might just be the way to go.&lt;/p&gt;  &lt;p&gt;I’m posting my extended widget source code on the &lt;a href="http://wotudo.net/files/folders/how2/entry504.aspx" target="_blank"&gt;downloads section&lt;/a&gt; of this site. Please also see the session slides PDF for more detail and do take a look a the &lt;a href="http://windowsteamblog.com/blogs/windowsphone/default.aspx" target="_blank"&gt;WindowsMobile team’s blog&lt;/a&gt; – Jorge is doing an awesome job filling in the detail on &lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2009/09/22/widget-anatomy-performance-and-battery-life-the-final-frontier.aspx" target="_blank"&gt;Widget development&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;There are also some helpful projects on &lt;a href="http://www.codeplex.com/site/search?projectSearchText=widget" target="_blank"&gt;Codeplex&lt;/a&gt; which provide Widget packaging, emulation and project templates for VS2008 and Expression Web.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911203" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPETeam/default.aspx">UKDPETeam</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPE/default.aspx">UKDPE</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category></item><item><title>sidebar: Project Mobile AR</title><link>http://blogs.msdn.com/paulfo/archive/2009/10/22/sidebar-project-mobile-ar.aspx</link><pubDate>Thu, 22 Oct 2009 08:40:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911202</guid><dc:creator>paulfo</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9911202.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9911202</wfw:commentRss><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/paulfo/archive/2009/10/22/sidebar-project-mobile-ar.aspx";digg_title = "sidebar: Project Mobile AR";digg_bgcolor = "#FFFFFF";digg_skin = "normal";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;As discussed at the recent &lt;a href="http://overtheair.org" target="_blank"&gt;OTA09&lt;/a&gt; event, I’m working to build out an AR platform on Windows Mobile.&amp;#160; This is a ‘skunk works’ project filling my waking hours between work and the family.&lt;/p&gt;  &lt;p&gt;Currently, I’m exploring the DirectShow capabilities of the Windows Mobile device. DirectShow allows us to get hold of the device camera and provides a mechanism, via filters, to manipulate the video stream before rendering. &lt;/p&gt;  &lt;p&gt;I currently envision building a transform filter that will enable a form of the Windows Video Mixing Renderer on Windows Mobile. The filter would take layer definitions, graphics or video as an input for the AR elements.&lt;/p&gt;  &lt;p&gt;Performance is going to be a killer on these devices, so will see how rich the VMR functionality can be.&lt;/p&gt;  &lt;p&gt;I haven’t done any serious DirectShow stuff, my only experience comes from some work nearly a decade ok, so I’m ramping up my skills.&lt;/p&gt;  &lt;p&gt;One interesting Bing find, and a proof point for my envisioned solution, is &lt;a href="http://alexmogurenko.com/blog/" target="_blank"&gt;Alex Mogurenko’s&lt;/a&gt; excellent DirectShow.NetCF project. Alex provides two DLLs which implement a custom SampleGrabber filter, making it possible to build a simple .NET CF application that can display video preview and capture stills from the camera.&lt;/p&gt;  &lt;p&gt;My little WM6.5 test project is &lt;a href="http://wotudo.net/files/folders/how2/entry531.aspx" target="_blank"&gt;here&lt;/a&gt; (.Net CF 3.5 app). It works well, performance lags compared to the native HTC Camera application, but not by much. I need to explore this in more detail.&lt;/p&gt;  &lt;p&gt;Following Alex’s lead, I’ll be implementing my own filter next and aiming in the end to provide an AR solution to .NET CF developers. Once I get this going I’ll publish the project on Codeplex.&lt;/p&gt;  &lt;p&gt;TTFN&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911202" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPETeam/default.aspx">UKDPETeam</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPE/default.aspx">UKDPE</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Augmented+Reality/default.aspx">Augmented Reality</category></item><item><title>Making your app shine on Windows 7: Tabbed Thumb Nails</title><link>http://blogs.msdn.com/paulfo/archive/2009/10/22/making-your-app-shine-on-windows-7-tabbed-thumb-nails.aspx</link><pubDate>Thu, 22 Oct 2009 08:38:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911200</guid><dc:creator>paulfo</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9911200.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9911200</wfw:commentRss><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/paulfo/archive/2009/10/22/making-your-app-shine-on-windows-7-tabbed-thumb-nails.aspx";digg_title = "Making your app shine on Windows 7: Tabbed Thumb Nails";digg_bgcolor = "#FFFFFF";digg_skin = "normal";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;This post is one in a series of posts covering the &lt;a href="http://code.msdn.microsoft.com/WindowsAPICodePack" target="_blank"&gt;Windows API Code Pack&lt;/a&gt;. The code pack provides a managed code framework for using the new native Windows 7 features.&lt;/p&gt;  &lt;p&gt;In this post we’ll examine how to implement thumbnail previews for a tabbed application UI. We’ll add to each thumbnail preview some buttons to control our application directly from the preview thumbnail. You need to be using .Net 3.5 SP1.&lt;/p&gt;  &lt;p&gt;I used a simple C# Winforms project to test this all out. You’ll need to add five references:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;WindowsBase&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;PresentationCore&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;PresentationFramework&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;Microsoft.WindowsAPICodePack&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;Microsoft.WindowsAPICodePack.Shell&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The code pack framework provides Integration to the Windows 7 thumbnail preview via the TaskbarManager class. The class contains four methods and five properties. The methods mainly deal with the overlay of icons onto the taskbar icon and the progress bar overlay that I’m sure you are already familiar with in Windows 7.&lt;/p&gt;  &lt;p&gt;The properties are the interesting bits for using thumbnail previews. The first property is a a boolean flag – IsPlatformSupported - to indicate if the current platform your app is running on can support thumbnails. Then you have Instance and ApplicationId. Instance represents the Windows Taskbar, and ApplicationId is the unique identifier for your application.&lt;/p&gt;  &lt;p&gt;Then you have the two most useful properties; the TabbedThumbnail and ThumbnailToolbars. These get the manager class for each type allowing you to add and update the thumbnail previews associated with your application and the toolbars that may also exist for each of the previews for your application. Yes each preview could have a different toolbar for each tabbed thumbnail.&lt;/p&gt;  &lt;p&gt;To add support to your application for thumbnail previews all you have to do is populate and maintain these two collections as necessary for your application. Because the code pack framework is provided as a static library doing this is very simple. &lt;/p&gt;  &lt;p&gt;I have a tabcontrol in my Winforms app that allows me to add new tabs containing new instances of the WebBrowser control. In my add new tab button click event I run the following code:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:95980625-4c44-400f-9055-3cadbf0248c9" class="wlWriterSmartContent"&gt;   &lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; color: #000; font-size: 10pt; border-top: #000080 1px solid; border-right: #000080 1px solid"&gt;     &lt;div style="padding-bottom: 2px; padding-left: 5px; padding-right: 5px; font-family: verdana, tahoma, arial, sans-serif; background: #000080; color: #fff; font-weight: bold; padding-top: 2px"&gt;Code Snippet&lt;/div&gt;      &lt;div style="background: #ddd; max-height: 500px; overflow: auto"&gt;       &lt;ol style="padding-bottom: 0px; margin: 0px 0px 0px 2.5em; padding-left: 5px; padding-right: 0px; background: #ffffff; padding-top: 0px"&gt;         &lt;li&gt;&lt;span style="color: #2b91af"&gt;TabPage&lt;/span&gt; newTab = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TabPage&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Tab &amp;quot;&lt;/span&gt; + tabControl1.TabPages.Count + 1); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;tabControl1.TabPages.Add(newTab); &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #2b91af"&gt;WebBrowser&lt;/span&gt; wb = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WebBrowser&lt;/span&gt;(); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;wb.DocumentTitleChanged += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;(wb_DocumentTitleChanged); &lt;/li&gt;          &lt;li&gt;wb.DocumentCompleted += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WebBrowserDocumentCompletedEventHandler&lt;/span&gt;(wb_DocumentCompleted); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;wb.Navigated += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WebBrowserNavigatedEventHandler&lt;/span&gt;(wb_Navigated); &lt;/li&gt;          &lt;li&gt;wb.Dock = &lt;span style="color: #2b91af"&gt;DockStyle&lt;/span&gt;.Fill; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;wb.Navigate(textBox1.Text); &lt;/li&gt;          &lt;li&gt;newTab.Controls.Add(wb); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #008000"&gt;// Add thumbnail toolbar buttons&lt;/span&gt; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&lt;span style="color: #2b91af"&gt;TaskbarManager&lt;/span&gt;.Instance.ThumbnailToolbars.AddButtons(newTab.Handle, thumbButtonBack, thumbButtonForward, thumbButtonRefresh); &lt;/li&gt;          &lt;li&gt;&amp;#160; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&lt;span style="color: #008000"&gt;// Add a new preview&lt;/span&gt; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #2b91af"&gt;TabbedThumbnail&lt;/span&gt; preview = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TabbedThumbnail&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Handle, newTab.Handle); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #008000"&gt;// Event handlers for this preview&lt;/span&gt; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;preview.TabbedThumbnailActivated += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;TabbedThumbnailEventArgs&lt;/span&gt;&amp;gt;(preview_TabbedThumbnailActivated); &lt;/li&gt;          &lt;li&gt;preview.TabbedThumbnailClosed += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;TabbedThumbnailEventArgs&lt;/span&gt;&amp;gt;(preview_TabbedThumbnailClosed); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;preview.TabbedThumbnailMaximized += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;TabbedThumbnailEventArgs&lt;/span&gt;&amp;gt;(preview_TabbedThumbnailMaximized); &lt;/li&gt;          &lt;li&gt;preview.TabbedThumbnailMinimized += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;TabbedThumbnailEventArgs&lt;/span&gt;&amp;gt;(preview_TabbedThumbnailMinimized); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #2b91af"&gt;TaskbarManager&lt;/span&gt;.Instance.TabbedThumbnail.AddThumbnailPreview(preview); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #008000"&gt;// Select the tab in the application UI as well as taskbar tabbed thumbnail list&lt;/span&gt; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;tabControl1.SelectedTab = newTab; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #2b91af"&gt;TaskbarManager&lt;/span&gt;.Instance.TabbedThumbnail.SetActiveTab(tabControl1.SelectedTab); &lt;/li&gt;       &lt;/ol&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;As you can see. I add a new tabpage, create a new instance of a WebBrowser control. Tie some events to it – these have meaningful code in them ensuring the correct thumbnail behaviour occurs on the Taskbar – and add the browser control to the tabpage.&lt;/p&gt;  &lt;p&gt;Then I add the ThumbnailToolbars buttons. These have already been defined at class level.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c49cecd1-0b83-4dd6-bee7-e83e91fb0ef6" class="wlWriterSmartContent"&gt;   &lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; color: #000; font-size: 10pt; border-top: #000080 1px solid; border-right: #000080 1px solid"&gt;     &lt;div style="padding-bottom: 2px; padding-left: 5px; padding-right: 5px; font-family: verdana, tahoma, arial, sans-serif; background: #000080; color: #fff; font-weight: bold; padding-top: 2px"&gt;Code Snippet&lt;/div&gt;      &lt;div style="background: #ddd; max-height: 500px; overflow: auto"&gt;       &lt;ol style="padding-bottom: 0px; margin: 0px 0px 0px 2em; padding-left: 5px; padding-right: 0px; background: #ffffff; padding-top: 0px"&gt;         &lt;li&gt;&amp;#160; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ThumbnailToolbarButton&lt;/span&gt; thumbButtonBack; &lt;/li&gt;          &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ThumbnailToolbarButton&lt;/span&gt; thumbButtonForward; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ThumbnailToolbarButton&lt;/span&gt; thumbButtonRefresh; &lt;/li&gt;       &lt;/ol&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then a new instance of a TabbedThumbnail is created naming the Windows handle and the new tabpage handle. Following this the event handlers for the thumbnail toolbar buttons are attached.&lt;/p&gt;  &lt;p&gt;Our TabbedThumbnail definition is then added to the Taskbar instance’s collection of TabbedThumbnails. And finally, we ensure the new tabpage is the current tabpage in focus on the tabcontrol and on the taskbar.&lt;/p&gt;  &lt;p&gt;The rest of the code in the application ensures that when tabpages are changed in the tabcontrol the preview thumbnails are synchronised. And likewise, when preview thumbnails are selected or hovered over the correct tabpage is brought to focus.&lt;/p&gt;  &lt;p&gt;The end result lookis like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://wotudo.net/blogs/wotudo/image_11CB0883.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://wotudo.net/blogs/wotudo/image_thumb_7EE65F0B.png" width="475" height="259" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;There are all sorts of additional goodies in the TabbedThumbnail class properties that allow you to clip the bitmap and effective zoom into it as well as provide tooltips etc.&lt;/p&gt;  &lt;p&gt;Adding thumbnail previews to your applications seems a small effort for achieving one of the most visible enhancements in the Windows 7 UI. The code pack API makes it easy to do.&lt;/p&gt;  &lt;p&gt;My complete application can be downloaded from &lt;a href="http://wotudo.net/files/folders/how2/entry544.aspx" target="_blank"&gt;here&lt;/a&gt;. It is a simplified version of the code pack Thumbnail sample.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911200" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPETeam/default.aspx">UKDPETeam</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPE/default.aspx">UKDPE</category></item><item><title>Making your app shine on Windows 7: Jumplist</title><link>http://blogs.msdn.com/paulfo/archive/2009/10/22/making-your-app-shine-on-windows-7-jumplist.aspx</link><pubDate>Thu, 22 Oct 2009 08:35:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911196</guid><dc:creator>paulfo</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9911196.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9911196</wfw:commentRss><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/paulfo/archive/2009/10/22/making-your-app-shine-on-windows-7-jumplist.aspx";digg_title = "Making your app shine on Windows 7: Jumplist";digg_bgcolor = "#FFFFFF";digg_skin = "normal";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;This post is one in a series of posts covering the Windows API Code Pack. The code pack provides a managed code framework for using the new native Windows 7 features.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;After thumbnail previews the next item you’ll be looking to implement for your application is a Jumplist. A Jumplist may provide shortcuts to recent documents, frequently use documents and application functionality.&lt;/p&gt;  &lt;p&gt;Setting up a jumplist for your application is as simple as simple can be using the code pack managed API – but there are some gotchas worth noting.&lt;/p&gt;  &lt;p&gt;First, you have to have a valid active window on the taskbar before you can create your jumplist. This isn’t obvious – except when you get the code pack’s error message on first run of your modified application. Remember, in working with the new Taskbar features, you are actually providing the Taskbar with details you want it to attribute to your application. If it doesn’t know about your application, it can’t take your details.&lt;/p&gt;  &lt;p&gt;Second, the code pack API does a good job of proactive error detection. For example, it’ll test to make sure the file you want to list on your jumplist exists. If it doesn’t you get blown out before you get near the Taskbar. The same with file associations. The code pack tests for the file association relationship to your application. If it doesn’t you can’t list the file. For more details on this one, look at the code pack TaskBarDemo sample. You might wonder why this extreme protection. The answer lines in the third gotcha.&lt;/p&gt;  &lt;p&gt;Third, the known category types (Recent, Frequent) are populated by the Taskbar for your application ‘automagically’. So you only have to choose to show one of these categories in your jumplist to get the information displayed. This is because Windows maintains a recent items history infrastructure when you use the current common file dialogs( or explicitly call the relevant API). If you don’t use them (why?), you can hand code this mechanism by using the shell API SHAddToRecentDocs or the code pack’s jumplist.AddToRecent method.&lt;/p&gt;  &lt;p&gt;Fourth, the code pack’s jumplist does a lot of good stuff. This includes maintaining your jumplist against the removed items list created by the user. You may want to have all the items in the jumplist but the user can selectively remove file references from your list. It’s considered bad form to keep putting the item back when the user has removed it, jumplist ensures you don’t make this mistake. If you don’t use jumplist you have to check the removedDestinations property and modify the list yourself.&lt;/p&gt;  &lt;p&gt;Now lets look at the code. Below is the specific parts of a C# Winforms application showing the creation of a jumplist:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1a3f340c-075a-4bfb-8c11-47c874c73707" class="wlWriterSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: #ddd; max-height: 500px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Form1&lt;/span&gt; : &lt;span style="color:#2b91af"&gt;Form&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpList&lt;/span&gt; jumpList;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListCustomCategory&lt;/span&gt; category1 = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListCustomCategory&lt;/span&gt;(&lt;span style="color:#a31515"&gt;&amp;quot;Custom Stuff&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListCustomCategory&lt;/span&gt; category2 = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListCustomCategory&lt;/span&gt;(&lt;span style="color:#a31515"&gt;&amp;quot;Custom Stuff2&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; Form1()&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;InitializeComponent();&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; Form1_Shown(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// create a new taskbar jump list for the main window&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList = &lt;span style="color:#2b91af"&gt;JumpList&lt;/span&gt;.CreateJumpList();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Add custom categories&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.AddCustomCategories(category1, category2);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;AddTasks();&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.Refresh();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; AddTasks()&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Path to Windows system folder&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; systemFolder = &lt;span style="color:#2b91af"&gt;Environment&lt;/span&gt;.GetFolderPath(&lt;span style="color:#2b91af"&gt;Environment&lt;/span&gt;.&lt;span style="color:#2b91af"&gt;SpecialFolder&lt;/span&gt;.System);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Add our user tasks&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.AddUserTasks(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListLink&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;), &lt;span style="color:#a31515"&gt;&amp;quot;Open Notepad&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;IconReference = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IconReference&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;), 0)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;});&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.AddUserTasks(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListLink&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;mspaint.exe&amp;quot;&lt;/span&gt;), &lt;span style="color:#a31515"&gt;&amp;quot;Open Paint&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;IconReference = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IconReference&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;mspaint.exe&amp;quot;&lt;/span&gt;), 0)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;});&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.AddUserTasks(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListSeparator&lt;/span&gt;());&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.AddUserTasks(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListLink&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;calc.exe&amp;quot;&lt;/span&gt;), &lt;span style="color:#a31515"&gt;&amp;quot;Open Calculator&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;IconReference = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IconReference&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;calc.exe&amp;quot;&lt;/span&gt;), 0)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;});&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;All the work is kicked off in the form’s Shown event. With the creation of a jumplist. Two custom categories are added to it. Then some tasks are added that open other applications. The jumplist is ‘published’ by calling jumplist.refresh();&lt;/p&gt;  &lt;p&gt;Remember the Jumplist is created by the Taskbar for your application. Unlike the Thumbnail preview toolbars there doesn’t appear to be a mechanism of capturing jumplist events into your application. The only event raised by jumplist is when items have been removed from the jumplist since the last jumplist refresh occurred. This means achieving something similar to Internet Explorer 8’s Open new tab jumplist task, requires an ‘external’ communication to occur with your application.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911196" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPETeam/default.aspx">UKDPETeam</category></item><item><title>VS2010, .Net 4 and Windows 7 Multitouch WPF apps!</title><link>http://blogs.msdn.com/paulfo/archive/2009/06/17/vs2010-net-4-and-windows-7-multitouch-wpf-apps.aspx</link><pubDate>Wed, 17 Jun 2009 19:14:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9769772</guid><dc:creator>paulfo</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9769772.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9769772</wfw:commentRss><description>&lt;p&gt;Hi all,&lt;/p&gt; &lt;p&gt;I've been doing a little playing around with MT on Win7 using the VS2010 and .Net 4 Beta 1 to get some WPF MT demos running.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Here are the videos!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Basic how to get MT going code example:&lt;/p&gt; &lt;p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:5dd14cb3-8351-4abf-b097-19868a6395a3" class="wlWriterEditableSmartContent"&gt;&lt;div id="0b18006b-ddeb-4523-9faa-3102edfa0bc9" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=0DM7NQJ0NA4" target="_new"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/paulfo/WindowsLiveWriter/VS2010.Net4andWindows7MultitouchWPFapps_F26D/video8d6099bad1ff.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('0b18006b-ddeb-4523-9faa-3102edfa0bc9'); 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/0DM7NQJ0NA4&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/0DM7NQJ0NA4&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;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;Some internal demos that I've made to work on VS2010 and .Net4 beta 1 - using a WPF4 implementation of the Surface ScatterView control (or something that looks a lot like it)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:83147658-e782-46f5-9b9e-386ed7ff067a" class="wlWriterEditableSmartContent"&gt;&lt;div id="c1b90f04-e5b6-4bfd-a25c-24ae07912413" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=CHsqS2QnR14" target="_new"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/paulfo/WindowsLiveWriter/VS2010.Net4andWindows7MultitouchWPFapps_F26D/video58cf00eb3ad5.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('c1b90f04-e5b6-4bfd-a25c-24ae07912413'); 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/CHsqS2QnR14&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/CHsqS2QnR14&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;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;Get building with WPF 4 in MT! I'm using the Codeplex MultitouchVista project which now has a Win7 driver. Works really well - very sweet when you don't have any MT kit!!!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9769772" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPETeam/default.aspx">UKDPETeam</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPE/default.aspx">UKDPE</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/multitouch/default.aspx">multitouch</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/VS2010/default.aspx">VS2010</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/.Net4/default.aspx">.Net4</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/WPF4/default.aspx">WPF4</category></item><item><title>XNA UK Bar Camp 21st March</title><link>http://blogs.msdn.com/paulfo/archive/2009/03/17/xna-uk-bar-camp-21st-march.aspx</link><pubDate>Tue, 17 Mar 2009 12:41:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9483128</guid><dc:creator>paulfo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9483128.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9483128</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/paulfo/WindowsLiveWriter/XNAUKBarCamp21stMarch_884F/XNAa_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 5px 0px 0px; border-right-width: 0px" height="164" alt="XNAa" src="http://blogs.msdn.com/blogfiles/paulfo/WindowsLiveWriter/XNAUKBarCamp21stMarch_884F/XNAa_thumb.jpg" width="223" align="left" border="0"&gt;&lt;/a&gt;Are getting ready to come to XNA Camp? We have a great selection of speakers AND creators club memberships to give away to attendees (4mths) and speakers (12mths). Everything in fact to get you building games or building more advanced games! With the new Community Games channel on Xbox Live you could also make some money!!!  &lt;p&gt;The XNA UK user group is a great gang of hobbyists, students and professional games developers. Always happy to help fellow game builders the user group provides a wealth of experience and resources to tap into. Why not join us in Birmingham at the Aston Science Park between 09:30 and 18:00. I'm giving the opening session on recent XNA and related technology announcements, then we have an open floor for 20min sessions by attendees.  &lt;p&gt;Some of the speakers confirmed include:  &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Peter McGann - author of the recent PC Plus XNA series.&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;Edward Powell - explaining XNA Game Components &amp;amp; Services&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;Andrew Griffiths - telling us some of the shader tech behind the game Encroach.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;There are still a few more slots available so submit your presentation idea to &lt;a href="mailto:SlotBooker@xna-uk.net"&gt;SlotBooker@xna-uk.net&lt;/a&gt; and receive a 12month Creators Club membership after your presentation. Feel free to submit a XNA question you'd like answered by someone else!  &lt;p&gt;Projector and sound system is all provided by the venue - just bring your laptop to present from and to take part in the LAN party!  &lt;p&gt;Register at: &lt;a href="http://xna.icentrum.co.uk"&gt;http://xna.icentrum.co.uk&lt;/a&gt;  &lt;p&gt;Arrival time: 09:30  &lt;p&gt;Kick off at: 10:00  &lt;p&gt;A light buffet and refreshments will be available - sponsored by Microsoft.&amp;nbsp; &lt;p&gt;Hard close at: 18:00  &lt;p&gt;Venue address:  &lt;blockquote&gt; &lt;p&gt;iCentrum  &lt;p&gt;Aston Science Park  &lt;p&gt;Faraday Wharf  &lt;p&gt;Birmingham&amp;nbsp;&amp;nbsp; B7 4BB&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Car parking is available underneath this building in a pay and display.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9483128" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPETeam/default.aspx">UKDPETeam</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UK/default.aspx">UK</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPE/default.aspx">UKDPE</category></item></channel></rss>