<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Windows Forms</title>
        <link>http://geekswithblogs.net/pvidler/category/15.aspx</link>
        <description>Windows Forms</description>
        <language>en-GB</language>
        <copyright>Pete Vidler</copyright>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Supporting the Tablet PC from Panel - Part IV</title>
            <link>http://geekswithblogs.net/pvidler/archive/2003/10/18/219.aspx</link>
            <description>&lt;p&gt;In a comment on the original post of this series, &lt;a id="_ctl0_pageBody-1_CommentList__ctl5_NameLink" target="_blank"&gt;Kollen Glynn&lt;/a&gt; points out that I could specify a bounding rectangle to the &lt;font face="Courier New" size="2"&gt;Invalidate()&lt;/font&gt; call in the &lt;font face="Courier New" size="2"&gt;Stroke&lt;/font&gt; method. Here's the code for that alteration:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#008000"&gt;// The event that this method handles is raised whenever&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#008000"&gt;// a stroke is completed (the pen leaves the surface)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; Stroke&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;font color="#000000"&gt; sender&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                         InkCollectorStrokeEventArgs e &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Make sure we only invalidate the necessary region&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Rectangle bounds &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; e&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Stroke&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;GetBoundingBox&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// GetBoundingBox uses Ink Space coords, so convert&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; Graphics g &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; CreateGraphics&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            InkSpaceToPixel&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;font color="#000000"&gt; bounds &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// The false here means that we don't refresh the&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// control's children. You might want to use true&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// if you are using InkOverlayAttachMode.InFront&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Invalidate&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; bounds&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// For some reason, this must come after the call&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// to Invalidate. Otherwise the stroke is not redrawn&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Highlight &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            e&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Stroke&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;ExtendedProperties&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Add&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; HighlightGuid&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;I also wrote a helper method to deal with converting a &lt;font face="Courier New" size="2"&gt;Rectangle&lt;/font&gt; from Ink space to pixel space:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#008000"&gt;// Convert an Ink Space Rectangle to Pixel Space&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; InkSpaceToPixel&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; Graphics g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;font color="#000000"&gt; Rectangle rect &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Cannot pass a reference of a property,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// so we need to make copies of each&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Point topLeft &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; rect&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Location&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Point bottomRight &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; rect&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Location &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt; rect&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Size&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Convert both temporaries to pixel space&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;InkSpaceToPixel&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;font color="#000000"&gt; topLeft &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;InkSpaceToPixel&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;font color="#000000"&gt; bottomRight &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Repackage our new values as a Rectangle&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        rect&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Location &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; topLeft&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        rect&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Size &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; Size &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;bottomRight &lt;/font&gt;&lt;font color="#000000"&gt;-&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; Size &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;topLeft&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;At this point it occurred to me that it would probably be better to only draw those strokes that fall within the clipping rectangle. In order to do this I've changed the painting code quite a lot, moving the actual drawing into two separate methods:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Overrides &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;see cref="Control"/&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;.OnPaint.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; OnPaint&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; PaintEventArgs e &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#000000"&gt;       &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Doing all our redrawing here enables us to take&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// full advantage of the automatic double buffering&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;base&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;OnPaint&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; e &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Adjust for any change in the view position&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        HandleScroll&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Draw all the strokes, clipped appropriately&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        DrawInk&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; e&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Graphics&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; e&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;ClipRectangle &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// If you aren't selecting you can go home now :)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;!&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Select &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Draw all selected ink, regardless of clipping&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        DrawSelectedInk&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; e&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Graphics &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The method to draw selected ink strokes uses the same approach as before, except that I no longer bother with the second drawing operation if the stroke is a highlight. This is because the white centre is never visible for selected highlights anyway, so drawing it would be a waste of time.&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#008000"&gt;// Draw all the selected ink. Does not bother with&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#008000"&gt;// testing to see if strokes are in the clipping region&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; DrawSelectedInk&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; Graphics g &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Strokes strokes &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Selection&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Renderer render &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Get the amount to increase size of selected lines&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Point strokeExtra &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;font color="#000000"&gt; Point&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; 4&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; 4 &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        render&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;PixelToInkSpace&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;font color="#000000"&gt; strokeExtra &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Redraw the selection strokes as they should look&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;font color="#000000"&gt; i &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; 0&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;font color="#000000"&gt; i &lt;/font&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#000000"&gt; strokes&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Count&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt;i &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            Stroke stroke &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; strokes&lt;/font&gt;&lt;font color="#000000"&gt;[&lt;/font&gt;&lt;font color="#000000"&gt;i&lt;/font&gt;&lt;font color="#000000"&gt;]&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            DrawingAttributes da &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; stroke&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;DrawingAttributes&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Clone&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Draw the extra thick stroke&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;IgnorePressure &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Width &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; strokeExtra&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;X&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Height &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; strokeExtra&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Y&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            render&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Draw&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; stroke&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; da &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// The second draw doesn't show for highlights&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// so there's no need to bother with it&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ExtendedProperties ep &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; stroke&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;ExtendedProperties&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; ep&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;DoesPropertyExist&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; HighlightGuid &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Draw the white center&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Width &lt;/font&gt;&lt;font color="#000000"&gt;-&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; strokeExtra&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;X&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Height &lt;/font&gt;&lt;font color="#000000"&gt;-&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; strokeExtra&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Y&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Color &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; Color&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;White&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            render&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Draw&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; stroke&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; da &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;There are quite a few changes to the way I'm drawing normal ink strokes. Firstly, I'm not drawing selected strokes here anymore (since they get drawn afterwards anyway). Secondly, each stroke's bounding box is tested against the clipping rectangle to determine if it should be drawn:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#008000"&gt;// Draw all the non-selected ink. Tests each&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#008000"&gt;// stroke to ensure it should be drawn&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; DrawInk&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; Graphics g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; Rectangle clip &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Strokes strokes &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Strokes&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Strokes selection &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Selection&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Renderer render &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Rectangle bounds&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Draw all the non-selected strokes&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;font color="#000000"&gt; i &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; 0&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;font color="#000000"&gt; i &lt;/font&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#000000"&gt; strokes&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Count&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt;i &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            Stroke stroke &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; strokes&lt;/font&gt;&lt;font color="#000000"&gt;[&lt;/font&gt;&lt;font color="#000000"&gt;i&lt;/font&gt;&lt;font color="#000000"&gt;]&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Don't bother drawing the selection here&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; selection&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Contains&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; stroke &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Don't bother drawing if it's not needed&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            bounds &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; stroke&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;GetBoundingBox&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            InkSpaceToPixel&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;font color="#000000"&gt; bounds &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;!&lt;/font&gt;&lt;font color="#000000"&gt;clip&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;IntersectsWith&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; bounds &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Just draw the damn thing already!&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            render&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Draw&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; stroke &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;I have no idea if this testing against the clipping rectangle actually produces a performance increase or not. It certainly doesn't seem to hurt performance on my machine (which is a laptop, not a tablet), but you should probably try benchmarking or profiling to see if you need this yourself. I don't bother doing this for the selected strokes because there are generally fewer of them, and the testing is much harder (you have to compensate for the extra size).&lt;/p&gt;
&lt;p&gt;As always, enjoy and let me know if there are problems with it.&lt;/p&gt;
&lt;p&gt;EDIT: Corrected a nasty little error that got the size wrong in &lt;font face="Courier New" size="2"&gt;InkSpaceToPixel&lt;/font&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=219"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=219" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/pvidler/aggbug/219.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pete Vidler</dc:creator>
            <guid>http://geekswithblogs.net/pvidler/archive/2003/10/18/219.aspx</guid>
            <pubDate>Sun, 19 Oct 2003 01:15:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/pvidler/comments/219.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/pvidler/archive/2003/10/18/219.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/pvidler/comments/commentRss/219.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/pvidler/services/trackbacks/219.aspx</trackback:ping>
        </item>
        <item>
            <title>Supporting the Tablet PC from Panel - Part III</title>
            <link>http://geekswithblogs.net/pvidler/archive/2003/10/17/210.aspx</link>
            <description>&lt;p&gt;The key problem with the code in my first post is that it renders all strokes the same. Even if they are selected. If you can tolerate this (it doesn't look too bad as you still get the selection frame), then go ahead and use that code.&lt;/p&gt;
&lt;p&gt;Sadly, I'm a perfectionist. I searched long and hard for a built in way to get selected strokes drawn properly. Long story short: there isn't one. Fortunately, I stumbled upon a &lt;a href="http://www.tabletpcdeveloper.com/content/bookhtml/chapter_05.aspx"&gt;&lt;font color="#770000"&gt;sample chapter&lt;/font&gt;&lt;/a&gt; from "Building Tablet PC Applications" which has a solution (talk about lucky)! The book looks like it's probably worth the money if you are serious about Tablet PC support, so I would suggest buying it.&lt;/p&gt;
&lt;p&gt;Anyway, here's the newly modified &lt;font face="Courier New" size="2"&gt;OnPaint&lt;/font&gt; override (this is very close to the books code, with a few very minor alterations):&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Overrides &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;see cref="Control"/&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;.OnPaint.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; OnPaint&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; PaintEventArgs e &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#000000"&gt;       &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;base&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;OnPaint&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; e &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Adjust for any change in the view position&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        HandleScroll&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Doing all our redrawing here enables us to take&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// full advantage of the automatic double buffering&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Draw&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; e&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Graphics&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Strokes &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// If you aren't selecting you can go home now :)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;!&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Select &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Get the amount to increase size of selected lines&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Point strokeExtra &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;font color="#000000"&gt; Point&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; 4&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; 4 &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;PixelToInkSpace&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; e&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Graphics&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;font color="#000000"&gt; strokeExtra &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Redraw the selection strokes as they should look&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;font color="#000000"&gt; i &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; 0&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;font color="#000000"&gt; i &lt;/font&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Selection&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Count&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt;i &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// You could use foreach here for simplicity,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// but for is faster and faster is good here&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            Stroke stroke &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Selection&lt;/font&gt;&lt;font color="#000000"&gt;[&lt;/font&gt;&lt;font color="#000000"&gt;i&lt;/font&gt;&lt;font color="#000000"&gt;]&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            DrawingAttributes da &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; stroke&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;DrawingAttributes&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Clone&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Draw the extra thick stroke&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;IgnorePressure &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Width &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; strokeExtra&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;X&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Height &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; strokeExtra&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Y&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Draw&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; e&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Graphics&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; stroke&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; da &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Draw the white center&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Width &lt;/font&gt;&lt;font color="#000000"&gt;-&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; strokeExtra&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;X&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Height &lt;/font&gt;&lt;font color="#000000"&gt;-&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; strokeExtra&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Y&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Uncomment these four lines to try something&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// different when the stroke is a highlight. If&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// you use this method, any stroke under the&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// highlight will not be shown, and the white&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// center will not be smoothed:&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;//ExtendedProperties ep = stroke.ExtendedProperties;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;//if ( ep.DoesPropertyExist( HighlightGuid ) )&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;//  da.RasterOperation = RasterOperation.White&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;//else&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Color &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; Color&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;White&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Draw&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; e&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Graphics&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; stroke&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; da &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Notice the code that is commented out. This provides a slightly different method for displaying selected highlights. I recommend you try the code with and without this to see which you prefer (I prefer without). If you look at the very end of that &lt;a href="http://www.tabletpcdeveloper.com/content/bookhtml/chapter_05.aspx"&gt;&lt;font color="#770000"&gt;sample chapter&lt;/font&gt;&lt;/a&gt;, you will find a slightly fancier way of drawing selected strokes that you could also use if you prefer.&lt;/p&gt;
&lt;p&gt;By the way, all of this code should work if we derive from &lt;font face="Courier New" size="2"&gt;UserControl&lt;/font&gt; as well. In fact you should be able to inherit from any class that itself inherits from &lt;font face="Courier New" size="2"&gt;ScrollableControl&lt;/font&gt;.&lt;/p&gt;
&lt;p&gt;So that concludes my ramblings about the Tablet PC. If you have anything else you want me to write about, please let me know (comments are best -- dodgy email still :) ).&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=210"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=210" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/pvidler/aggbug/210.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pete Vidler</dc:creator>
            <guid>http://geekswithblogs.net/pvidler/archive/2003/10/17/210.aspx</guid>
            <pubDate>Fri, 17 Oct 2003 23:40:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/pvidler/comments/210.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/pvidler/archive/2003/10/17/210.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/pvidler/comments/commentRss/210.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/pvidler/services/trackbacks/210.aspx</trackback:ping>
        </item>
        <item>
            <title>Supporting the Tablet PC from Panel - Part II</title>
            <link>http://geekswithblogs.net/pvidler/archive/2003/10/17/208.aspx</link>
            <description>&lt;p&gt;This time I'll be adding a few more properties to the &lt;font face="Courier New" size="2"&gt;InkPanel&lt;/font&gt;, including a way to change the mode of the Ink and some support for changing colours. As an added bonus, I'll add support for separate highlighting including a way to separate the highlights from the ordinary ink.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changing the Mode&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;font face="Courier New" size="2"&gt;InkOverlay&lt;/font&gt; object has support for three basic editing modes: &lt;font face="Courier New" size="2"&gt;Ink&lt;/font&gt;, &lt;font face="Courier New" size="2"&gt;Select&lt;/font&gt; and &lt;font face="Courier New" size="2"&gt;Delete&lt;/font&gt;. I also want two more of my own, specifically &lt;font face="Courier New" size="2"&gt;Highlight&lt;/font&gt; and &lt;font face="Courier New" size="2"&gt;Disabled&lt;/font&gt;. In order to achieve this we can add a new enumeration that will be used to specify the mode to set:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Specifies the mode that the &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;see cref="InkPanel"/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; should be set to.&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;enum&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;Standard drawing mode.&lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    Ink &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkOverlayEditingMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Ink&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;Deletion mode.&lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    Delete &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkOverlayEditingMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Delete&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;Selection mode.&lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    Select &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkOverlayEditingMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Select&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;Highlighter mode.&lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    Highlight&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Disable ink support so we can access the&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;see cref="InkPanel"/&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt; directly.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    Disabled&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Now that we have a way of representing the mode, we'll be needing a property to control it. The set method has a bit of work to do in order to correctly clean up from the previous mode and set up the new one, but it isn't too complicated. We helped ourselves quite a bit by making the enumeration map directly to &lt;font face="Courier New" size="2"&gt;InkOverlayEditingMode&lt;/font&gt;, so we don't need to mess around converting between the two. Notice that we also include the underlying private variable for the property. You can add this code to the appropriate place in the class yourself, I won't waste space with complete code here.&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Gets or sets the Ink mode for the &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;see cref="InkPanel"/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;remarks&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; The Ink mode can be set to any value of the&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;see cref="InkMode"/&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt; enumeration.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/remarks&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;font color="#000000"&gt; InkMode InkMode&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#000000"&gt; inkMode&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Simplify things later by ensuring it changes&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Enabled &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Turn off highlighting&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Highlight &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                SetHighlightMode&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Remove the old selection&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Select &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Selection &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;CreateStrokes&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            inkMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Deal with the two special cases&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Disabled &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Highlight &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                SetHighlightMode&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Enabled &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// InkMode should map directly onto the EditingMode&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;EditingMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; InkOverlayEditingMode &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;inkMode&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Enabled &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font size="2"&gt;}&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; InkMode inkMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Ink&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;That's it for the simple stuff, now on to something more fun.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changing the Pen Colour&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Before we can look into changing the pen colour, we need to decide on a highlighting strategy. Since I wanted to keep highlights separate from normal ink, I have chosen to add an &lt;font face="Courier New" size="2"&gt;ExtendedProperty&lt;/font&gt; to each highlight and test for it when changing colours.&lt;/p&gt;
&lt;p&gt;It turns out that changing the pen colour is even easier than setting the mode. The only hassle here is to make sure we don't change the colour of any highlights by mistake. To do this we can loop through all the strokes in the selection and test each one for the property that we set on highlights (which I'll detail in the next section):&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Gets or sets the color to use for normal inking.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;remarks&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; If we are in selection mode and this property is set,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; then any normal ink strokes that are selected will be&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; changed to this color.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/remarks&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;font color="#000000"&gt; Color InkColor&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#000000"&gt; inkColor&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            inkColor &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Don't bother with highlights, they are separate&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Highlight &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Enabled &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;DefaultDrawingAttributes&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Color &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; inkColor&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Change the color for every selected ink stroke&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Select &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; Stroke stroke &lt;/font&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Selection &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    ExtendedProperties ep&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    ep &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; stroke&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;ExtendedProperties&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#008000"&gt;// Don't change highlights&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;!&lt;/font&gt;&lt;font color="#000000"&gt;ep&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;DoesPropertyExist&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; HighlightGuid &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                        stroke&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;DrawingAttributes&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Color &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; inkColor&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Enabled &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font size="2"&gt;}&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; Color inkColor &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; Color&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Black&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Setting the colour of the highlights is almost exactly the same. The only real difference is that we test for the presence of the &lt;font face="Courier New" size="2"&gt;ExtendedProperty&lt;/font&gt;, not it's absence:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Gets or sets the color to use for highlighting.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;remarks&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; If we are in selection mode and this property is set,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; then any highlights that are selected will be changed&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; to this color.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/remarks&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;font color="#000000"&gt; Color HighlightColor&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#000000"&gt; highlightColor&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            highlightColor &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Enabled &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Select &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#008000"&gt;// Change the color of any selected highlights&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; Stroke stroke &lt;/font&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Selection &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    ExtendedProperties ep&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    ep &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; stroke&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;ExtendedProperties&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; ep&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;DoesPropertyExist&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; HighlightGuid &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                        stroke&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;DrawingAttributes&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Color &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;value&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Don't go any further if we aren't highlighting&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;!&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Highlight &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Enabled &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            SetHighlightMode&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            SetHighlightMode&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Enabled &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font size="2"&gt;}&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; Color highlightColor &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; Color&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Yellow&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Highlighting&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In order to make highlighting work properly, we'll be needing to implement the &lt;font face="Courier New" size="2"&gt;SetHighlightMode&lt;/font&gt; method used earlier. There are a number of different options that this method must set, all of them based around the &lt;font face="Courier New" size="2"&gt;DefaultDrawingAttributes&lt;/font&gt; class. You can look them up in the SDK documentation if you want a better idea of what they all do. I borrowed the approach for this highlighting from &lt;a href="http://www.tabletpcdeveloper.com/content/whitepapers/penink/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#008000"&gt;// Setup the highlighting mode to mimic Journal&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; SetHighlightMode&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;font color="#000000"&gt; highlighting &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        DrawingAttributes da &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;DefaultDrawingAttributes&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; highlighting &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Ensure we aren't erasing or selecting&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;EditingMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkOverlayEditingMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Ink&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Save the old values to go back to later&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            oldPenTip &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;PenTip&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            oldWidth &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Width&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            oldHeight &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Height&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            oldRast &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;RasterOperation&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Set our highlighting values&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;PenTip &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; PenTip&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Rectangle&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Width &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; 250&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Height &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; 400&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Color &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; highlightColor&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;RasterOperation &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; RasterOperation&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;MaskPen&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Reset the old values, or defaults if&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// there aren't any values stored&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Color &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; inkColor&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;RasterOperation &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; oldRast&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Height &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; oldHeight&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Width &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; oldWidth&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            da&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;PenTip &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; oldPenTip&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font size="2"&gt;}&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; RasterOperation oldRast &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; RasterOperation&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;CopyPen&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;float&lt;/font&gt;&lt;font color="#000000"&gt; oldWidth &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; 53&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;float&lt;/font&gt;&lt;font color="#000000"&gt; oldHeight &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; 1&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; PenTip oldPenTip &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; PenTip&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Ball&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Now all we need to do is apply the &lt;font face="Courier New" size="2"&gt;ExtendedProperty&lt;/font&gt; to highlight strokes in the Stroke method. For some reason, this property must be changed &lt;em&gt;after&lt;/em&gt; we have called &lt;font face="Courier New" size="2"&gt;Invalidate&lt;/font&gt; or the stroke does not get redrawn (on my system):&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#008000"&gt;// The event that this method handles is raised whenever&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#008000"&gt;// a stroke is completed (the pen leaves the surface)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; Stroke&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;font color="#000000"&gt; sender&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                         InkCollectorStrokeEventArgs e &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Redraw the ink so it is smoothed immediately,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// not on the first update as is the default&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Invalidate&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// For some reason, this must come after the call&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// to Invalidate. Otherwise the stroke is not redrawn&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; InkMode&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Highlight &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            e&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Stroke&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;ExtendedProperties&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Add&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; HighlightGuid&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; inkMode &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;We'll be needing a GUID for the ExtendedProperty. You can generate your own with the uuidgen command line utility.&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;    &lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; Guid HighlightGuid &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;font color="#000000"&gt; Guid&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#800080"&gt;"your-GUID-here"&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, that's it. Hopefully I've not forgotten anything and I hope you enjoy it. Next time I'll post about getting the selection to display properly (it doesn't when you draw the strokes yourself).&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=208"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=208" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/pvidler/aggbug/208.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pete Vidler</dc:creator>
            <guid>http://geekswithblogs.net/pvidler/archive/2003/10/17/208.aspx</guid>
            <pubDate>Fri, 17 Oct 2003 22:36:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/pvidler/comments/208.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/pvidler/archive/2003/10/17/208.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/pvidler/comments/commentRss/208.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/pvidler/services/trackbacks/208.aspx</trackback:ping>
        </item>
        <item>
            <title>Supporting the Tablet PC from Panel</title>
            <link>http://geekswithblogs.net/pvidler/archive/2003/10/16/201.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Note: This has been rewritten to follow a much better approach that I found shortly after first posting.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;I recently had the opportunity to watch &lt;a href="http://msdn.microsoft.com/theshow/"&gt;&lt;font color="#770000"&gt;The .NET Show&lt;/font&gt;&lt;/a&gt;'s latest &lt;a href="http://msdn.microsoft.com/theshow/episode036/default.asp"&gt;&lt;font color="#770000"&gt;installment&lt;/font&gt;&lt;/a&gt;, all about programming for the Tablet PC on .NET. The ease with which they added Ink support to an application in the show inspired me to try it for myself. I started by checking the internet for samples (as you do :) ), and found the &lt;a href="http://www.tabletpcdeveloper.com/"&gt;&lt;font color="#770000"&gt;Tablet PC Developer&lt;/font&gt;&lt;/a&gt; website.&lt;/p&gt;
&lt;p&gt;On that website there are a large number of samples available, from serializing Ink to adding Ink support to a scrollable picturebox. One in particular caught my eye: "Smoothing Ink". Basically, the author suggests you use &lt;font face="Courier New" size="2"&gt;DrawingAttributes.FitToCurve&lt;/font&gt; for smoothing and some Win32 interop to get a double buffered effect. This technique seems to be necessary if you are trying to draw to a bitmap object, but is overkill if you just want to draw to a control.&lt;/p&gt;
&lt;p&gt;I've decided to take a different approach. I've inherited from &lt;font face="Courier New" size="2"&gt;Panel&lt;/font&gt; and used the .NET Framework's built in support for double buffering (quite easy with &lt;font face="Courier New" size="2"&gt;InkOverlay&lt;/font&gt;'s &lt;font face="Courier New" size="2"&gt;AutoRedraw&lt;/font&gt; property set to &lt;font face="Courier New" size="2"&gt;false&lt;/font&gt;). Originally I had a great deal of trouble supporting the &lt;font face="Courier New" size="2"&gt;Panel&lt;/font&gt;'s built in scrolling, but soon after posting I found a better way. Every time the control is painted I simply check to see if the scroll position has moved and update the InkOverlay accordingly, which is much better than detecting the scrolling as I was doing originally. Here's the code:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#000000"&gt; System&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#000000"&gt; System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Drawing&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#000000"&gt; System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Windows&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Forms&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#000000"&gt; Microsoft&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Ink&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Represents a standard &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;see cref="Panel"/&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt; with Ink&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; functionality.&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;remarks&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Probably requires the Tablet PC SDK to compile. Almost&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; certainly requires either Windows XP Tablet edition or&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; the redistributable runtime (you have this if you did&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Windows Update and installed the Journal Viewer) in&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; order to run correctly.&lt;/font&gt;&lt;br /&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/remarks&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;font color="#000000"&gt; InkPanel &lt;/font&gt;&lt;font color="#000000"&gt;:&lt;/font&gt;&lt;font color="#000000"&gt; Panel&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Initializes a new instance of the &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;see cref="InkPanel"/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; class.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;font color="#000000"&gt; InkPanel&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Make sure we are double buffering or ink flickers&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        SetStyle&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; ControlStyles&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;AllPaintingInWmPaint&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        SetStyle&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; ControlStyles&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;DoubleBuffer&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        SetStyle&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; ControlStyles&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;UserPaint&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        SetStyle&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; ControlStyles&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;ResizeRedraw&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        UpdateStyles&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        ink &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;font color="#000000"&gt; InkOverlay&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; Handle &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Stroke &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;font color="#000000"&gt; InkCollectorStrokeEventHandler&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; Stroke &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Setting this property to true enables smoothing&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;DefaultDrawingAttributes&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;FitToCurve &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Setting this property to false means we have to do&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// all redrawing of the ink ourselves in OnPaint&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;AutoRedraw &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Enabled &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Overrides &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;see cref="Control"/&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;.Dispose.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; Dispose&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;font color="#000000"&gt; disposing &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// InkOverlay is managed, so only dispose if necessary&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; disposing &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Dispose&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; Overrides &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;see cref="Control"/&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;.OnPaint.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#808080"&gt;///&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; OnPaint&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; PaintEventArgs e &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#000000"&gt;       &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;base&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;OnPaint&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; e &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;font color="#008000"&gt;// Adjust for any change in the view position&lt;/font&gt;&lt;br /&gt;        HandleScroll&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Doing all our redrawing here enables us to take&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// full advantage of the automatic double buffering&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Draw&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; e&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Graphics&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Strokes &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#008000"&gt;// Deal with any scrolling messages&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; HandleScroll&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// We can be called without actually having scrolled&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; oldScrollPos &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; AutoScrollPosition &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// These get altered, so take copies&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Point oldPos &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; oldScrollPos&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Point newPos &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; AutoScrollPosition&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; Graphics g &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; CreateGraphics&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Transform pixels to more useful units&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;PixelToInkSpace&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;font color="#000000"&gt; oldPos &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;PixelToInkSpace&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; g&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;font color="#000000"&gt; newPos &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Move the ink to match the new scroll position.&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// Notice that newPos and oldPos are negative, so&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#008000"&gt;// this order is required to get the right result&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            ink&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Renderer&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Move&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; newPos&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;X &lt;/font&gt;&lt;font color="#000000"&gt;-&lt;/font&gt;&lt;font color="#000000"&gt; oldPos&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;X&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                               newPos&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Y &lt;/font&gt;&lt;font color="#000000"&gt;-&lt;/font&gt;&lt;font color="#000000"&gt; oldPos&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#000000"&gt;Y &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Must update our old position&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        oldScrollPos &lt;/font&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt; AutoScrollPosition&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#008000"&gt;// The event that this method handles is raised whenever&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#008000"&gt;// a stroke is completed (the pen leaves the surface)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#000000"&gt; Stroke&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;font color="#000000"&gt; sender&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                         InkCollectorStrokeEventArgs e &lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// Redraw the ink so it is smoothed immediately,&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;// not on the first update as is the default&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        Invalidate&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#008000"&gt;// This would have been called "inkOverlay" but it takes&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#008000"&gt;// up too much horizontal space to be posted on a weblog&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; InkOverlay ink&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#008000"&gt;// Store our old position to determine when view changes&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#000000"&gt; Point oldScrollPos&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Notice that we no longer need the &lt;font face="Courier New" size="2"&gt;WndProc&lt;/font&gt; or &lt;font face="Courier New" size="2"&gt;OnMouseWheel&lt;/font&gt; overrides, because the new approach is to detect any scrolling directly from &lt;font face="Courier New" size="2"&gt;OnPaint&lt;/font&gt;. This is a much nicer method because it accounts for any change in &lt;font face="Courier New" size="2"&gt;AutoScrollPosition&lt;/font&gt;, not just scrolling by the user.&lt;/p&gt;
&lt;p&gt;My next post will add some properties to the &lt;font face="Courier New" size="2"&gt;InkPanel&lt;/font&gt; allowing the editing mode to be changed.&lt;/p&gt;
&lt;p&gt;EDIT: Major change in the approach used.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=201"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=201" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/pvidler/aggbug/201.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pete Vidler</dc:creator>
            <guid>http://geekswithblogs.net/pvidler/archive/2003/10/16/201.aspx</guid>
            <pubDate>Thu, 16 Oct 2003 21:35:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/pvidler/comments/201.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/pvidler/archive/2003/10/16/201.aspx#feedback</comments>
            <slash:comments>12</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/pvidler/comments/commentRss/201.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/pvidler/services/trackbacks/201.aspx</trackback:ping>
        </item>
        <item>
            <title>Extending RichTextBox - Part III</title>
            <link>http://geekswithblogs.net/pvidler/archive/2003/10/15/192.aspx</link>
            <description>&lt;p&gt;As promised earlier, I've added the ability to change the background colour of the text. I've also made one or two minor changes to the rest of the code, which I'll detail at the end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Background Colour&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Changing the background colour is a simple matter. It works in exactly the same way as changing the underline style, by setting the character format. Since we're dealing with Color here, we need to be using System.Drawing. Then it's just a matter of sending the correct message:&lt;/p&gt;

&lt;!-- CODE BEGINS HERE --&gt;

&lt;p&gt;&lt;div style="padding: 0.8em 0.5em; margin: 0em 2em; background-color: #ebebeb; border: 1px dashed black;"&gt;
&lt;span style="padding: 0.2em 0.5em; font-weight: bold; color: navy; background-color: silver; border: 1px solid black; cursor: pointer" onclick="var div=document.getElementById('pvidlerCodePost3Div1');
if(div.style.display=='none')
{
    div.style.display='block';
    this.innerHTML='&amp;minus;';
}
else
{
    div.style.display='none';
    this.innerHTML='+';
}"&gt;+&lt;/span&gt;  Code to set the background colour for a selected region.
&lt;/div&gt;

&lt;div id="pvidlerCodePost3Div1" style="display:none"&gt;
&lt;code&gt;&lt;pre style="padding: 0.5em; margin: 0em 2em; background-color: #ebebeb; border-bottom: 1px dashed black; border-left: 1px dashed black; border-right: 1px dashed black;"&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Gets or sets the background color to apply to the&lt;/span&gt;
&lt;span style="color: green;"&gt;/// current selection or insertion point.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// If the selection contains more than one background&lt;/span&gt;
&lt;span style="color: green;"&gt;/// color, then this property will indicate it by&lt;/span&gt;
&lt;span style="color: green;"&gt;/// returning Color.Empty.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;Color&lt;/span&gt; &lt;span style="color: red;"&gt;SelectionBackColor&lt;/span&gt;
{
    &lt;span style="color: blue;"&gt;get&lt;/span&gt;
    {
        &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt;();
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;Marshal&lt;/span&gt;.&lt;span style="color: red;"&gt;SizeOf&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Get the background color.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ), &lt;span style="color: #6c6c6c;"&gt;EM_GETCHARFORMAT&lt;/span&gt;,
                     &lt;span style="color: #6c6c6c;"&gt;SCF_SELECTION&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Default to Color.Empty as there could be&lt;/span&gt;
        &lt;span style="color: green;"&gt;// several colors present in this selection.&lt;/span&gt;
        &lt;span style="color: blue;"&gt;if&lt;/span&gt; ( ( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt; &amp;amp; &lt;span style="color: #6c6c6c;"&gt;CFM_BACKCOLOR&lt;/span&gt; ) == 0 )
            &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: firebrick;"&gt;Color&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;Empty&lt;/span&gt;;
        
        &lt;span style="color: green;"&gt;// Deal with the weird Windows color format.&lt;/span&gt;
        &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;backCol&lt;/span&gt; = &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;crBackColor&lt;/span&gt;;
        &lt;span style="color: firebrick;"&gt;Color&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;ret&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;ColorTranslator&lt;/span&gt;.&lt;span style="color: red;"&gt;FromWin32&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;backCol&lt;/span&gt; );
        
        &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;ret&lt;/span&gt;;
    }
    
    &lt;span style="color: blue;"&gt;set&lt;/span&gt;
    {
        &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt;();
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;Marshal&lt;/span&gt;.&lt;span style="color: red;"&gt;SizeOf&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt; = &lt;span style="color: #6c6c6c;"&gt;CFM_BACKCOLOR&lt;/span&gt;;
        
        &lt;span style="color: green;"&gt;// Deal with the weird Windows color format.&lt;/span&gt;
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;crBackColor&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;ColorTranslator&lt;/span&gt;.&lt;span style="color: red;"&gt;ToWin32&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;value&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Set the background color.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ), &lt;span style="color: #6c6c6c;"&gt;EM_SETCHARFORMAT&lt;/span&gt;,
                     &lt;span style="color: #6c6c6c;"&gt;SCF_SELECTION&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
    }
}
&lt;/pre&gt;&lt;/code&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;!-- CODE ENDS HERE --&gt;

&lt;p&gt;And there's one more constant to add:&lt;/p&gt;

&lt;!-- CODE BEGINS HERE --&gt;

&lt;code&gt;&lt;pre style="padding: 0.5em; margin: 0em 2em; background-color: #ebebeb; border: 1px dashed black;"&gt;
&lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;CFM_BACKCOLOR&lt;/span&gt; = 67108864;
&lt;/pre&gt;&lt;/code&gt;

&lt;!-- CODE ENDS HERE --&gt;

&lt;p&gt;That should now enable us to change the background colour of the text. Simple, wasn't it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alterations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Notice in the middle of the get method above, we return &lt;code&gt;Color.Empty&lt;/code&gt; by default. This is because that return value is used when more than one colour is selected (like in Word when you select across several fonts and the font selection combobox goes blank). A similar approach can be taken in the alignment and underline properties presented previously.&lt;/p&gt;

&lt;p&gt;All you have to do is add an entry to the relevant enumeration called "None" (or whatever), probably equal to zero, and return it in the appropriate get method where it says "Default to &amp;lt;whatever&amp;gt;".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's it for &lt;code&gt;AdvRichTextBox&lt;/code&gt;. If anyone is actually reading this and wants me to add more functionality (or post complete source), just leave a comment or send me an email.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=192"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=192" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/pvidler/aggbug/192.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pete Vidler</dc:creator>
            <guid>http://geekswithblogs.net/pvidler/archive/2003/10/15/192.aspx</guid>
            <pubDate>Thu, 16 Oct 2003 00:33:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/pvidler/comments/192.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/pvidler/archive/2003/10/15/192.aspx#feedback</comments>
            <slash:comments>30</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/pvidler/comments/commentRss/192.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/pvidler/services/trackbacks/192.aspx</trackback:ping>
        </item>
        <item>
            <title>Extending RichTextBox - Part II</title>
            <link>http://geekswithblogs.net/pvidler/archive/2003/10/15/188.aspx</link>
            <description>&lt;p&gt;Microsoft Word and Visual Studio have one very cool feature in common -- squiggly underlining of errors. As of richedit 3.0 (distributed with Windows 2000 and higher, possibly also with ME) we can get these in the &lt;code&gt;RichTextBox&lt;/code&gt;. Actually, we can get a lot more underline styles than that...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Underlining&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once again we are going to have to communicate with the underlying richedit control. This time we need to set the character format, so we'll need to add some extra stuff to our class:&lt;/p&gt;

&lt;!-- CODE BEGINS HERE --&gt;

&lt;p&gt;&lt;div style="padding: 0.8em 0.5em; margin: 0em 2em; background-color: #ebebeb; border: 1px dashed black;"&gt;
&lt;span style="padding: 0.2em 0.5em; font-weight: bold; color: navy; background-color: silver; border: 1px solid black; cursor: pointer" onclick="var div=document.getElementById('pvidlerCodePost2Div1');
if(div.style.display=='none')
{
    div.style.display='block';
    this.innerHTML='&amp;minus;';
}
else
{
    div.style.display='none';
    this.innerHTML='+';
}"&gt;+&lt;/span&gt;  Code to interface with the Win32 &lt;code&gt;CHARFORMAT2&lt;/code&gt; structure.
&lt;/div&gt;

&lt;div id="pvidlerCodePost2Div1" style="display:none"&gt;
&lt;code&gt;&lt;pre style="padding: 0.5em; margin: 0em 2em; background-color: #ebebeb; border-bottom: 1px dashed black; border-left: 1px dashed black; border-right: 1px dashed black;"&gt;
&lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;CFM_UNDERLINETYPE&lt;/span&gt; = 8388608;
&lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;EM_SETCHARFORMAT&lt;/span&gt; = 1092;
&lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;EM_GETCHARFORMAT&lt;/span&gt; = 1082;

[StructLayout( LayoutKind.Sequential )]
&lt;span style="color: blue;"&gt;private struct&lt;/span&gt; &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt;
{
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;uint&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;uint&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;dwEffects&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;yHeight&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;yOffset&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;crTextColor&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;bCharSet&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;bPitchAndFamily&lt;/span&gt;;
    [MarshalAs( UnmanagedType.ByValArray, SizeConst = 32 )]
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;char&lt;/span&gt;[] &lt;span style="color: #6c6c6c;"&gt;szFaceName&lt;/span&gt;;
    
    &lt;span style="color: green;"&gt;// CHARFORMAT2 from here onwards.&lt;/span&gt;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wWeight&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;sSpacing&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;crBackColor&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;LCID&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;uint&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;dwReserved&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;sStyle&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wKerning&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;bUnderlineType&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;bAnimation&lt;/span&gt;;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;bRevAuthor&lt;/span&gt;;
}

[DllImport( "user32", CharSet = CharSet.Auto )]
&lt;span style="color: blue;"&gt;private static extern&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;hWnd&lt;/span&gt;, &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;msg&lt;/span&gt;,
                                       &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wParam&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;lp&lt;/span&gt; );
&lt;/pre&gt;&lt;/code&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;!-- CODE ENDS HERE --&gt;

&lt;p&gt;&lt;strong&gt;Underline Style&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The underline style and colour are both set with the same message, so we must be careful to preserve the colour while changing the underline style. We'll use a property again so that we remain consistent with the original &lt;code&gt;RichTextBox&lt;/code&gt;:&lt;/p&gt;

&lt;!-- CODE BEGINS HERE --&gt;

&lt;p&gt;&lt;div style="padding: 0.8em 0.5em; margin: 0em 2em; background-color: #ebebeb; border: 1px dashed black;"&gt;
&lt;span style="padding: 0.2em 0.5em; font-weight: bold; color: navy; background-color: silver; border: 1px solid black; cursor: pointer" onclick="var div=document.getElementById('pvidlerCodePost2Div2');
if(div.style.display=='none')
{
    div.style.display='block';
    this.innerHTML='&amp;minus;';
}
else
{
    div.style.display='none';
    this.innerHTML='+';
}"&gt;+&lt;/span&gt;  Code to set the underline style.
&lt;/div&gt;

&lt;div id="pvidlerCodePost2Div2" style="display:none"&gt;
&lt;code&gt;&lt;pre style="padding: 0.5em; margin: 0em 2em; background-color: #ebebeb; border-bottom: 1px dashed black; border-left: 1px dashed black; border-right: 1px dashed black;"&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Gets or sets the underline style to apply to the&lt;/span&gt;
&lt;span style="color: green;"&gt;/// current selection or insertion point.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Underline styles can be set to any value of the&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;see cref="UnderlineStyle"/&amp;gt;&lt;/span&gt; &lt;span style="color: green;"&gt;enumeration.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;UnderlineStyle&lt;/span&gt; &lt;span style="color: red;"&gt;SelectionUnderlineStyle&lt;/span&gt;
{
    &lt;span style="color: blue;"&gt;get&lt;/span&gt;
    {
        &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt;();
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;Marshal&lt;/span&gt;.&lt;span style="color: red;"&gt;SizeOf&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Get the underline style.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ), &lt;span style="color: #6c6c6c;"&gt;EM_GETCHARFORMAT&lt;/span&gt;,
                     &lt;span style="color: #6c6c6c;"&gt;SCF_SELECTION&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Default to no underline.&lt;/span&gt;
        &lt;span style="color: blue;"&gt;if&lt;/span&gt; ( ( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt; &amp;amp; &lt;span style="color: #6c6c6c;"&gt;CFM_UNDERLINETYPE&lt;/span&gt; ) == 0 )
            &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: firebrick;"&gt;UnderlineStyle&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;None&lt;/span&gt;;
        
        &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;style&lt;/span&gt; = ( &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; )( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;bUnderlineType&lt;/span&gt; &amp;amp; 0x0F );
        
        &lt;span style="color: blue;"&gt;return&lt;/span&gt; ( &lt;span style="color: firebrick;"&gt;UnderlineStyle&lt;/span&gt; )&lt;span style="color: #6c6c6c;"&gt;style&lt;/span&gt;;
    }
    
    &lt;span style="color: blue;"&gt;set&lt;/span&gt;
    {
        &lt;span style="color: green;"&gt;// Ensure we don't alter the color by accident.&lt;/span&gt;
        &lt;span style="color: firebrick;"&gt;UnderlineColor&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;color&lt;/span&gt; = &lt;span style="color: red;"&gt;SelectionUnderlineColor&lt;/span&gt;;
        
        &lt;span style="color: green;"&gt;// Ensure we don't show it if it shouldn't be shown.&lt;/span&gt;
        &lt;span style="color: blue;"&gt;if&lt;/span&gt; ( &lt;span style="color: #6c6c6c;"&gt;value&lt;/span&gt; == &lt;span style="color: firebrick;"&gt;UnderlineStyle&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;None&lt;/span&gt; )
            &lt;span style="color: #6c6c6c;"&gt;color&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;UnderlineColor&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;Black&lt;/span&gt;;
        
        &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt;();
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;Marshal&lt;/span&gt;.&lt;span style="color: red;"&gt;SizeOf&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt; = &lt;span style="color: #6c6c6c;"&gt;CFM_UNDERLINETYPE&lt;/span&gt;;
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;bUnderlineType&lt;/span&gt; = ( &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; )( ( &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; )&lt;span style="color: #6c6c6c;"&gt;value&lt;/span&gt; | ( &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; )&lt;span style="color: #6c6c6c;"&gt;color&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Set the underline type.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ), &lt;span style="color: #6c6c6c;"&gt;EM_SETCHARFORMAT&lt;/span&gt;,
                     &lt;span style="color: #6c6c6c;"&gt;SCF_SELECTION&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
    }
}
&lt;/pre&gt;&lt;/code&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;!-- CODE ENDS HERE --&gt;

&lt;p&gt;Once again, this has not been fully tested so you use it at your own risk. Let me know if there are any problems, etc. The &lt;code&gt;UnderlineStyle&lt;/code&gt; enumeration is also fairly straightforward:&lt;/p&gt;

&lt;!-- CODE BEGINS HERE --&gt;

&lt;p&gt;&lt;div style="padding: 0.8em 0.5em; margin: 0em 2em; background-color: #ebebeb; border: 1px dashed black;"&gt;
&lt;span style="padding: 0.2em 0.5em; font-weight: bold; color: navy; background-color: silver; border: 1px solid black; cursor: pointer" onclick="var div=document.getElementById('pvidlerCodePost2Div3');
if(div.style.display=='none')
{
    div.style.display='block';
    this.innerHTML='&amp;minus;';
}
else
{
    div.style.display='none';
    this.innerHTML='+';
}"&gt;+&lt;/span&gt;  &lt;code&gt;UnderlineStyle&lt;/code&gt; enumeration.
&lt;/div&gt;

&lt;div id="pvidlerCodePost2Div3" style="display:none"&gt;
&lt;code&gt;&lt;pre style="padding: 0.5em; margin: 0em 2em; background-color: #ebebeb; border-bottom: 1px dashed black; border-left: 1px dashed black; border-right: 1px dashed black;"&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Specifies the style of underline that should be&lt;/span&gt;
&lt;span style="color: green;"&gt;/// applied to the text.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;public enum&lt;/span&gt; &lt;span style="color: firebrick;"&gt;UnderlineStyle&lt;/span&gt;
{
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// No underlining.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;None&lt;/span&gt; = 0,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Standard underlining across all words.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Normal&lt;/span&gt; = 1,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Standard underlining broken between words.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Word&lt;/span&gt; = 2,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Double line underlining.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Double&lt;/span&gt; = 3,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Dotted underlining.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Dotted&lt;/span&gt; = 4,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Dashed underlining.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Dash&lt;/span&gt; = 5,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Dash-dot ("-.-.") underlining.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;DashDot&lt;/span&gt; = 6,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Dash-dot-dot ("-..-..") underlining.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;DashDotDot&lt;/span&gt; = 7,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Wave underlining (like spelling mistakes in MS Word).&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Wave&lt;/span&gt; = 8,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Extra thick standard underlining.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Thick&lt;/span&gt; = 9,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Extra thin standard underlining.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;HairLine&lt;/span&gt; = 10,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Double thickness wave underlining.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;DoubleWave&lt;/span&gt; = 11,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Thick wave underlining.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;HeavyWave&lt;/span&gt; = 12,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Extra long dash underlining.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;LongDash&lt;/span&gt; = 13
}
&lt;/pre&gt;&lt;/code&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;!-- CODE ENDS HERE --&gt;

&lt;p&gt;Note that some of these styles may not display correctly. This is a common problem with the richedit control, often you will apply some formatting only to find that it will not display at all. The formatting is usually stored though, so cutting and pasting into Word will show the text correctly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Underline Colour&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We can also change the underline colour. Notice how the set method of underline colour retrieves the underline style in order to maintain consistency.&lt;/p&gt;

&lt;!-- CODE BEGINS HERE --&gt;

&lt;p&gt;&lt;div style="padding: 0.8em 0.5em; margin: 0em 2em; background-color: #ebebeb; border: 1px dashed black;"&gt;
&lt;span style="padding: 0.2em 0.5em; font-weight: bold; color: navy; background-color: silver; border: 1px solid black; cursor: pointer" onclick="var div=document.getElementById('pvidlerCodePost2Div4');
if(div.style.display=='none')
{
    div.style.display='block';
    this.innerHTML='&amp;minus;';
}
else
{
    div.style.display='none';
    this.innerHTML='+';
}"&gt;+&lt;/span&gt;  Code to set the underline colour.
&lt;/div&gt;

&lt;div id="pvidlerCodePost2Div4" style="display:none"&gt;
&lt;code&gt;&lt;pre style="padding: 0.5em; margin: 0em 2em; background-color: #ebebeb; border-bottom: 1px dashed black; border-left: 1px dashed black; border-right: 1px dashed black;"&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Gets or sets the underline color to apply to the&lt;/span&gt;
&lt;span style="color: green;"&gt;/// current selection or insertion point.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Underline colors can be set to any value of the&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;see cref="UnderlineColor"/&amp;gt;&lt;/span&gt; &lt;span style="color: green;"&gt;enumeration.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;UnderlineColor&lt;/span&gt; &lt;span style="color: red;"&gt;SelectionUnderlineColor&lt;/span&gt;
{
    &lt;span style="color: blue;"&gt;get&lt;/span&gt;
    {
        &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt;();
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;Marshal&lt;/span&gt;.&lt;span style="color: red;"&gt;SizeOf&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Get the underline color.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ), &lt;span style="color: #6c6c6c;"&gt;EM_GETCHARFORMAT&lt;/span&gt;,
                     &lt;span style="color: #6c6c6c;"&gt;SCF_SELECTION&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Default to black.&lt;/span&gt;
        &lt;span style="color: blue;"&gt;if&lt;/span&gt; ( ( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt; &amp;amp; &lt;span style="color: #6c6c6c;"&gt;CFM_UNDERLINETYPE&lt;/span&gt; ) == 0 )
            &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: firebrick;"&gt;UnderlineColor&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;Black&lt;/span&gt;;
        
        &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;style&lt;/span&gt; = ( &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; )( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;bUnderlineType&lt;/span&gt; &amp;amp; 0xF0 );
        
        &lt;span style="color: blue;"&gt;return&lt;/span&gt; ( &lt;span style="color: firebrick;"&gt;UnderlineColor&lt;/span&gt; )&lt;span style="color: #6c6c6c;"&gt;style&lt;/span&gt;;
    }
    
    &lt;span style="color: blue;"&gt;set&lt;/span&gt;
    {
        &lt;span style="color: green;"&gt;// Ensure we don't alter the style.&lt;/span&gt;
        &lt;span style="color: firebrick;"&gt;UnderlineStyle&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;style&lt;/span&gt; = &lt;span style="color: red;"&gt;SelectionUnderlineStyle&lt;/span&gt;;
        
        &lt;span style="color: green;"&gt;// Ensure we don't show it if it shouldn't be shown.&lt;/span&gt;
        &lt;span style="color: blue;"&gt;if&lt;/span&gt; ( &lt;span style="color: #6c6c6c;"&gt;style&lt;/span&gt; == &lt;span style="color: firebrick;"&gt;UnderlineStyle&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;None&lt;/span&gt; )
            &lt;span style="color: #6c6c6c;"&gt;value&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;UnderlineColor&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;Black&lt;/span&gt;;
        
        &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;CHARFORMAT&lt;/span&gt;();
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;Marshal&lt;/span&gt;.&lt;span style="color: red;"&gt;SizeOf&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt; = &lt;span style="color: #6c6c6c;"&gt;CFM_UNDERLINETYPE&lt;/span&gt;;
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;bUnderlineType&lt;/span&gt; = ( &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; )( ( &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; )&lt;span style="color: #6c6c6c;"&gt;style&lt;/span&gt; | ( &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; )&lt;span style="color: #6c6c6c;"&gt;value&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Set the underline color.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ), &lt;span style="color: #6c6c6c;"&gt;EM_SETCHARFORMAT&lt;/span&gt;,
                     &lt;span style="color: #6c6c6c;"&gt;SCF_SELECTION&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
    }
}
&lt;/pre&gt;&lt;/code&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;!-- CODE ENDS HERE --&gt;

&lt;p&gt;Unfortunately there are not many colours available to this property. They are defined by the &lt;code&gt;UnderlineColor&lt;/code&gt; enumeration:&lt;/p&gt;

&lt;!-- CODE BEGINS HERE --&gt;

&lt;p&gt;&lt;div style="padding: 0.8em 0.5em; margin: 0em 2em; background-color: #ebebeb; border: 1px dashed black;"&gt;
&lt;span style="padding: 0.2em 0.5em; font-weight: bold; color: navy; background-color: silver; border: 1px solid black; cursor: pointer" onclick="var div=document.getElementById('pvidlerCodePost2Div5');
if(div.style.display=='none')
{
    div.style.display='block';
    this.innerHTML='&amp;minus;';
}
else
{
    div.style.display='none';
    this.innerHTML='+';
}"&gt;+&lt;/span&gt;  &lt;code&gt;UnderlineColor&lt;/code&gt; enumeration.
&lt;/div&gt;

&lt;div id="pvidlerCodePost2Div5" style="display:none"&gt;
&lt;code&gt;&lt;pre style="padding: 0.5em; margin: 0em 2em; background-color: #ebebeb; border-bottom: 1px dashed black; border-left: 1px dashed black; border-right: 1px dashed black;"&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Specifies the color of underline that should be&lt;/span&gt;
&lt;span style="color: green;"&gt;/// applied to the text.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// I named these colors by their appearance, so some&lt;/span&gt;
&lt;span style="color: green;"&gt;/// of them might not be what you expect. Please email&lt;/span&gt;
&lt;span style="color: green;"&gt;/// me if you feel one should be changed.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;public enum&lt;/span&gt; &lt;span style="color: firebrick;"&gt;UnderlineColor&lt;/span&gt;
{
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Black.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Black&lt;/span&gt; = 0x00,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Blue.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Blue&lt;/span&gt; = 0x10,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Cyan.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Cyan&lt;/span&gt; = 0x20,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Lime green.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;LimeGreen&lt;/span&gt; = 0x30,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Magenta.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Magenta&lt;/span&gt; = 0x40,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Red.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Red&lt;/span&gt; = 0x50,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Yellow.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Yellow&lt;/span&gt; = 0x60,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;White.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;White&lt;/span&gt; = 0x70,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;DarkBlue.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;DarkBlue&lt;/span&gt; = 0x80,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;DarkCyan.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;DarkCyan&lt;/span&gt; = 0x90,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Green.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Green&lt;/span&gt; = 0xA0,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Dark magenta.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;DarkMagenta&lt;/span&gt; = 0xB0,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Brown.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Brown&lt;/span&gt; = 0xC0,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Olive green.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;OliveGreen&lt;/span&gt; = 0xD0,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Dark gray.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;DarkGray&lt;/span&gt; = 0xE0,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Gray.&lt;/span&gt;&lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Gray&lt;/span&gt; = 0xF0
}
&lt;/pre&gt;&lt;/code&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;!-- CODE ENDS HERE --&gt;

&lt;p&gt;If you set the underline colour to anything other than black it will not serialise correctly. I don't know if this is by design or not. Any text with a non-black underline that is cut and pasted into Word (or any other application) will lose it's underlining all together. I don't know if the underline is still stored in the actual rich text or not when this happens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Well that's it for part two. In my next post in this series I will cover setting the background colour.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=188"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=188" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/pvidler/aggbug/188.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pete Vidler</dc:creator>
            <guid>http://geekswithblogs.net/pvidler/archive/2003/10/15/188.aspx</guid>
            <pubDate>Wed, 15 Oct 2003 14:19:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/pvidler/comments/188.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/pvidler/archive/2003/10/15/188.aspx#feedback</comments>
            <slash:comments>19</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/pvidler/comments/commentRss/188.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/pvidler/services/trackbacks/188.aspx</trackback:ping>
        </item>
        <item>
            <title>Extending RichTextBox</title>
            <link>http://geekswithblogs.net/pvidler/archive/2003/10/14/182.aspx</link>
            <description>&lt;p&gt;For a while now I've been toying with the idea of writing a C# editor (almost an IDE, but with only the features that I need). Clearly the hardest part of this task would be getting some form of edit control working.. the obvious choice for which is the &lt;code&gt;RichTextBox&lt;/code&gt;. Anyone who has tried using &lt;code&gt;RichTextBox&lt;/code&gt; in this situation will know that it has a number of flaws, the most serious being that it's rather slow when trying to colourise the text.&lt;/p&gt;

&lt;p&gt;I've long since given up on using &lt;code&gt;RichTextBox&lt;/code&gt; for a code editor, but while I was investigating its use I came across a number of ways to improve it's functionality. I'll present these here in a series of posts on the subject.. first up is how to speed up the control's updating, as well as adding one little extra formatting option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Faster Updating&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are articles on this subject on the internet. The standard method seems to be to send a &lt;code&gt;WM_SETREDRAW&lt;/code&gt; message to prevent the control from being redrawn while updating. I had this implemented and running nicely when I came across &lt;a href="http://home.att.net/~robertdunn/Papers/FasterSyntaxHighlighting.doc"&gt;another article&lt;/a&gt; showing that an extra speed increase can be gained by sending &lt;code&gt;EM_SETEVENTMASK&lt;/code&gt; to prevent the control from handling events. Here's the code:&lt;/p&gt;

&lt;!-- CODE BEGINS HERE --&gt;

&lt;p&gt;&lt;div style="padding: 0.8em 0.5em; margin: 0em 2em; background-color: #ebebeb; border: 1px dashed black;"&gt;
&lt;span style="padding: 0.2em 0.5em; font-weight: bold; color: navy; background-color: silver; border: 1px solid black; cursor: pointer" onclick="var div=document.getElementById('pvidlerCodePost1Div1');
if(div.style.display=='none')
{
    div.style.display='block';
    this.innerHTML='&amp;minus;';
}
else
{
    div.style.display='none';
    this.innerHTML='+';
}"&gt;+&lt;/span&gt;  Code to help speed up &lt;code&gt;RichTextBox&lt;/code&gt; updating.
&lt;/div&gt;

&lt;div id="pvidlerCodePost1Div1" style="display:none"&gt;
&lt;code&gt;&lt;pre style="padding: 0.5em; margin: 0em 2em; background-color: #ebebeb; border-bottom: 1px dashed black; border-left: 1px dashed black; border-right: 1px dashed black;"&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Maintains performance while updating.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// It is recommended to call this method before doing&lt;/span&gt;
&lt;span style="color: green;"&gt;/// any major updates that you do not wish the user to&lt;/span&gt;
&lt;span style="color: green;"&gt;/// see. Remember to call EndUpdate when you are finished&lt;/span&gt;
&lt;span style="color: green;"&gt;/// with the update. Nested calls are supported.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/para&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Calling this method will prevent redrawing. It will&lt;/span&gt;
&lt;span style="color: green;"&gt;/// also setup the event mask of the underlying richedit&lt;/span&gt;
&lt;span style="color: green;"&gt;/// control so that no events are sent.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/para&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;void&lt;/span&gt; &lt;span style="color: red;"&gt;BeginUpdate&lt;/span&gt;()
{
    &lt;span style="color: green;"&gt;// Deal with nested calls.&lt;/span&gt;
    ++&lt;span style="color: #6c6c6c;"&gt;updating&lt;/span&gt;;
    
    &lt;span style="color: blue;"&gt;if&lt;/span&gt; ( &lt;span style="color: #6c6c6c;"&gt;updating&lt;/span&gt; &amp;gt; 1 )
        &lt;span style="color: blue;"&gt;return&lt;/span&gt;;
    
    &lt;span style="color: green;"&gt;// Prevent the control from raising any events.&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;oldEventMask&lt;/span&gt; = &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                                &lt;span style="color: #6c6c6c;"&gt;EM_SETEVENTMASK&lt;/span&gt;, 0, 0 );
    
    &lt;span style="color: green;"&gt;// Prevent the control from redrawing itself.&lt;/span&gt;
    &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                 &lt;span style="color: #6c6c6c;"&gt;WM_SETREDRAW&lt;/span&gt;, 0, 0 );
}

&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Resumes drawing and event handling.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// This method should be called every time a call is made&lt;/span&gt;
&lt;span style="color: green;"&gt;/// made to BeginUpdate. It resets the event mask to it's&lt;/span&gt;
&lt;span style="color: green;"&gt;/// original value and enables redrawing of the control.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;void&lt;/span&gt; &lt;span style="color: red;"&gt;EndUpdate&lt;/span&gt;()
{
    &lt;span style="color: green;"&gt;// Deal with nested calls.&lt;/span&gt;
    --&lt;span style="color: #6c6c6c;"&gt;updating&lt;/span&gt;;
    
    &lt;span style="color: blue;"&gt;if&lt;/span&gt; ( &lt;span style="color: #6c6c6c;"&gt;updating&lt;/span&gt; &amp;gt; 0 )
        &lt;span style="color: blue;"&gt;return&lt;/span&gt;;
    
    &lt;span style="color: green;"&gt;// Allow the control to redraw itself.&lt;/span&gt;
    &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                 &lt;span style="color: #6c6c6c;"&gt;WM_SETREDRAW&lt;/span&gt;, 1, 0 );
    
    &lt;span style="color: green;"&gt;// Allow the control to raise event messages.&lt;/span&gt;
    &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                 &lt;span style="color: #6c6c6c;"&gt;EM_SETEVENTMASK&lt;/span&gt;, 0, &lt;span style="color: #6c6c6c;"&gt;oldEventMask&lt;/span&gt; );
}
&lt;/pre&gt;&lt;/code&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;!-- CODE ENDS HERE --&gt;

&lt;p&gt;Although I'm using &lt;code&gt;HandleRef&lt;/code&gt; here, I have absolutely no idea if this is the correct usage (or even if it's needed). Full code will be at the end of this posting. I have not fully tested these methods so I have no idea what the performance gains might be (if there are any). If anyone wants to try benchmarking, please let me know the results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Justification&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It always bothered me that the &lt;code&gt;SelectionAlignment&lt;/code&gt; property of &lt;code&gt;RichTextBox&lt;/code&gt; does not allow fully justified text. Especially since I know it's possible with the richedit control that &lt;code&gt;RichTextBox&lt;/code&gt; wraps. Here's some code that will replace &lt;code&gt;SelectionAlignment&lt;/code&gt; with something a little nicer for those that are writing word processors in C#:&lt;/p&gt;

&lt;!-- CODE BEGINS HERE --&gt;

&lt;p&gt;&lt;div style="padding: 0.8em 0.5em; margin: 0em 2em; background-color: #ebebeb; border: 1px dashed black;"&gt;
&lt;span style="padding: 0.2em 0.5em; font-weight: bold; color: navy; background-color: silver; border: 1px solid black; cursor: pointer" onclick="var div=document.getElementById('pvidlerCodePost1Div2');
if(div.style.display=='none')
{
    div.style.display='block';
    this.innerHTML='&amp;minus;';
}
else
{
    div.style.display='none';
    this.innerHTML='+';
}"&gt;+&lt;/span&gt;  Code to allow justified text in the &lt;code&gt;RichTextBox&lt;/code&gt;.
&lt;/div&gt;

&lt;div id="pvidlerCodePost1Div2" style="display:none"&gt;
&lt;code&gt;&lt;pre style="padding: 0.5em; margin: 0em 2em; background-color: #ebebeb; border-bottom: 1px dashed black; border-left: 1px dashed black; border-right: 1px dashed black;"&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Gets or sets the alignment to apply to the current&lt;/span&gt;
&lt;span style="color: green;"&gt;/// selection or insertion point.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Replaces the SelectionAlignment from&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;see cref="RichTextBox"/&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;public new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;TextAlign&lt;/span&gt; &lt;span style="color: red;"&gt;SelectionAlignment&lt;/span&gt;
{
    &lt;span style="color: blue;"&gt;get&lt;/span&gt;
    {
        &lt;span style="color: firebrick;"&gt;PARAFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;PARAFORMAT&lt;/span&gt;();
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;Marshal&lt;/span&gt;.&lt;span style="color: red;"&gt;SizeOf&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Get the alignment.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                     &lt;span style="color: #6c6c6c;"&gt;EM_GETPARAFORMAT&lt;/span&gt;,
                     &lt;span style="color: #6c6c6c;"&gt;SCF_SELECTION&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Default to Left align.&lt;/span&gt;
        &lt;span style="color: blue;"&gt;if&lt;/span&gt; ( ( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt; &amp;amp; &lt;span style="color: #6c6c6c;"&gt;PFM_ALIGNMENT&lt;/span&gt; ) == 0 )
            &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: firebrick;"&gt;TextAlign&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;Left&lt;/span&gt;;
        
        &lt;span style="color: blue;"&gt;return&lt;/span&gt; ( &lt;span style="color: firebrick;"&gt;TextAlign&lt;/span&gt; )&lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;wAlignment&lt;/span&gt;;
    }
    
    &lt;span style="color: blue;"&gt;set&lt;/span&gt;
    {
        &lt;span style="color: firebrick;"&gt;PARAFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;PARAFORMAT&lt;/span&gt;();
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;Marshal&lt;/span&gt;.&lt;span style="color: red;"&gt;SizeOf&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt; = &lt;span style="color: #6c6c6c;"&gt;PFM_ALIGNMENT&lt;/span&gt;;
        &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;wAlignment&lt;/span&gt; = ( &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; )&lt;span style="color: #6c6c6c;"&gt;value&lt;/span&gt;;
        
        &lt;span style="color: green;"&gt;// Set the alignment.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                     &lt;span style="color: #6c6c6c;"&gt;EM_SETPARAFORMAT&lt;/span&gt;,
                     &lt;span style="color: #6c6c6c;"&gt;SCF_SELECTION&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
    }
}
&lt;/pre&gt;&lt;/code&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;!-- CODE ENDS HERE --&gt;

&lt;p&gt;The &lt;code&gt;TextAlign&lt;/code&gt; enumeration contains &lt;code&gt;Left&lt;/code&gt;, &lt;code&gt;Right&lt;/code&gt;, &lt;code&gt;Center&lt;/code&gt; and &lt;code&gt;Justify&lt;/code&gt;. Again, this is mostly untested -- it &lt;em&gt;should&lt;/em&gt; work on any machine with the richedit 2.0 common control (I believe), but I offer no guarantees.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's the full code for the &lt;code&gt;AdvRichTextBox&lt;/code&gt; control (plus the &lt;code&gt;TextAlign&lt;/code&gt; enumeration):&lt;/p&gt;

&lt;!-- CODE BEGINS HERE --&gt;

&lt;p&gt;&lt;div style="padding: 0.8em 0.5em; margin: 0em 2em; background-color: #ebebeb; border: 1px dashed black;"&gt;
&lt;span style="padding: 0.2em 0.5em; font-weight: bold; color: navy; background-color: silver; border: 1px solid black; cursor: pointer" onclick="var div=document.getElementById('pvidlerCodePost1Div3');
if(div.style.display=='none')
{
    div.style.display='block';
    this.innerHTML='&amp;minus;';
}
else
{
    div.style.display='none';
    this.innerHTML='+';
}"&gt;+&lt;/span&gt;  Full &lt;code&gt;AdvRichTextBox&lt;/code&gt; code.
&lt;/div&gt;

&lt;div id="pvidlerCodePost1Div3" style="display:none"&gt;
&lt;code&gt;&lt;pre style="padding: 0.5em; margin: 0em 2em; background-color: #ebebeb; border-bottom: 1px dashed black; border-left: 1px dashed black; border-right: 1px dashed black;"&gt;
&lt;span style="color: blue;"&gt;using&lt;/span&gt; &lt;span style="color: firebrick;"&gt;System&lt;/span&gt;;
&lt;span style="color: blue;"&gt;using&lt;/span&gt; &lt;span style="color: firebrick;"&gt;System&lt;/span&gt;.&lt;span style="color: firebrick;"&gt;Windows&lt;/span&gt;.&lt;span style="color: firebrick;"&gt;Forms&lt;/span&gt;;
&lt;span style="color: blue;"&gt;using&lt;/span&gt; &lt;span style="color: firebrick;"&gt;System&lt;/span&gt;.&lt;span style="color: firebrick;"&gt;Runtime&lt;/span&gt;.&lt;span style="color: firebrick;"&gt;InteropServices&lt;/span&gt;;

&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Represents a standard&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;see cref="RichTextBox"/&amp;gt;&lt;/span&gt; &lt;span style="color: green;"&gt;with some&lt;/span&gt;
&lt;span style="color: green;"&gt;/// minor added functionality.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// AdvRichTextBox provides methods to maintain performance&lt;/span&gt;
&lt;span style="color: green;"&gt;/// while it is being updated. Additional formatting features&lt;/span&gt;
&lt;span style="color: green;"&gt;/// have also been added.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;public class&lt;/span&gt; &lt;span style="color: firebrick;"&gt;AdvRichTextBox&lt;/span&gt; : &lt;span style="color: firebrick;"&gt;RichTextBox&lt;/span&gt;
{
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Maintains performance while updating.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// It is recommended to call this method before doing&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// any major updates that you do not wish the user to&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// see. Remember to call EndUpdate when you are finished&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// with the update. Nested calls are supported.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/para&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;para&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Calling this method will prevent redrawing. It will&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// also setup the event mask of the underlying richedit&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// control so that no events are sent.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/para&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;void&lt;/span&gt; &lt;span style="color: red;"&gt;BeginUpdate&lt;/span&gt;()
    {
        &lt;span style="color: green;"&gt;// Deal with nested calls.&lt;/span&gt;
        ++&lt;span style="color: #6c6c6c;"&gt;updating&lt;/span&gt;;
        
        &lt;span style="color: blue;"&gt;if&lt;/span&gt; ( &lt;span style="color: #6c6c6c;"&gt;updating&lt;/span&gt; &amp;gt; 1 )
            &lt;span style="color: blue;"&gt;return&lt;/span&gt;;
        
        &lt;span style="color: green;"&gt;// Prevent the control from raising any events.&lt;/span&gt;
        &lt;span style="color: #6c6c6c;"&gt;oldEventMask&lt;/span&gt; = &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                                    &lt;span style="color: #6c6c6c;"&gt;EM_SETEVENTMASK&lt;/span&gt;, 0, 0 );
        
        &lt;span style="color: green;"&gt;// Prevent the control from redrawing itself.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                     &lt;span style="color: #6c6c6c;"&gt;WM_SETREDRAW&lt;/span&gt;, 0, 0 );
    }
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Resumes drawing and event handling.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// This method should be called every time a call is made&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// made to BeginUpdate. It resets the event mask to it's&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// original value and enables redrawing of the control.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;void&lt;/span&gt; &lt;span style="color: red;"&gt;EndUpdate&lt;/span&gt;()
    {
        &lt;span style="color: green;"&gt;// Deal with nested calls.&lt;/span&gt;
        --&lt;span style="color: #6c6c6c;"&gt;updating&lt;/span&gt;;
        
        &lt;span style="color: blue;"&gt;if&lt;/span&gt; ( &lt;span style="color: #6c6c6c;"&gt;updating&lt;/span&gt; &amp;gt; 0 )
            &lt;span style="color: blue;"&gt;return&lt;/span&gt;;
        
        &lt;span style="color: green;"&gt;// Allow the control to redraw itself.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                     &lt;span style="color: #6c6c6c;"&gt;WM_SETREDRAW&lt;/span&gt;, 1, 0 );
        
        &lt;span style="color: green;"&gt;// Allow the control to raise event messages.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                     &lt;span style="color: #6c6c6c;"&gt;EM_SETEVENTMASK&lt;/span&gt;, 0, &lt;span style="color: #6c6c6c;"&gt;oldEventMask&lt;/span&gt; );
    }
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Gets or sets the alignment to apply to the current&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// selection or insertion point.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// Replaces the SelectionAlignment from&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;see cref="RichTextBox"/&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;public new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;TextAlign&lt;/span&gt; &lt;span style="color: red;"&gt;SelectionAlignment&lt;/span&gt;
    {
        &lt;span style="color: blue;"&gt;get&lt;/span&gt;
        {
            &lt;span style="color: firebrick;"&gt;PARAFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;PARAFORMAT&lt;/span&gt;();
            &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;Marshal&lt;/span&gt;.&lt;span style="color: red;"&gt;SizeOf&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
            
            &lt;span style="color: green;"&gt;// Get the alignment.&lt;/span&gt;
            &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                         &lt;span style="color: #6c6c6c;"&gt;EM_GETPARAFORMAT&lt;/span&gt;,
                         &lt;span style="color: #6c6c6c;"&gt;SCF_SELECTION&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
            
            &lt;span style="color: green;"&gt;// Default to Left align.&lt;/span&gt;
            &lt;span style="color: blue;"&gt;if&lt;/span&gt; ( ( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt; &amp;amp; &lt;span style="color: #6c6c6c;"&gt;PFM_ALIGNMENT&lt;/span&gt; ) == 0 )
                &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: firebrick;"&gt;TextAlign&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;Left&lt;/span&gt;;
            
            &lt;span style="color: blue;"&gt;return&lt;/span&gt; ( &lt;span style="color: firebrick;"&gt;TextAlign&lt;/span&gt; )&lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;wAlignment&lt;/span&gt;;
        }
        
        &lt;span style="color: blue;"&gt;set&lt;/span&gt;
        {
            &lt;span style="color: firebrick;"&gt;PARAFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;PARAFORMAT&lt;/span&gt;();
            &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt; = &lt;span style="color: firebrick;"&gt;Marshal&lt;/span&gt;.&lt;span style="color: red;"&gt;SizeOf&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
            &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt; = &lt;span style="color: #6c6c6c;"&gt;PFM_ALIGNMENT&lt;/span&gt;;
            &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt;.&lt;span style="color: #6c6c6c;"&gt;wAlignment&lt;/span&gt; = ( &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; )&lt;span style="color: #6c6c6c;"&gt;value&lt;/span&gt;;
            
            &lt;span style="color: green;"&gt;// Set the alignment.&lt;/span&gt;
            &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                         &lt;span style="color: #6c6c6c;"&gt;EM_SETPARAFORMAT&lt;/span&gt;,
                         &lt;span style="color: #6c6c6c;"&gt;SCF_SELECTION&lt;/span&gt;, &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;fmt&lt;/span&gt; );
        }
    }
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// This member overrides&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;see cref="Control"/&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;.OnHandleCreated.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: blue;"&gt;protected override&lt;/span&gt; &lt;span style="color: firebrick;"&gt;void&lt;/span&gt; &lt;span style="color: red;"&gt;OnHandleCreated&lt;/span&gt;( &lt;span style="color: firebrick;"&gt;EventArgs&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;e&lt;/span&gt; )
    {
        &lt;span style="color: #6c6c6c;"&gt;base&lt;/span&gt;.&lt;span style="color: red;"&gt;OnHandleCreated&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;e&lt;/span&gt; );
        
        &lt;span style="color: green;"&gt;// Enable support for justification.&lt;/span&gt;
        &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt;( &lt;span style="color: #6c6c6c;"&gt;this&lt;/span&gt;, &lt;span style="color: red;"&gt;Handle&lt;/span&gt; ),
                     &lt;span style="color: #6c6c6c;"&gt;EM_SETTYPOGRAPHYOPTIONS&lt;/span&gt;,
                     &lt;span style="color: #6c6c6c;"&gt;TO_ADVANCEDTYPOGRAPHY&lt;/span&gt;,
                     &lt;span style="color: #6c6c6c;"&gt;TO_ADVANCEDTYPOGRAPHY&lt;/span&gt; );
    }
    
    &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;updating&lt;/span&gt; = 0;
    &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;oldEventMask&lt;/span&gt; = 0;
    
    &lt;span style="color: green;"&gt;// Constants from the Platform SDK.&lt;/span&gt;
    &lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;EM_SETEVENTMASK&lt;/span&gt; = 1073;
    &lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;EM_GETPARAFORMAT&lt;/span&gt; = 1085;
    &lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;EM_SETPARAFORMAT&lt;/span&gt; = 1095;
    &lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;EM_SETTYPOGRAPHYOPTIONS&lt;/span&gt; = 1226;
    &lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;WM_SETREDRAW&lt;/span&gt; = 11;
    &lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;TO_ADVANCEDTYPOGRAPHY&lt;/span&gt; = 1;
    &lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;PFM_ALIGNMENT&lt;/span&gt; = 8;
    &lt;span style="color: blue;"&gt;private const&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;SCF_SELECTION&lt;/span&gt; = 1;
    
    &lt;span style="color: green;"&gt;// It makes no difference if we use PARAFORMAT or&lt;/span&gt;
    &lt;span style="color: green;"&gt;// PARAFORMAT2 here, so I have opted for PARAFORMAT2.&lt;/span&gt;
    [StructLayout( LayoutKind.Sequential )]
    &lt;span style="color: blue;"&gt;private struct&lt;/span&gt; &lt;span style="color: firebrick;"&gt;PARAFORMAT&lt;/span&gt;
    {
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;cbSize&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;uint&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;dwMask&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wNumbering&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wReserved&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;dxStartIndent&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;dxRightIndent&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;dxOffset&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wAlignment&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;cTabCount&lt;/span&gt;;
        [MarshalAs( UnmanagedType.ByValArray, SizeConst = 32 )]
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt;[] &lt;span style="color: #6c6c6c;"&gt;rgxTabs&lt;/span&gt;;
        
        &lt;span style="color: green;"&gt;// PARAFORMAT2 from here onwards.&lt;/span&gt;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;dySpaceBefore&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;dySpaceAfter&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;dyLineSpacing&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;sStyle&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;bLineSpacingRule&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;byte&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;bOutlineLevel&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wShadingWeight&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wShadingStyle&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wNumberingStart&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wNumberingStyle&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wNumberingTab&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wBorderSpace&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wBorderWidth&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: firebrick;"&gt;short&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wBorders&lt;/span&gt;;
    }
    
    [DllImport( "user32", CharSet = CharSet.Auto )]
    &lt;span style="color: blue;"&gt;private static extern&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;hWnd&lt;/span&gt;,
                                           &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;msg&lt;/span&gt;,
                                           &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wParam&lt;/span&gt;,
                                           &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;lParam&lt;/span&gt; );
    
    [DllImport( "user32", CharSet = CharSet.Auto )]
    &lt;span style="color: blue;"&gt;private static extern&lt;/span&gt; &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: red;"&gt;SendMessage&lt;/span&gt;( &lt;span style="color: firebrick;"&gt;HandleRef&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;hWnd&lt;/span&gt;,
                                           &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;msg&lt;/span&gt;,
                                           &lt;span style="color: firebrick;"&gt;int&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;wParam&lt;/span&gt;,
                                           &lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: firebrick;"&gt;PARAFORMAT&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;lp&lt;/span&gt; );
}

&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span style="color: green;"&gt;/// Specifies how text in a&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;see cref="AdvRichTextBox"/&amp;gt;&lt;/span&gt; &lt;span style="color: green;"&gt;is&lt;/span&gt;
&lt;span style="color: green;"&gt;/// horizontally aligned.&lt;/span&gt;
&lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;public enum&lt;/span&gt; &lt;span style="color: firebrick;"&gt;TextAlign&lt;/span&gt;
{
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// The text is aligned to the left.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Left&lt;/span&gt; = 1,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// The text is aligned to the right.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Right&lt;/span&gt; = 2,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// The text is aligned in the center.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Center&lt;/span&gt; = 3,
    
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: green;"&gt;/// The text is justified.&lt;/span&gt;
    &lt;span style="color: green;"&gt;///&lt;/span&gt; &lt;span style="color: #6c6c6c;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color: #6c6c6c;"&gt;Justify&lt;/span&gt; = 4
}
&lt;/pre&gt;&lt;/code&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;!-- CODE ENDS HERE --&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'll add to this code in future posts and if anyone has any comments or suggestions (or even requests), feel free to ask them. Hope you found this useful.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=182"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=182" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/pvidler/aggbug/182.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pete Vidler</dc:creator>
            <guid>http://geekswithblogs.net/pvidler/archive/2003/10/14/182.aspx</guid>
            <pubDate>Tue, 14 Oct 2003 22:02:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/pvidler/comments/182.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/pvidler/archive/2003/10/14/182.aspx#feedback</comments>
            <slash:comments>64</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/pvidler/comments/commentRss/182.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/pvidler/services/trackbacks/182.aspx</trackback:ping>
        </item>
    </channel>
</rss>