<?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>Ivo Manolov's Blog : Win32</title><link>http://blogs.msdn.com/ivo_manolov/archive/tags/Win32/default.aspx</link><description>Tags: Win32</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>TestApi v0.4 Released!</title><link>http://blogs.msdn.com/ivo_manolov/archive/2009/11/21/9926003.aspx</link><pubDate>Sat, 21 Nov 2009 21:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9926003</guid><dc:creator>ivom</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ivo_manolov/comments/9926003.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ivo_manolov/commentrss.aspx?PostID=9926003</wfw:commentRss><description>&lt;p&gt;I am happy to announce that we have just released version 0.4 of &lt;a href="http://codeplex.com/testapi"&gt;TestApi&lt;/a&gt; – the testing API library - on Codeplex. &lt;/p&gt;  &lt;p&gt;Version 0.4 contains the following additions and modifications:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;An improved &lt;u&gt;Combinatorial Variation Generation API&lt;/u&gt; with added support for parameter value weights and tags (for “negative” variations); &lt;/li&gt;    &lt;li&gt;A new &lt;u&gt;Memory Leak Detection API&lt;/u&gt; allowing capture, comparison and serialization / de-serialization of memory snapshots of a running process; &lt;/li&gt;    &lt;li&gt;A new &lt;u&gt;Object Comparison API&lt;/u&gt; allowing comparison of arbitrary .NET objects, using arbitrary object comparison strategies; &lt;/li&gt;    &lt;li&gt;A new &lt;u&gt;Text String Generation API&lt;/u&gt;, allowing generation of random strings, for testing purposes; &lt;/li&gt;    &lt;li&gt;Various documentation and sample improvements. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;We will be blogging about some of these API in the near future. As always, TestApi is available on &lt;a href="http://codeplex.com/testapi"&gt;&lt;strong&gt;http://codeplex.com/testapi&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9926003" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Win32/default.aspx">Win32</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/TestApi/default.aspx">TestApi</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Software+Test+Automation/default.aspx">Software Test Automation</category></item><item><title>TestApi Slide-Deck from the Patterns &amp; Practices Summit</title><link>http://blogs.msdn.com/ivo_manolov/archive/2009/10/14/9907447.aspx</link><pubDate>Thu, 15 Oct 2009 05:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9907447</guid><dc:creator>ivom</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ivo_manolov/comments/9907447.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ivo_manolov/commentrss.aspx?PostID=9907447</wfw:commentRss><description>This week is Microsoft’s Patterns &amp;amp; Practices summit in Redmond . Earlier today I gave a 15-minute presentation on TestApi . Here is the slide-deck: Test Api View more presentations from ivom1234 ....(&lt;a href="http://blogs.msdn.com/ivo_manolov/archive/2009/10/14/9907447.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9907447" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Win32/default.aspx">Win32</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/TestApi/default.aspx">TestApi</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Software+Test+Automation/default.aspx">Software Test Automation</category></item><item><title>TestApi v0.3 Released!</title><link>http://blogs.msdn.com/ivo_manolov/archive/2009/07/23/9847064.aspx</link><pubDate>Fri, 24 Jul 2009 04:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9847064</guid><dc:creator>ivom</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ivo_manolov/comments/9847064.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ivo_manolov/commentrss.aspx?PostID=9847064</wfw:commentRss><description>&lt;p&gt;I am happy to announce that we have just released the third preliminary version of TestApi -- the testing API library. This version introduces some fairly significant changes and new features:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;New name spaces (under Microsoft.Test) and new binary names; &lt;br&gt;&lt;/li&gt;&lt;li&gt;New source code organization;&lt;br&gt;&lt;/li&gt;&lt;li&gt;A fairly comprehensive acceptance tests suite (using xUnit);&lt;/li&gt;&lt;li&gt;Fault Injection APIs for managed code (using CLR profiler technology);&lt;/li&gt;&lt;li&gt;Combinatorial Variation Generation API (using the PICT algorithm);&lt;/li&gt;&lt;li&gt;A redesigned Application Control API;&lt;/li&gt;&lt;li&gt;Updates to the Visual Verification API;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Updated samples and documentation; new conceptual documents;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;We will be blogging in detail about some of the features in v0.3 in the coming weeks.&lt;br&gt;&lt;p&gt;TestApi is a policy-free API library, delivering Microsoft testing technology in an easy to use package. It can be used from within any tool (VSTS, NUnit, xUnit, etc.) or environment to automate the testing for desktop and in-browse applications on Windows. &lt;/p&gt;&lt;p&gt;TestApi v0.3 is available on &lt;a href="http://testapi.codeplex.com" target="_blank" mce_href="http://testapi.codeplex.com"&gt;http://testapi.codeplex.com&lt;/a&gt;. Thanks for all your feedback. &lt;a href="mailto:testapi@microsoft.com?subject=Feedback%20on%20TestApi%20v0.3" mce_href="mailto:testapi@microsoft.com?subject=Feedback on TestApi v0.3"&gt;Keep it coming!&lt;/a&gt; :)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9847064" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Win32/default.aspx">Win32</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/TestApi/default.aspx">TestApi</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Software+Test+Automation/default.aspx">Software Test Automation</category></item><item><title>TestApi v.0.2 Released!</title><link>http://blogs.msdn.com/ivo_manolov/archive/2009/04/24/9566644.aspx</link><pubDate>Fri, 24 Apr 2009 15:53:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9566644</guid><dc:creator>ivom</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/ivo_manolov/comments/9566644.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ivo_manolov/commentrss.aspx?PostID=9566644</wfw:commentRss><description>&lt;p&gt;I am excited to announce that we have just released the second preliminary version of &lt;a href="http://codeplex.com/testapi"&gt;TestApi&lt;/a&gt; – the testing API library – on &lt;a href="http://codeplex.com/testapi"&gt;&lt;strong&gt;http://codeplex.com/testapi&lt;/strong&gt;&lt;/a&gt;! &lt;/p&gt;  &lt;p&gt;The v.0.2 package includes the following additions and modifications:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Improved command-line parsing APIs &lt;/li&gt;    &lt;li&gt;Improved visual verification APIs      &lt;ul&gt;       &lt;li&gt;A new tolerance map visual verifier in SnapshotToleranceMapVerifier &lt;/li&gt;        &lt;li&gt;New operations on snapshot (And and Or) allowing you to mask &lt;/li&gt;        &lt;li&gt;A new Snapshot.FromWindow(...) constructor with ability to include and exclude the window chrome in snapshots. &lt;/li&gt;        &lt;li&gt;Improved visual verification internals &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;New application control APIs, enabling in-proc and out-of-proc automation of client applications &lt;/li&gt;    &lt;li&gt;Expanded conceptual documentation &lt;/li&gt;    &lt;li&gt;CHM API documents (in addition to the HTML documents) &lt;/li&gt;    &lt;li&gt;Addition of NUnit and xUnit usage samples (for all of the non-VS crowd out there) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Check out the package and let us know of any feedback.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9566644" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Win32/default.aspx">Win32</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/TestApi/default.aspx">TestApi</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Software+Test+Automation/default.aspx">Software Test Automation</category></item><item><title>Introduction to TestApi – Part 2: Command-Line Parsing APIs</title><link>http://blogs.msdn.com/ivo_manolov/archive/2008/12/17/9230331.aspx</link><pubDate>Thu, 18 Dec 2008 01:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9230331</guid><dc:creator>ivom</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/ivo_manolov/comments/9230331.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ivo_manolov/commentrss.aspx?PostID=9230331</wfw:commentRss><description>&lt;p&gt;Command-line parsers remind me of linked lists in C++: everybody has written several at various points in their careers. While everybody should write each of those at least once, I doubt that many people out there are particularly excited about writing and re-writing fundamental data structures on a regular basis – it gets old very quickly. Not to mention that doing so is error-prone and decreases the maintainability of a world that’s already hard to maintain.&lt;/p&gt;  &lt;p&gt;That’s why modern-day frameworks such as .NET provide standard implementations of the common data structures. And that’s why &lt;a href="http://codeplex.com/testapi" target="_blank"&gt;&lt;strong&gt;TestApi&lt;/strong&gt;&lt;/a&gt; provides a reusable command-line parsing APIs via the &lt;strong&gt;CommandLineDictionary&lt;/strong&gt; and &lt;strong&gt;CommandLineParser&lt;/strong&gt; classes, the latter being a type-safe layer on top of the former. Obviously, these are not test APIs per se – they are general utility APIs that happen to be more often used when writing tests.&lt;/p&gt;  &lt;p&gt;A few quick examples follow. &lt;/p&gt;  &lt;h2&gt;Simple Command-Line Parsing&lt;/h2&gt;  &lt;p&gt;As seen from the first example below, extracting command-line parameters that are primitives is easy. Primitive command-line parameters are either boolean (e.g. the “verbose” flag below), or a key-value pair, that one can extract with the indexer of the &lt;strong&gt;CommandLineDictionary&lt;/strong&gt; instance (see the “testId” key below), just as one would expect from a Dictionary.&lt;/p&gt;  &lt;div style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: rgb(242,242,242) 0% 50%; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 1pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;   &lt;pre&gt;&lt;font color="#008000"&gt;// 
// EXAMPLE #1: Parsing a command-line such as &amp;quot;RunTests.exe /verbose /testId=123&amp;quot;
// 
&lt;/font&gt;
using System;
using Microsoft.Test;

public class Program 
{ 
    public static void Main(string[] args) 
    { 
        CommandLineDictionary d = new CommandLineDictionary(args);

        bool verbose = &lt;font style="background-color: yellow"&gt;d.ContainsKey(&amp;quot;verbose&amp;quot;)&lt;/font&gt;;
        int testId = Int32.Parse(&lt;font style="background-color: yellow"&gt;d[&amp;quot;testId&amp;quot;]&lt;/font&gt;);
                
&lt;font color="#008000"&gt;        // use the parsed command-line parameters&lt;/font&gt;
    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;By default flags/keys are indicated with the forward slash (“/”) character and values are indicated with the equals character (“=”), but the user can override that upon initialization of of the CommandLineDictionary object:&lt;/p&gt;

&lt;div style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: rgb(242,242,242) 0% 50%; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 1pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
  &lt;pre&gt;&lt;font color="#008000"&gt;// 
// EXAMPLE #1b: Parsing a command-line such as &amp;quot;RunTests.exe –verbose –testId:123&amp;quot;
// 
&lt;/font&gt;
...
        CommandLineDictionary d = new CommandLineDictionary(args, &lt;font style="background-color: yellow"&gt;'-', ':'&lt;/font&gt;);
...&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Finally, you one can use the &lt;strong&gt;ToString&lt;/strong&gt; method to get a string representation of the command-line arguments.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;Command-Line Argument Structures&lt;/h2&gt;

&lt;p&gt;Another common pattern when dealing with command-line arguments is populating a structure which contains all parsed arguments. The &lt;strong&gt;CommandLineParser&lt;/strong&gt; class makes this easy:&lt;/p&gt;

&lt;div style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: rgb(242,242,242) 0% 50%; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 1pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
  &lt;pre&gt;&lt;font color="#008000"&gt;// EXAMPLE #2:
// Sample for parsing the following command-line:
// Test.exe /verbose /runId=10
// This sample declares a class in which the strongly typed arguments are populated&lt;/font&gt;
public class CommandLineArguments
{
   bool? Verbose { get; set; }
   int? RunId { get; set; }
}

CommandLineArguments a = new CommandLineArguments();
&lt;font style="background-color: yellow"&gt;CommandLineParser.ParseArguments(a, args);&lt;/font&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;Type-Safe Commands&lt;/h2&gt;

&lt;p&gt;A third common approach is forming strongly-typed commands from the command-line parameters. This is common for cases when the command-line looks as follows:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;some-exe&amp;#160; COMMAND&amp;#160; parameters-to-the-command&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The parsing in this case is a little bit more involved:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Create one class for every supported command, which derives from the &lt;strong&gt;Command&lt;/strong&gt; abstract base class and implements an expected &lt;strong&gt;Execute&lt;/strong&gt; method. &lt;/li&gt;

  &lt;li&gt;
    &lt;p&gt;Pass an expected command along with the command-line arguments to &lt;strong&gt;CommandLineParser.ParseCommand&lt;/strong&gt; – the method will return a&amp;#160; strongly-typed Command instance that can be Execute()-d.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;div style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: rgb(242,242,242) 0% 50%; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 1pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
  &lt;pre&gt;&lt;font color="#008000"&gt;// EXAMPLE #3:
// Sample for parsing the following command-line:
// Test.exe &lt;font style="background-color: yellow"&gt;run&lt;/font&gt; /runId=10 /verbose 
// In this particular case we have an actual command on the command-line (“run”), 
// which we want to effectively de-serialize and execute.&lt;/font&gt;
public class RunCommand : Command
{
   bool? Verbose { get; set; }
   int? RunId { get; set; }

   public override void Execute()
   {
      &lt;font color="#008000"&gt;// Implement your &amp;quot;run&amp;quot; execution logic here.&lt;/font&gt;
   }
}

&lt;font style="background-color: yellow"&gt;Command c = new RunCommand();
CommandLineParser.ParseArguments(c, args); 
c.Execute();&lt;/font&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Besides the parsing logic, CommandLineParser provides a few additional helper methods. One of them is &lt;strong&gt;CommandLineParser.PrintCommandUsage&lt;/strong&gt;, which prints the usage for specific commands (or all supported commands) to the console.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;In Conclusion&lt;/h2&gt;

&lt;p&gt;The command-line parsing APIs released with &lt;strong&gt;&lt;a href="http://codeplex.com/testapi"&gt;TestApi&lt;/a&gt; &lt;/strong&gt;provide a simple and “layered” access to the command-line. Strictly speaking these APIs are not test APIs, but have nevertheless been included in &lt;a href="http://codeplex.com/testapi"&gt;TestApi&lt;/a&gt; as tests often have a need of parsing parameters on the command-line. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9230331" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Win32/default.aspx">Win32</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/TestApi/default.aspx">TestApi</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Software+Test+Automation/default.aspx">Software Test Automation</category></item><item><title>TestApi v.0.1 Released</title><link>http://blogs.msdn.com/ivo_manolov/archive/2008/12/06/9181396.aspx</link><pubDate>Sat, 06 Dec 2008 21:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9181396</guid><dc:creator>ivom</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ivo_manolov/comments/9181396.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ivo_manolov/commentrss.aspx?PostID=9181396</wfw:commentRss><description>&lt;P&gt;On Friday, we released the first preliminary version of an experimental&amp;nbsp;library with test APIs,&amp;nbsp;named ... TestApi :). With this library, we are sharing internal&amp;nbsp;Microsoft testing technology with the developer and tester community.&lt;/P&gt;
&lt;P&gt;We wanted to keep the first release small and contained, so that it can be easily grasped and critiqued, but complete enough to provide actual user value and to clearly demonstrate the direction of this effort.&lt;/P&gt;
&lt;P&gt;In addition to the binaries and the source code, we have provided full documentation (both MSDN-style API documents and conceptual documents) as well as a couple of VSTS samples to get you started.&lt;/P&gt;
&lt;P&gt;Check out the release on &lt;A href="http://codeplex.com/TestApi" mce_href="http://codeplex.com/TestApi"&gt;&lt;STRONG&gt;http://codeplex.com/TestApi&lt;/STRONG&gt;&lt;/A&gt; and let us know what you think.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9181396" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Win32/default.aspx">Win32</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Software+Testing/default.aspx">Software Testing</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/TestApi/default.aspx">TestApi</category></item><item><title>WPF-Win32 Interop Part 2: Hosting Win32 Controls (ListBox) in WPF Windows</title><link>http://blogs.msdn.com/ivo_manolov/archive/2007/10/07/5354351.aspx</link><pubDate>Mon, 08 Oct 2007 07:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5354351</guid><dc:creator>ivom</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/ivo_manolov/comments/5354351.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ivo_manolov/commentrss.aspx?PostID=5354351</wfw:commentRss><description>&lt;H1 style="MARGIN: 15pt 0in 2pt"&gt;&lt;A class="" title=_Toc179553521 name=_Toc179553521&gt;&lt;/A&gt;&lt;FONT face=Calibri size=5&gt;Introduction&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;This article describes hosting of a Win32 user control in a WPF window. It is supplemented by the following two projects, which show working examples of the material presented in the document:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0in" type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri&gt;Win32ControlInWpfWindow_CompositeWin32Messages&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 12pt"&gt;&lt;FONT face=Calibri&gt;Win32ControlInWpfWindow_SimpleWin32Messages&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT face=Calibri&gt;The only difference between the two projects is the Win32ListBoxHost.cs file. The differences between the two versions of the file are related to the material covered in the &lt;I&gt;“Simple” Messages vs “Composite” Messages&lt;/I&gt; section below. You can view the differences between the two versions of the file by using a utility such as WinDiff.exe, which is shipped with the Windows SDK.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT face=Calibri&gt;This article is based on the material available on the &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms753178.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms753178.aspx"&gt;&lt;FONT face=Calibri&gt;WPF/Win32 interoperability portal&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; on MSDN.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: left" align=left&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 15pt 0in 2pt"&gt;&lt;A class="" title=_Toc179553522 name=_Toc179553522&gt;&lt;/A&gt;&lt;FONT face=Calibri size=5&gt;Hosting of a Win32 Control in a WPF Window&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;In traditional Win32 programming, user controls (buttons, listboxes, etc.) are instantiated through a call to the &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms632679.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms632679.aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;CreateWindow&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; or &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms632680.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms632680.aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;CreateWindowEx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; APIs. Every control has a unique (per session) identifier of type HWND&lt;/FONT&gt;&lt;A class="" title=_ftnref1 href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftn1" name=_ftnref1 mce_href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftn1"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff&gt;[1]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; and &lt;I&gt;is recognized as a separate window&lt;/I&gt; (albeit a child window) by the window manager of the OS. What this means is that the window manager of the OS has the ability to do hit-testing&lt;/FONT&gt;&lt;A class="" title=_ftnref2 href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftn2" name=_ftnref2 mce_href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftn2"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff&gt;[2]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; of the user control without the assistance of the parent window and is thus capable of sending window messages (e.g. &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms645607.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms645607.aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;WM_LBUTTONDOWN&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;, etc.) directly to the user control. These window messages are typically intercepted and processed by the message loop of the parent window, but can also be processed by the user control.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;In WPF programming user controls are not separate windows with separate HWNDs. Hit-testing is accomplished by the &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/system.windows.media.visual.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.windows.media.visual.aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;Visual&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; layer in the WPF stack. Thus the window manager of the OS sends messages only to the top-level WPF window. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;Hosting of a Win32 user control in a WPF window is accomplished using the following steps:&lt;/FONT&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in" type=1&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;Create a class deriving from &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.hwndhost.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.hwndhost.aspx"&gt;&lt;FONT face=Calibri&gt;HwndHost&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;;&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: left"&gt;&lt;FONT face=Calibri&gt;In the HwndHost-derived class implement 3 methods declared in HwndHost (BuildWindowCore, DestroyWindowCore and WndProc):&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; MARGIN-LEFT: 0.5in; BORDER-LEFT: windowtext 1pt solid; MARGIN-RIGHT: 0in; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;class MyHost : HwndHost &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;// Public adapter interface goes here&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;protected override HandleRef &lt;B&gt;BuildWindowCore&lt;/B&gt;(HandleRef hwndParent) &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;// PInvoke to CreateWindow(Ex)...&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return new HandleRef(this, hwnd);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;} &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;protected override void &lt;B&gt;DestroyWindowCore&lt;/B&gt;(HandleRef hwnd)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;// PInvoke to DestroyWindow &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;protected override IntPtr &lt;B&gt;WndProc&lt;/B&gt;(&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPtr hwnd, &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;int msg, &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPrt wparam, &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPtr lparam, &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ref bool handled)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;// Handle incoming messages here.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;// The incoming messages are typically delegated &lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;// to the hosted control.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;FONT face="Lucida Console"&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="BACKGROUND: rgb(242,242,242) 0% 50%; MARGIN: 0in 0in 0pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in"&gt;&lt;FONT face=Calibri&gt;You use the BuildWindowCore to instantiate the Win32 user control you want to host. This is typically done through a call to the &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms632679.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms632679.aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;CreateWindow&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; / &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms632680.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms632680.aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;CreateWindowEx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; API. Similarly, in DestroyWindowCore you destroy your Win32 user control, typically by a call to the &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms632682.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms632682.aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;DestroyWindow&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; API. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in"&gt;&lt;FONT face=Calibri&gt;The WndProc method allows you to handle incoming window messages.&lt;/FONT&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in" type=1 start=start&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;In your HwndHost-derived class (MyHost in this particular example), declare an adapter interface&lt;/FONT&gt;&lt;A class="" title=_ftnref3 href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftn3" name=_ftnref3 mce_href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftn3"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff&gt;[3]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; to allow communication with the hosted Win32 control. In order to ensure reusability of the host class in different WPF applications, you should strive to avoid any Win32 idiosyncrasies in the interface. Instead, the adapter interface should conform to the .NET coding and style guidelines and should hide the fact that there is an underlying Win32 control. &lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in"&gt;&lt;FONT face=Calibri&gt;For example, if your HwndHost-derived class is wrapping a Win32 listbox, then it probably makes sense to expose basic listbox methods such as:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in"&gt;&lt;SPAN style="FONT-FAMILY: symbol"&gt;&lt;SPAN&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;AddItem&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in"&gt;&lt;SPAN style="FONT-FAMILY: symbol"&gt;&lt;SPAN&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;DeleteItem&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in"&gt;&lt;SPAN style="FONT-FAMILY: symbol"&gt;&lt;SPAN&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;SelectedItemIndex {get; set}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in"&gt;&lt;SPAN style="FONT-FAMILY: symbol"&gt;&lt;SPAN&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;SelectedItemText {get;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in"&gt;&lt;SPAN style="FONT-FAMILY: symbol"&gt;&lt;SPAN&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;SelectionChanged event&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;(see the “Communicating Win32 Events to the WPF Window” section later in this document)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in"&gt;&lt;FONT face=Calibri&gt;Conversely, it is not a good idea to expose a method such as SendMessage, wrapping the Win32 SendMessage API.&lt;/FONT&gt;&lt;/P&gt;
&lt;OL style="MARGIN-TOP: 0in" type=1 start=start&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;In the XAML file declaring the UI of your WPF window, add a declaration for your HwndHost class:&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; MARGIN-LEFT: 0.5in; BORDER-LEFT: windowtext 1pt solid; MARGIN-RIGHT: 0in; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;&lt;SPAN style="COLOR: maroon"&gt;Window&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;x:Class&lt;/SPAN&gt;="Win32ControlInWpfWindow.MainWindow"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;xmlns&lt;/SPAN&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;xmlns:x&lt;/SPAN&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="COLOR: red"&gt;xmlns:custom&lt;/SPAN&gt;="clr-namespace:Win32ControlInWpfWindow;assembly=" &lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Title&lt;/SPAN&gt;="Win32 Control in a WPF Window" &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Height&lt;/SPAN&gt;="500" &lt;SPAN style="COLOR: red"&gt;Width&lt;/SPAN&gt;="600"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: maroon"&gt;StackPanel&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;SPAN style="COLOR: maroon"&gt;Button&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Click&lt;/SPAN&gt;="ButtonAddItemOnClick"&amp;gt;Add Item&amp;lt;/&lt;SPAN style="COLOR: maroon"&gt;Button&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;B&gt;&amp;lt;&lt;SPAN style="COLOR: maroon"&gt;custom:Win32ListBoxHost&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;x:Name&lt;/SPAN&gt;="listbox" &lt;SPAN style="COLOR: red"&gt;Width&lt;/SPAN&gt;="100" &lt;SPAN style="COLOR: red"&gt;Height&lt;/SPAN&gt;="100"/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;SPAN style="COLOR: maroon"&gt;StackPanel&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;/&lt;SPAN style="COLOR: maroon"&gt;Window&lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in"&gt;&lt;FONT face=Calibri&gt;Note how the XAML file above defines the name space for your HwndHost-derived class (the “custom” namespace) and the assembly where the class is implemented. In this particular case the “assembly=” directive points to nothing, which indicates that the host class is implemented in the same assembly as the one of the MainWindow class.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 15pt 0in 2pt"&gt;&lt;A class="" title=_Toc179553523 name=_Toc179553523&gt;&lt;/A&gt;&lt;FONT face=Calibri size=5&gt;“Simple” Messages vs “Composite” Messages&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;In a traditional Win32 application, you display a number of Win32 user controls in a top-level Win32 window. The top-level window is typically handling all window messages resulting from interaction of the user with the controls through a top-level &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms633573.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms633573.aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;WindowProc&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;As the user interacts with the controls on the window, the top-level WindowProc receives both “simple” messages (e.g. &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms645607.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms645607.aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;WM_LBUTTONDOWN&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;, etc.) that are generated by the OS window manager as well as “composite” messages (e.g. &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms647591.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms647591.aspx"&gt;&lt;FONT face=Calibri&gt;WM_COMMAND&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;, etc.) that are generated by the user controls and sent as notifications to the parent window&lt;/FONT&gt;&lt;A class="" title=_ftnref4 href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftn4" name=_ftnref4 mce_href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftn4"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff&gt;[4]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;These “composite” notifications present a problem in the WPF hosting case, because there is no parent window WindowProc to process them&lt;/FONT&gt;&lt;A class="" title=_ftnref5 href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftn5" name=_ftnref5 mce_href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftn5"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff&gt;[5]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;. As a result, in the code below would not really work as expected:&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;class MyHost : HwndHost &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;protected override HandleRef &lt;B&gt;BuildWindowCore&lt;/B&gt;(HandleRef hwndParent) &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_hwndListBox = CreateWindowEx(&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;0, "listbox", "",&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WS_CHILD | WS_VISIBLE | LBS_NOTIFY | WS_VSCROLL | WS_BORDER,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;0, 0,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(int)Width, (int)Height,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;hwndParent.Handle,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPtr.Zero,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPtr.Zero,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;0);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return new HandleRef(this, _hwndListBox);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;} &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;protected override IntPtr &lt;B&gt;WndProc&lt;/B&gt;(&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPtr hwnd, &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;int msg, &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPrt wparam, &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPtr lparam, &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ref bool handled)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;switch (msg)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;case WM_COMMAND:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: red"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// This code-path will never get hit as the listbox control will&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: red"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// never receive the WM_COMMAND message that it posts to its parent&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;case WM_LBUTTONDOWN:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// This code-path will get hit as the listbox control will&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// be receiving the message from the OS window manager&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;In most cases handling “simple” messages in the WndProc method is sufficient, although it may be somewhat cumbersome. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;There are, however, cases in which you would want to receive “composite” messages. To achieve this, you need to create an artificial parent HWND, so that you can receive the “composite” notifications, generated by the hosted child windows.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;In other words you end up with the following general structure:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;A href="http://blogs.msdn.com/blogfiles/ivo_manolov/WindowsLiveWriter/WPFWin32InteropPart2HostingWin32Controls_12F45/clip_image002%5B6%5D.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=195 alt=clip_image002[6] src="http://blogs.msdn.com/blogfiles/ivo_manolov/WindowsLiveWriter/WPFWin32InteropPart2HostingWin32Controls_12F45/clip_image002%5B6%5D_thumb.jpg" width=244 border=0&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;This is achieved as follows:&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;class MyHost : HwndHost &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;protected override HandleRef &lt;B&gt;BuildWindowCore&lt;/B&gt;(HandleRef hwndParent) &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(227,108,10)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_hwndListBoxParent = CreateWindowEx(&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(227,108,10)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;0, "static", "",&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(227,108,10)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WS_CHILD,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(227,108,10)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;0, 0,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(227,108,10)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(int)Width, (int)Height,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(227,108,10)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;hwndParent.Handle,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(227,108,10)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPtr.Zero,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(227,108,10)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPtr.Zero,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(227,108,10)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;0);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_hwndListBox = CreateWindowEx(&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;0, "listbox", "",&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WS_CHILD | WS_VISIBLE | LBS_NOTIFY | WS_VSCROLL | WS_BORDER,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;0, 0,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(int)Width, (int)Height,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;_hwndListBoxParent,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPtr.Zero,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPtr.Zero,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;0);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return new HandleRef(this, &lt;SPAN style="COLOR: rgb(227,108,10)"&gt;_hwndListBoxParent&lt;/SPAN&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;} &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Private IntPtr _hwndListBoxParent = null;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Private IntPtr _hwndListBox = null;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 15pt 0in 2pt"&gt;&lt;A class="" title=_Toc179553524 name=_Toc179553524&gt;&lt;/A&gt;&lt;FONT face=Calibri size=5&gt;Communicating Win32 Events to the WPF Window&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;With the code above we can capture and process the window messages sent to the hosted Win32 user control. We do that in the WndProc method. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;In addition to that we need to be able to inform interested WPF elements of the fact that we have received a certain event. For example, a hosted Win32 button may need to inform a WPF textbox that is has been clicked, a hosted Win32 listbox may need to inform a WPF textbox that the selection in the listbox has been changed, etc. The traditional way to do expose that capability in .NET is through events.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;So we declare a public event and a protected event handler as follows:&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;class MyHost : HwndHost&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;public event EventHandler SelectionChanged;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;protected void OnSelectionChanged(EventArgs args)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;EventHandler handler = SelectionChanged;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (handler != null)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;handler(this, args);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;This allows the users of the class to write code such as:&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;class Test&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;public static void Main()&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;myHost.SelectionChanged += MySelectionChangedHandler;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;public void MySelectionChangedHandler(EventArgs args)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// This method gets called whenever someone changes the selection in the Win32 &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// control (which is presumably a listbox) hosted in MyHost.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 15pt 0in 2pt"&gt;&lt;A class="" title=_Toc179553525 name=_Toc179553525&gt;&lt;/A&gt;&lt;FONT face=Calibri size=5&gt;Adding Tab and Accelerators Support for the Hosted Win32 Control&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;One current problem that you will see in the application is that keyboard navigation does not work well with the Win32 control. Keyboard navigation has several aspects:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in"&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT face=Calibri&gt;a)&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;Enabling tabbing into and out of the hosted Win32 control (listbox)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in"&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT face=Calibri&gt;b)&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;Enabling keyboard navigation within the hosted Win32 control (e.g. moving the selection in the listbox)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in"&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT face=Calibri&gt;c)&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;Supporting access keys&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;In order to achieve a) and b), your HwndHost-derived class needs to implement two methods of the &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.aspx"&gt;&lt;FONT face=Calibri&gt;IKeyboardInputSink&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; interface: &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.tabinto.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.tabinto.aspx"&gt;&lt;FONT face=Calibri&gt;TabInto&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; and &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.translateaccelerator.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.translateaccelerator.aspx"&gt;&lt;FONT face=Calibri&gt;TranslateAccelerator&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;The &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.tabinto.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.tabinto.aspx"&gt;&lt;FONT face=Calibri&gt;TabInto&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; method gives you (as the name suggests) tabbing into the Win32 listbox (by pressing either Tab or Shift+Tab). In this particular case, the implementation of TabInto is trivial because we only have a single Win32 control:&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;class Win32ListBoxHost : HwndHost, &lt;B&gt;IKeyboardInputSink&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;B&gt;bool IKeyboardInputSink.TabInto(TraversalRequest request)&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;if (request.FocusNavigationDirection == FocusNavigationDirection.Next)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;NativeMethods.SetFocus(_hwndListBox);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;else&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;NativeMethods.SetFocus(_hwndListBox);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return true;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;The &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.translateaccelerator.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.translateaccelerator.aspx"&gt;&lt;FONT face=Calibri&gt;TranslateAccelerator&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; method gets called whenever the OS sends keyboard messages (&lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;WM_KEYDOWN or WM_SYSKEYDOWN&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;) to the application. We use the method to intercept pressing of the up and down arrow so that we can change the selected item in the hosted Win32 listbox:&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;class Win32ListBoxHost : HwndHost, &lt;B&gt;IKeyboardInputSink&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;B&gt;bool IKeyboardInputSink.TranslateAccelerator(ref MSG msg, ModifierKeys modifiers)&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;bool isHandled = false;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (msg.message == NativeMethods.&lt;B&gt;WM_KEYDOWN&lt;/B&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;if (msg.wParam == (IntPtr)NativeMethods.VK_UP)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;if (this.SelectedItemIndex &amp;gt; 0)&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{ this.SelectedItemIndex--; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;else&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ this.SelectedItemIndex = 0; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;isHandled = true;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (msg.wParam == (IntPtr)NativeMethods.&lt;B&gt;VK_DOWN&lt;/B&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;this.SelectedItemIndex++;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;isHandled = true;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return isHandled;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;The only thing that remains is supporting access keys (also known as mnemonics). In order to do that, you need to provide an implementation for the &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.onmnemonic.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.windows.interop.ikeyboardinputsink.onmnemonic.aspx"&gt;&lt;FONT face=Calibri&gt;IKeyboardInputSink.OnMnemonic method&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 15pt 0in 2pt"&gt;&lt;A class="" title=_Toc179553526 name=_Toc179553526&gt;&lt;/A&gt;&lt;FONT face=Calibri size=5&gt;Conclusion&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;The attached projects demonstrate the final solution for hosting a Win32 listbox in a WPF window. The final interface of the HwndHost-derived Win32 listbox container class is:&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;class Win32ListBoxHost : HwndHost, IKeyboardInputSink&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;public void &lt;B&gt;AddItem&lt;/B&gt;(string item);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;public void &lt;B&gt;DeleteItem&lt;/B&gt;(int itemIndex);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;public int &lt;B&gt;SelectedItemIndex&lt;/B&gt; { get; set; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;public string &lt;B&gt;SelectedItemText&lt;/B&gt; { get; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;public event EventHandler &lt;B&gt;SelectionChanged&lt;/B&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;protected override HandlerRef &lt;B&gt;BuildWindowCore&lt;/B&gt;(HandleRef hwndParent);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;protected override void &lt;B&gt;DestroyWindowCore&lt;/B&gt;(HandleRef hwnd);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;protected virtual void &lt;B&gt;OnSelectionChanged&lt;/B&gt;(EventArgs args);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;protected override IntPtr &lt;B&gt;WndProc&lt;/B&gt;(IntPtr hwnd, int message, &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IntPtr wParam, IntPtr lParam, ref bool handled);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;bool IKeyboardInputSink.&lt;B&gt;TabInto&lt;/B&gt;(&lt;SPAN style="LINE-HEIGHT: 115%"&gt;TraversalRequest request&lt;/SPAN&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;bool IKeyboardInputSink.&lt;B&gt;TranslateAccelerator&lt;/B&gt;(ref &lt;SPAN style="LINE-HEIGHT: 115%"&gt;MSG msg, ModifierKeys modifiers&lt;/SPAN&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;For demonstration purposes only, I have included both a project that only uses “simple” (aka “raw”) window messages only and one that uses composite window messages. The only differences between the two projects are in the Win32ListBoxHost.cs file. In most real-world situations, you will end up using “composite” window messages – otherwise you would have to re-implement parts of the business logic of the component you are hosting, which is obviously undesirable.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;DIV&gt;&lt;BR clear=all&gt;&lt;FONT face=Calibri&gt;
&lt;HR align=left width="33%" SIZE=1&gt;
&lt;/FONT&gt;
&lt;DIV id=ftn1&gt;
&lt;P class=MsoFootnoteText style="MARGIN: 0in 0in 10pt"&gt;&lt;A class="" title=_ftn1 href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftnref1" name=_ftn1 mce_href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftnref1"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff&gt;[1]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; A handle to a window&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;DIV id=ftn2&gt;
&lt;P class=MsoFootnoteText style="MARGIN: 0in 0in 10pt"&gt;&lt;A class="" title=_ftn2 href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftnref2" name=_ftn2 mce_href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftnref2"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff&gt;[2]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; Hit-testing is the act of determining whether the position of the mouse coincides with the control representation on the screen&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;DIV id=ftn3&gt;
&lt;P class=MsoFootnoteText style="MARGIN: 0in 0in 10pt"&gt;&lt;A class="" title=_ftn3 href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftnref3" name=_ftn3 mce_href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftnref3"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff&gt;[3]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; “Adapter” in this context refers to the &lt;/FONT&gt;&lt;A href="http://en.wikipedia.org/wiki/Adapter_pattern" mce_href="http://en.wikipedia.org/wiki/Adapter_pattern"&gt;&lt;FONT face=Calibri color=#0000ff&gt;Adapter design pattern&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;DIV id=ftn4&gt;
&lt;P class=MsoFootnoteText style="MARGIN: 0in 0in 10pt"&gt;&lt;A class="" title=_ftn4 href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftnref4" name=_ftn4 mce_href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftnref4"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff&gt;[4]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; The notion of “simple” and “composite” messages is not something that is defined by the OS API or documentation. It is introduced in this text only as a way to illustrate the need for a parent HWND in order to be able to handle certain window messages. Instead, I could have used “OS generated” and “control generated” messages, etc.&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;DIV id=ftn5&gt;
&lt;P class=MsoFootnoteText style="MARGIN: 0in 0in 10pt"&gt;&lt;A class="" title=_ftn5 href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftnref5" name=_ftn5 mce_href="http://blogs.msdn.com/tiny_mce/jscripts/tiny_mce/blank.htm#_ftnref5"&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN&gt;&lt;SPAN class=MsoFootnoteReference&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff&gt;[5]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; Strictly speaking, there is a parent WindowProc, but you don’t have direct access to it from within your HwndHost-derived class.&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5354351" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/ivo_manolov/attachment/5354351.ashx" length="172260" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Win32/default.aspx">Win32</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/ListBox/default.aspx">ListBox</category></item><item><title>WPF-Win32 Interop Part 1: Hosting WinForms Controls (DataGridView) in WPF Windows</title><link>http://blogs.msdn.com/ivo_manolov/archive/2007/07/26/wpf-win32-interop-part-1-hosting-winforms-controls-in-wpf-windows.aspx</link><pubDate>Fri, 27 Jul 2007 04:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4073328</guid><dc:creator>ivom</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/ivo_manolov/comments/4073328.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ivo_manolov/commentrss.aspx?PostID=4073328</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;It's no secret that Win32 has been an extremely successful GUI platform over the past 15 or so years. The overwhelming majority of&amp;nbsp;desktop components and applications for Windows in existence today are Win32-based. So although WPF is (compared to Win32) a vastly superior platform, we did not really expect everybody to turn around a rewrite all of their existing code and applications&amp;nbsp;in WPF. We knew that we had to provide a bridge between Win32 and WPF to allow easy migration between the two platforms.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;There are quite a few ways in which you can use Win32 content in your WPF applications and I will cover them in several posts. This series of posts is based on the material available on the &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms753178.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms753178.aspx"&gt;WPF/Win32 interoperability portal on MSDN&lt;/A&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;I'll start by covering the simplest scenario of&amp;nbsp;using Win32 content in a WPF application: hosting of a WinForms control in a WPF window.&amp;nbsp;Since WPF currently does not have a DataGrid control out of the box, the code below will demonstrate &lt;B&gt;hosting of the &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.datagridview.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.datagridview.aspx"&gt;WinForms DataGridView control&lt;/A&gt; in a WPF application&lt;/B&gt;. A VS2005 project&amp;nbsp;with the full source code is &lt;A href="http://blogs.msdn.com/ivo_manolov/attachment/4073328.ashx" mce_href="http://blogs.msdn.com/ivo_manolov/attachment/4073328.ashx"&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;attached &lt;/SPAN&gt;&lt;B&gt;here&lt;/B&gt;&lt;/A&gt;. &amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;&lt;/B&gt;
&lt;H1 style="MARGIN: 15pt 0in 2pt"&gt;&lt;B&gt;&lt;A class="" title=_Toc171736721 name=_Toc171736721&gt;&lt;/A&gt;&lt;FONT face=Calibri size=5&gt;WinForms Control (DataGridView)&amp;nbsp;in a WPF Window&lt;/FONT&gt;&lt;/B&gt;&lt;/H1&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face=Calibri&gt;In traditional Win32 programming user controls (buttons, listboxes, etc.) are created through a call to the &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms632679.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms632679.aspx"&gt;&lt;FONT face=Calibri&gt;CreateWindow&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; or &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms632680.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms632680.aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;CreateWindowEx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; APIs. Every control has a unique (per session) identifier of type HWND (a handle to a Win32 window)&lt;/FONT&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;and &lt;I&gt;is recognized as a separate window&lt;/I&gt; (albeit a child window) by the window manager of the OS. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/system.windows.forms%28vs.80%29.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.windows.forms(vs.80).aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;Windows Forms&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; (aka WinForms) is a GUI framework, released as part of .NET 1.0, which provides a cleaner programming model around traditional Win32 that conforms to the paradigms of the .NET framework. Fundamentally, WinForms is a wrapper of Win32, so WinForms controls conform to the same WPF hosting restrictions as any other Win32 control.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;Hosting of a WinForms user control in a WPF window is accomplished using the following steps:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;1.&lt;/B&gt; In the XAML file declaring the UI of your WPF window, add a &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.integration.windowsformshost.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.integration.windowsformshost.aspx"&gt;&lt;FONT face=Calibri color=#0000ff&gt;WindowsFormsHost&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; element. As content of the WindowsFormsHost element, add the WindowsForms control you want to instantiate (DataGridView in this particular example):&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Calibri&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;Window &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;x:Class&lt;/SPAN&gt;&lt;SPAN&gt;="WinFormsControlInWpfWindow.MainWindow"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;xmlns:x&lt;/SPAN&gt;&lt;SPAN&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;B&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN style="COLOR: red"&gt;xmlns:wf&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN&gt;="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Title&lt;/SPAN&gt;&lt;SPAN&gt;="WinForms Control (DataGridView) in a WPF Window"&lt;SPAN style="COLOR: maroon"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Height&lt;/SPAN&gt;&lt;SPAN&gt;="400"&lt;SPAN style="COLOR: maroon"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Width&lt;/SPAN&gt;="750"&lt;SPAN style="COLOR: maroon"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&amp;lt;StackPanel&amp;gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;&amp;lt;Button&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Click&lt;/SPAN&gt;="ButtonInsertSongOnClick"&amp;gt;_Insert Song&lt;SPAN style="COLOR: maroon"&gt;&amp;lt;/Button&amp;gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;&amp;lt;Button&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Click&lt;/SPAN&gt;="ButtonDeleteSongOnClick"&amp;gt;_Delete Song&lt;SPAN style="COLOR: maroon"&gt;&amp;lt;/Button&amp;gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="COLOR: maroon"&gt;&amp;lt;WindowsFormsHost&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;wf:DataGridView&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;x:Name&lt;/SPAN&gt;="dataGridView"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Location&lt;/SPAN&gt;="0, 0"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ColumnHeadersVisible&lt;/SPAN&gt;="True"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;SelectionMode&lt;/SPAN&gt;="FullRowSelect"&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;MultiSelect&lt;/SPAN&gt;="False"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;SelectionChanged&lt;/SPAN&gt;="DataGridViewOnSelectionChanged"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="COLOR: maroon"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/WindowsFormsHost&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/StackPanel&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;/Window&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;B&gt;2.&lt;/B&gt; Note how the XAML file above defines the name space for your WinForms control (the “wf” namespace) and the assembly where the WinForms class is implemented:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;Window &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;B&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="COLOR: red"&gt;xmlns:wf&lt;/SPAN&gt;&lt;SPAN&gt;="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;/Window&amp;gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;The directive above points to System.Windows.Forms, as that’s where the standard WinForms controls are implemented.&lt;/P&gt;
&lt;P&gt;Note also that the DataGridView control is instantiated through XAML (see &lt;A href="http://msdn2.microsoft.com/en-us/library/ms742875.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms742875.aspx"&gt;&lt;FONT color=#0000ff&gt;http://msdn2.microsoft.com/en-us/library/ms742875.aspx&lt;/FONT&gt;&lt;/A&gt; for XAML instantiation of WinForms controls). This is possible, because XAML provides a generic means of instantiating any .NET class and because of an interop technology known as &lt;A href="http://msdn2.microsoft.com/en-us/library/ms751565.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms751565.aspx"&gt;&lt;FONT color=#0000ff&gt;Property Mapping&lt;/FONT&gt;&lt;/A&gt;:&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;Window ...&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;WindowsFormsHost&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;&amp;lt;wf:DataGridView&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;x:Name&lt;/SPAN&gt;="dataGridView"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Location&lt;/SPAN&gt;="0, 0"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;ColumnHeadersVisible&lt;/SPAN&gt;="True"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;SelectionMode&lt;/SPAN&gt;="FullRowSelect"&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;MultiSelect&lt;/SPAN&gt;="False"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;SelectionChanged&lt;/SPAN&gt;="DataGridViewOnSelectionChanged"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/WindowsFormsHost&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;/Window&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;The mark-up above is equivalent to the following code (see &lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms751761.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms751761.aspx"&gt;&lt;FONT color=#0000ff&gt;http://msdn2.microsoft.com/en-us/library/ms751761.aspx&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;for code instantiation of WinForms controls):&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;public partial class MainWindow : System.Windows.Window&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;public MainWindow()&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;InitializeComponent();&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;private void WindowLoaded(object sender, RoutedEventArgs args)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WindowsFormsHost host = new WindowsFormsHost();&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;DataGridView dataGridView = new DataGridView();&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;dataGridView.Location = new Point(0, 0);&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;dataGridView.ColumnsHeadersVisible = true;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;dataGridView.MultiSelect = false;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;dataGridView.SelectionChanged += DataGridViewOnSelectionChanged;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; h&lt;/SPAN&gt;ost.child = dataGridView;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 15pt 0in 2pt"&gt;&lt;A class="" title=_Toc171736722 name=_Toc171736722&gt;&lt;/A&gt;&lt;FONT size=5&gt;Communicating WinForms Events to the WPF Window&lt;/FONT&gt;&lt;/H1&gt;
&lt;P mce_keep="true"&gt;WinForms events are convenient .NET wrappers around the underlying Win32 events. Because WinForms events conform to the .NET event programming model, you can directly reuse them in your WPF application.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;You attach event handlers to a WinForms control the same way you would attach event handlers to a WPF control, i.e. in XAML mark-up:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;Window ...&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;WindowsFormsHost&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;&amp;lt;wf:DataGridView&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;...&lt;/SPAN&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN style="COLOR: red"&gt;SelectionChanged&lt;/SPAN&gt;="DataGridViewOnSelectionChanged"&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/WindowsFormsHost&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: maroon"&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;/Window&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;Or, in code:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;public partial class MainWindow : System.Windows.Window&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;private void WindowLoaded(object sender, RoutedEventArgs args)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;B&gt;dataGridView.SelectionChanged += DataGridViewOnSelectionChanged;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;Then, you provide the implementation of the event handler in code:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; BACKGROUND: rgb(242,242,242) 0% 50%; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;public partial class MainWindow : System.Windows.Window&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;private void DataGridViewOnSelectionChanged(object sender, EventArgs args)&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;STRONG&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,176,80)"&gt;// Implementation of the event handler goes here&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;STRONG&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Lucida Console"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN&gt;&lt;FONT face="Lucida Console"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;H1 style="MARGIN: 15pt 0in 2pt"&gt;&lt;A class="" title=_Toc171736723 name=_Toc171736723&gt;&lt;/A&gt;&lt;FONT size=5&gt;Tab and Accelerators Support for the Hosted WinForms Control&lt;/FONT&gt;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;The WindowsFormsHost takes care of adding tab and accelerator support behind the scenes, so the hosted WinForms control is fully accessible without the need for any additional code. This is not necessarily the case when hosting unmanaged Win32 controls -- a topic which I will cover in upcoming posts.&lt;BR&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4073328" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/ivo_manolov/attachment/4073328.ashx" length="76977" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/Win32/default.aspx">Win32</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.msdn.com/ivo_manolov/archive/tags/DataGridView/default.aspx">DataGridView</category></item></channel></rss>