<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Unified Diff &#187; .NET</title>
	<atom:link href="http://www.unifieddiff.com/category/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.unifieddiff.com</link>
	<description>I should do that! How hard could it be?!</description>
	<lastBuildDate>Sat, 30 Jan 2010 01:23:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Custom Draw ListView with Double Buffering</title>
		<link>http://www.unifieddiff.com/2008/05/30/custom-draw-listview-with-double-buffering/</link>
		<comments>http://www.unifieddiff.com/2008/05/30/custom-draw-listview-with-double-buffering/#comments</comments>
		<pubDate>Sat, 31 May 2008 04:33:19 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C++/CLI]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[Win32 & MFC]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Add new tag]]></category>

		<guid isPermaLink="false">http://www.robertjcarroll.com/?p=29</guid>
		<description><![CDATA[For one of my pet projects, I needed to add a graphic to certain ListView rows. I considered owner-drawing the control, but that seemed messy. What I really wanted was a way to draw on top of whatever Windows painted. I couldn&#8217;t find a nifty .NET way to do this, so remembering a technique from [...]]]></description>
			<content:encoded><![CDATA[<p>For one of my pet projects, I needed to add a graphic to certain ListView rows. I considered owner-drawing the control, but that seemed messy. What I really wanted was a way to draw on top of whatever Windows painted. I couldn&#8217;t find a nifty .NET way to do this, so remembering a technique from the MFC days, I decided to <a href="http://msdn.microsoft.com/en-us/library/bb761817(VS.85).aspx">custom draw</a> the ListView. This would let me inject my own drawing code and let Windows handle the rest. Perfect!</p>
<p>I had originally implemented the ListView using a control style to <a href="http://geekswithblogs.net/cpound/archive/2006/02/27/70834.aspx">eliminate the annoying flicker</a> every time the list was repainted. Once I started custom drawing the control, I saw odd artifacts in the ListView&#8217;s client area when I scrolled or moved the mouse. If I turned off double buffering, it worked fine.</p>
<span id="more-29"></span>
<p>I studied the custom draw process looking for my mistake, but I couldn&#8217;t find any. I even used the <a href="http://www.aisto.com/roeder/dotnet/">.NET Reflector</a> to look at Microsoft&#8217;s implementation. The message I&#8217;m filtering has a handle to the control&#8217;s back-buffer. So it seemed like I should just be able to draw directly into that. But no matter what I did, it produced the same artifacts.</p>
<p>After about three days of banging my head, I managed to make it work by drawing into my own buffer and then using <a href="http://msdn.microsoft.com/en-us/library/ms532278(VS.85).aspx">BitBlt()</a> to copy my image to the control&#8217;s buffer. I also had to set the double buffer style with a window message rather than using the built-in property, although admittedly, I&#8217;m not sure why.</p>
<p>I like visual aids, so here&#8217;s a code snippet from my project. I changed names and removed a bunch of unnecessary lines for easier reading.


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &quot;stdafx.h&quot;</span>
<span style="color: #339900;">#include &quot;MyListViewControl.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> MyListViewControl<span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> System<span style="color: #008080;">::</span><span style="color: #007788;">Drawing</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> System<span style="color: #008080;">::</span><span style="color: #007788;">Windows</span><span style="color: #008080;">::</span><span style="color: #007788;">Forms</span><span style="color: #008080;">;</span>
&nbsp;
MyListViewControl<span style="color: #008080;">::</span><span style="color: #007788;">MyListViewControl</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> MyListViewControl<span style="color: #008080;">::</span><span style="color: #007788;">CustomDraw</span><span style="color: #008000;">&#40;</span> Message<span style="color: #000040;">%</span> m <span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	System<span style="color: #008080;">::</span><span style="color: #007788;">Drawing</span><span style="color: #008080;">::</span><span style="color: #007788;">Rectangle</span><span style="color: #000040;">^</span> mprc<span style="color: #008080;">;</span>
	System<span style="color: #008080;">::</span><span style="color: #007788;">String</span><span style="color: #000040;">^</span> cchQueueIndex<span style="color: #008080;">;</span>
	ListViewItem<span style="color: #000040;">^</span> mpItem<span style="color: #008080;">;</span>
	LPNMCUSTOMDRAW lpnmcd<span style="color: #008080;">;</span>
	Graphics<span style="color: #000040;">^</span> mpgfx<span style="color: #008080;">;</span>
	HDC hmemdc<span style="color: #008080;">;</span>
	RECT sOrderRect<span style="color: #008080;">;</span>
	RECT sStopRect<span style="color: #008080;">;</span>
	Brush<span style="color: #000040;">^</span> mpbgbr<span style="color: #008080;">;</span>
	Brush<span style="color: #000040;">^</span> mpfgbr<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> nOrderLen<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> nOrderOffset<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> nRightEdge<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> nRectWidth<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> nItem<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">// Grab the custom draw info</span>
	lpnmcd <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>LPNMCUSTOMDRAW<span style="color: #008000;">&#41;</span> m.<span style="color: #007788;">LParam</span>.<span style="color: #007788;">ToPointer</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">// Figure out which drawing stage we're in</span>
	<span style="color: #0000ff;">switch</span><span style="color: #008000;">&#40;</span> lpnmcd<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>dwDrawStage <span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>	
&nbsp;
	<span style="color: #666666;">// Control Pre-paint</span>
	<span style="color: #0000ff;">case</span><span style="color: #008000;">&#40;</span> CDDS_PREPAINT <span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>
&nbsp;
		<span style="color: #666666;">// Request to be notified during item draw</span>
		__super<span style="color: #008080;">::</span><span style="color: #007788;">WndProc</span><span style="color: #008000;">&#40;</span> m <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		m.<span style="color: #007788;">Result</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>System<span style="color: #008080;">::</span><span style="color: #007788;">IntPtr</span><span style="color: #008000;">&#41;</span> CDRF_NOTIFYITEMDRAW<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
&nbsp;
&nbsp;
	<span style="color: #666666;">// List Item Pre-paint</span>
	<span style="color: #0000ff;">case</span><span style="color: #008000;">&#40;</span> CDDS_ITEMPREPAINT <span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>
&nbsp;
		<span style="color: #666666;">// Request to be notified after item draw</span>
		__super<span style="color: #008080;">::</span><span style="color: #007788;">WndProc</span><span style="color: #008000;">&#40;</span> m <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		m.<span style="color: #007788;">Result</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>System<span style="color: #008080;">::</span><span style="color: #007788;">IntPtr</span><span style="color: #008000;">&#41;</span> CDRF_NOTIFYPOSTPAINT<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
&nbsp;
&nbsp;
	<span style="color: #666666;">// List Item Post-paint</span>
	<span style="color: #0000ff;">case</span><span style="color: #008000;">&#40;</span> CDDS_ITEMPOSTPAINT <span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>
&nbsp;
		__super<span style="color: #008080;">::</span><span style="color: #007788;">WndProc</span><span style="color: #008000;">&#40;</span> m <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #666666;">// Get the current item</span>
		nItem <span style="color: #000080;">=</span> <span style="color: #0000ff;">static_cast</span><span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span><span style="color: #0000ff;">int</span><span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span><span style="color: #008000;">&#40;</span> lpnmcd<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>dwItemSpec <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		mpItem <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>ListViewItem<span style="color: #000040;">^</span><span style="color: #008000;">&#41;</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Items<span style="color: #008000;">&#91;</span>nItem<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>		
&nbsp;
		<span style="color: #666666;">// Get the device context and item bounds</span>
		mpgfx <span style="color: #000080;">=</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>CreateGraphics<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		mprc <span style="color: #000080;">=</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>GetItemRect<span style="color: #008000;">&#40;</span> nItem, ItemBoundsPortion<span style="color: #008080;">::</span><span style="color: #007788;">Label</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #666666;">// *** Your custom drawing code here ***</span>
&nbsp;
		<span style="color: #666666;">// Copy the bubble to the screen DC</span>
		hmemdc <span style="color: #000080;">=</span> <span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span>HDC<span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span><span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">static_cast</span><span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span><span style="color: #0000ff;">void</span><span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span><span style="color: #008000;">&#40;</span>mpgfx<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>GetHdc<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		BitBlt<span style="color: #008000;">&#40;</span> 
			lpnmcd<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>hdc, 
			sOrderRect.<span style="color: #007788;">left</span>, 
			mprc<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Y, 
			nRectWidth, 
			mprc<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Height, 
			hmemdc, 
			sOrderRect.<span style="color: #007788;">left</span>, 
			mprc<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Y, 
			SRCCOPY <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		mpgfx<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>ReleaseHdc<span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>System<span style="color: #008080;">::</span><span style="color: #007788;">IntPtr</span><span style="color: #008000;">&#41;</span> hmemdc <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #666666;">// Let Windows redraw the border</span>
		m.<span style="color: #007788;">Result</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>System<span style="color: #008080;">::</span><span style="color: #007788;">IntPtr</span><span style="color: #008000;">&#41;</span> CDRF_DODEFAULT<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> MyListViewControl<span style="color: #008080;">::</span><span style="color: #007788;">WndProc</span><span style="color: #008000;">&#40;</span> Message<span style="color: #000040;">%</span> m <span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	LPNMHDR lpnmhdr<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">switch</span><span style="color: #008000;">&#40;</span> m.<span style="color: #007788;">Msg</span> <span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
&nbsp;
	<span style="color: #666666;">// Reflected Notifications</span>
	<span style="color: #0000ff;">case</span><span style="color: #008000;">&#40;</span> OCM_NOTIFY <span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>
&nbsp;
		<span style="color: #666666;">// Get the notification</span>
		lpnmhdr <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>LPNMHDR<span style="color: #008000;">&#41;</span> m.<span style="color: #007788;">LParam</span>.<span style="color: #007788;">ToPointer</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> lpnmhdr <span style="color: #000080;">==</span> <span style="color: #0000ff;">NULL</span> <span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #666666;">// We want custom draw messages</span>
		<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> lpnmhdr<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>code <span style="color: #000080;">==</span> NM_CUSTOMDRAW  
			<span style="color: #000040;">&amp;&amp;</span> lpnmhdr<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>hwndFrom <span style="color: #000080;">==</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Handle.<span style="color: #007788;">ToPointer</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>CustomDraw<span style="color: #008000;">&#40;</span>m<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #008000;">&#125;</span>
&nbsp;
	__super<span style="color: #008080;">::</span><span style="color: #007788;">WndProc</span><span style="color: #008000;">&#40;</span> m <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>


</p>
<p>And here&#8217;s the header file with the double buffering message call:


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#pragma once</span>
&nbsp;
<span style="color: #0000ff;">namespace</span> MyListView
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span> ref <span style="color: #0000ff;">class</span> MyListView <span style="color: #008080;">:</span> 
		<span style="color: #0000ff;">public</span> System<span style="color: #008080;">::</span><span style="color: #007788;">Windows</span><span style="color: #008080;">::</span><span style="color: #007788;">Forms</span><span style="color: #008080;">::</span><span style="color: #007788;">ListView</span>
	<span style="color: #008000;">&#123;</span>
&nbsp;
	<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
		<span style="color: #0000ff;">bool</span> CustomDraw<span style="color: #008000;">&#40;</span> System<span style="color: #008080;">::</span><span style="color: #007788;">Windows</span><span style="color: #008080;">::</span><span style="color: #007788;">Forms</span><span style="color: #008080;">::</span><span style="color: #007788;">Message</span><span style="color: #000040;">%</span> m <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		<span style="color: #0000ff;">virtual</span> property <span style="color: #0000ff;">bool</span> DoubleBuffered
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">bool</span> get<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> override
			<span style="color: #008000;">&#123;</span>
				LRESULT lStyles <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">SendMessage</span><span style="color: #008000;">&#40;</span> 
					<span style="color: #008000;">&#40;</span>HWND<span style="color: #008000;">&#41;</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Handle.<span style="color: #007788;">ToPointer</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, 
					LVM_GETEXTENDEDLISTVIEWSTYLE, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>lStyles <span style="color: #000040;">&amp;</span> LVS_EX_DOUBLEBUFFER<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
&nbsp;
			<span style="color: #0000ff;">void</span> set<span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">bool</span> fValue <span style="color: #008000;">&#41;</span> override
			<span style="color: #008000;">&#123;</span>
				<span style="color: #666666;">// I tried using the DoubleBuffered property, but I</span>
				<span style="color: #666666;">// get artifacts. So, let's do this the MFC way...</span>
				<span style="color: #008080;">::</span><span style="color: #007788;">SendMessage</span><span style="color: #008000;">&#40;</span> 
					<span style="color: #008000;">&#40;</span>HWND<span style="color: #008000;">&#41;</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Handle.<span style="color: #007788;">ToPointer</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, 
					LVM_SETEXTENDEDLISTVIEWSTYLE, 
					LVS_EX_DOUBLEBUFFER, 
					LVS_EX_DOUBLEBUFFER <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">protected</span><span style="color: #008080;">:</span>
		<span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> WndProc<span style="color: #008000;">&#40;</span> System<span style="color: #008080;">::</span><span style="color: #007788;">Windows</span><span style="color: #008080;">::</span><span style="color: #007788;">Forms</span><span style="color: #008080;">::</span><span style="color: #007788;">Message</span><span style="color: #000040;">%</span> m <span style="color: #008000;">&#41;</span> override<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		MyListViewControl<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>


</p>
<p>I spend days searching online and couldn&#8217;t find anyone who talked about custom drawing a .NET ListView with double buffering. I hope somebody will find this useful.</p>]]></content:encoded>
			<wfw:commentRss>http://www.unifieddiff.com/2008/05/30/custom-draw-listview-with-double-buffering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft .NET Framework 3.0</title>
		<link>http://www.unifieddiff.com/2006/06/18/dotnet-three/</link>
		<comments>http://www.unifieddiff.com/2006/06/18/dotnet-three/#comments</comments>
		<pubDate>Mon, 19 Jun 2006 02:57:43 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.robertjcarroll.com/2006/06/18/dotnet-three/</guid>
		<description><![CDATA[Microsoft recently renamed WinFX to .NET Framework 3.0 in an attempt to clarify the platform&#8217;s purpose. A new website was created to provide helpful information as well as the beta download.]]></description>
			<content:encoded><![CDATA[<p>Microsoft recently renamed WinFX to .NET Framework 3.0 in an attempt to clarify the platform&#8217;s purpose. A <a href="http://www.netfx3.com/">new website</a> was created to provide helpful information as well as the beta download.</p>]]></content:encoded>
			<wfw:commentRss>http://www.unifieddiff.com/2006/06/18/dotnet-three/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET Rocks!</title>
		<link>http://www.unifieddiff.com/2006/03/23/dotnet-rocks/</link>
		<comments>http://www.unifieddiff.com/2006/03/23/dotnet-rocks/#comments</comments>
		<pubDate>Fri, 24 Mar 2006 03:30:53 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.robertjcarroll.com/2006/03/23/dotnet-rocks/</guid>
		<description><![CDATA[I recently had the impossible task of making one of my applications work on OS X. The school uses Microsoft SQL Server 2000 to house its huge volumes of data. The server is integrated with Active Directory to allow for trusted connections. This means that when a client connects to the server, they need only [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had the impossible task of making one of my applications work on OS X. The school uses Microsoft SQL Server 2000 to house its huge volumes of data. The server is integrated with Active Directory to allow for trusted connections. This means that when a client connects to the server, they need only to authenticate locally in the domain. This makes password and privilege maintenance much easier.</p>
<p>The bad part is that only Windows client operating systems are capable of supporting trusted connections (NT Authentication). This means that I can&#8217;t write a program to interface with the database server unless it&#8217;s running on Windows. So when I was asked to make my Windows creation work on a Mac, I was at a loss. Fortunately, I had been writing the suite of tools in VB.NET, so I started investigating the possibility of running a .NET app on OS X.</p>
<p>I found two contenders: <a href="http://www.mono-project.com/">Mono</a> and <a href="http://www.dotgnu.org/">DotGNU Portable .NET</a>. Both projects are free implementations of the .NET standard. Mono doesn&#8217;t seem to have the anti-Microsoft sentiment and was easier to install. Right out of the gate, Mono allowed me to run a .NET app on OS X. PNET complained about ncurses not being installed. While this is probably a simple fix, it was one step that Mono did not require.</p>
<p>The end result? I managed to clone my VB.NET app in C# and make it run smoothly on a Mac. High five for .NET!</p>]]></content:encoded>
			<wfw:commentRss>http://www.unifieddiff.com/2006/03/23/dotnet-rocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
