<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>MFC custom CListCtrl DrawItem to draw a BITMAP*</title>
		<link>http://www.allegro.cc/forums/view/585564</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 24 May 2006 02:11:49 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello all.</p><p>I&#39;m morking on a MSVC MFC Project that uses Allegro.<br />I have a custom CListCtrl control that inherits CListCtrl&#39;s properties.</p><p>I have a custom draw method to display it. So, this control has the flags &quot;owner draw fixed&quot; and &quot;owner data&quot;.<br />I also have overriden the virtual function <span class="source-code"><span class="k1">void</span> DrawItem<span class="k2">(</span>LPDRAWITEMSTRUCT lpdrawitemstruct<span class="k2">)</span></span> to be able to draw what I like.</p><p>Each column can be one of the following types :</p><div class="source-code snippet"><div class="inner"><pre>MODELDATATYPE_SZ           <span class="k2">:</span>  null terminated string
MODELDATATYPE_FIXED       <span class="k2">:</span>  real in <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> point
MODELDATATYPE_bool         <span class="k2">:</span>  <span class="k1">bool</span> <span class="k2">(</span>True <span class="k1">or</span> False<span class="k2">)</span>
MODELDATATYPE_TEXTURE      <span class="k2">:</span>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span>
MODELDATATYPE_TEXTUREDIMS  <span class="k2">:</span>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> w,h
</pre></div></div><p>

Displaying the text (any type except MODELDATATYPE_TEXTURE BITMAP*) is working fine.<br />But i must be doing something wrong when blitting with blit_to_hdc().</p><p>here is the code.</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">/*-------------------------------------------------------------------------*/</span></td></tr><tr><td class="number">2</td><td><span class="c">/*-------------------------- Draw an item in pDC --------------------------*/</span></td></tr><tr><td class="number">3</td><td><span class="c">/*-------------------------------------------------------------------------*/</span></td></tr><tr><td class="number">4</td><td><span class="k1">void</span> CModelListCtrl::DrawItem<span class="k2">(</span>LPDRAWITEMSTRUCT lpdrawitemstruct<span class="k2">)</span></td></tr><tr><td class="number">5</td><td><span class="k2">{</span>  </td></tr><tr><td class="number">6</td><td>  <span class="k1">int</span>  nItem<span class="k2">;</span> </td></tr><tr><td class="number">7</td><td>  CDC<span class="k3">*</span> pDC<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  <span class="k1">char</span> szBuf<span class="k2">[</span><span class="n">64</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>  nItem <span class="k3">=</span> lpdrawitemstruct-&gt;itemID<span class="k2">;</span>  </td></tr><tr><td class="number">12</td><td>  pDC <span class="k3">=</span> CDC::FromHandle<span class="k2">(</span>lpdrawitemstruct-&gt;hDC<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  m_HDC <span class="k3">=</span> <span class="k3">&amp;</span><span class="k2">(</span>lpdrawitemstruct-&gt;hDC<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span>nItem <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>  <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span>nItem <span class="k3">&lt;</span> m_pModel-&gt;m_nNbTextures<span class="k2">)</span><span class="k2">;</span>    </td></tr><tr><td class="number">17</td><td>  DrawSubItem<span class="k2">(</span>pDC, nItem, <span class="n">0</span>, MODELDATATYPE_TEXTURE, <span class="k3">&amp;</span>nItem<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  DrawSubItem<span class="k2">(</span>pDC, nItem, <span class="n">1</span>, MODELDATATYPE_TEXTUREDIMS, <span class="k3">&amp;</span>nItem<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  DrawSubItem<span class="k2">(</span>pDC, nItem, <span class="n">2</span>, MODELDATATYPE_SZ     , m_pModel-&gt;m_Texs<span class="k2">[</span>nItem<span class="k2">]</span>.szName<span class="k2">)</span><span class="k2">;</span>    </td></tr><tr><td class="number">20</td><td><span class="k2">}</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td><span class="c">/*-------------------------------------------------------------------------*/</span></td></tr><tr><td class="number">23</td><td><span class="c">/*------------------------------ Draw Sub Item ----------------------------*/</span></td></tr><tr><td class="number">24</td><td><span class="c">/*-------------------------------------------------------------------------*/</span></td></tr><tr><td class="number">25</td><td><span class="k1">void</span> CModelListCtrl::DrawSubItem<span class="k2">(</span>CDC <span class="k3">*</span>pDC, <span class="k1">int</span> nItem, <span class="k1">int</span> nSubItem, <span class="k1">int</span> nDatatype, <span class="k1">void</span><span class="k3">*</span> pt<span class="k2">)</span></td></tr><tr><td class="number">26</td><td><span class="k2">{</span></td></tr><tr><td class="number">27</td><td>  CRect <a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>  <span class="k1">char</span> szBuf<span class="k2">[</span><span class="n">16</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>  <span class="k1">int</span> nIndex<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>  CListCtrl::GetSubItemRect<span class="k2">(</span>nItem, nSubItem, LVIR_BOUNDS, <a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  </td></tr><tr><td class="number">33</td><td>  pDC-&gt;FillSolidRect<span class="k2">(</span><a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a>, m_nBackColor<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>  </td></tr><tr><td class="number">35</td><td>  </td></tr><tr><td class="number">36</td><td>  <span class="k1">if</span> <span class="k2">(</span>pt <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">37</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">38</td><td>    <span class="c">// pDC-&gt;SaveDC();    </span></td></tr><tr><td class="number">39</td><td>    pDC-&gt;SetBkMode<span class="k2">(</span>TRANSPARENT<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>    pDC-&gt;SetTextColor<span class="k2">(</span>m_nTextColor<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    rect.left<span class="k3">+</span><span class="k3">=</span><span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>&#160;</td></tr><tr><td class="number">43</td><td>    <span class="k1">switch</span> <span class="k2">(</span>nDatatype<span class="k2">)</span></td></tr><tr><td class="number">44</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">45</td><td>    <span class="k1">case</span> MODELDATATYPE_SZ:</td></tr><tr><td class="number">46</td><td>      pDC-&gt;DrawText<span class="k2">(</span><span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span>pt, <span class="k3">&amp;</span><a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a>, DT_LEFT <span class="k3">|</span> DT_SINGLELINE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>      <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>&#160;</td></tr><tr><td class="number">49</td><td>    <span class="k1">case</span> MODELDATATYPE_bool:</td></tr><tr><td class="number">50</td><td>      pDC-&gt;DrawText<span class="k2">(</span><span class="k2">(</span><span class="k3">*</span><span class="k2">(</span><span class="k1">bool</span><span class="k3">*</span><span class="k2">)</span>pt <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>?<span class="s">"False"</span><span class="k2">:</span><span class="s">"True"</span>, </td></tr><tr><td class="number">51</td><td>        <span class="k3">&amp;</span><a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a>, DT_LEFT <span class="k3">|</span> DT_SINGLELINE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>      <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">53</td><td>&#160;</td></tr><tr><td class="number">54</td><td>    <span class="k1">case</span> MODELDATATYPE_FIXED:</td></tr><tr><td class="number">55</td><td>      rect.right <span class="k3">-</span><span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>szBuf, <span class="s">"%2.3f"</span>, <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span><span class="k3">*</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k3">*</span><span class="k2">)</span>pt<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>      pDC-&gt;DrawText<span class="k2">(</span>szBuf, <span class="k3">&amp;</span><a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a>, DT_RIGHT <span class="k3">|</span> DT_SINGLELINE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>      <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>&#160;</td></tr><tr><td class="number">60</td><td>    <span class="k1">case</span> MODELDATATYPE_INT:</td></tr><tr><td class="number">61</td><td>      rect.right <span class="k3">-</span><span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>szBuf, <span class="s">"%d"</span>, <span class="k3">*</span><span class="k2">(</span><span class="k1">int</span><span class="k3">*</span><span class="k2">)</span>pt<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td>      pDC-&gt;DrawText<span class="k2">(</span>szBuf, <span class="k3">&amp;</span><a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a>, DT_RIGHT <span class="k3">|</span> DT_SINGLELINE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">64</td><td>      <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">65</td><td>      </td></tr><tr><td class="number">66</td><td>    <span class="k1">case</span> MODELDATATYPE_TEXTURE:      </td></tr><tr><td class="number">67</td><td>      nIndex <span class="k3">=</span> <span class="k3">*</span><span class="k2">(</span><span class="k1">int</span><span class="k3">*</span><span class="k2">)</span>pt<span class="k2">;</span></td></tr><tr><td class="number">68</td><td>      <span class="k1">if</span> <span class="k2">(</span>nIndex <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> nIndex <span class="k3">&lt;</span> m_pModel-&gt;m_nNbTextures<span class="k2">)</span></td></tr><tr><td class="number">69</td><td>      <span class="k2">{</span>        </td></tr><tr><td class="number">70</td><td>        <span class="c">/*</span></td></tr><tr><td class="number">71</td><td><span class="c">        pDC-&gt;BitBlt(rect.left, rect.top, </span></td></tr><tr><td class="number">72</td><td><span class="c">          MIN(rect.right, m_pModel-&gt;m_nTexPreviewDim), </span></td></tr><tr><td class="number">73</td><td><span class="c">          MIN(rect.bottom, m_pModel-&gt;m_nTexPreviewDim),</span></td></tr><tr><td class="number">74</td><td><span class="c">          CDC::FromHandle(win_get_dc(m_pModel-&gt;m_Texs[nIndex].bmpPreview)),</span></td></tr><tr><td class="number">75</td><td><span class="c">          0,0, SRCCOPY);</span></td></tr><tr><td class="number">76</td><td><span class="c">        */</span>        </td></tr><tr><td class="number">77</td><td>        </td></tr><tr><td class="number">78</td><td>        <span class="c">/*</span></td></tr><tr><td class="number">79</td><td><span class="c">        set_palette_to_hdc(pDC-&gt;m_hDC, NULL); // if I call this it crashes !!        </span></td></tr><tr><td class="number">80</td><td><span class="c">        */</span></td></tr><tr><td class="number">81</td><td>        <a href="http://www.allegro.cc/manual/blit_to_hdc" target="_blank"><span class="a">blit_to_hdc</span></a><span class="k2">(</span>m_pModel-&gt;m_Texs<span class="k2">[</span>nIndex<span class="k2">]</span>.bmpPreview,</td></tr><tr><td class="number">82</td><td>          pDC-&gt;m_hDC, </td></tr><tr><td class="number">83</td><td>          <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>,</td></tr><tr><td class="number">84</td><td>          m_pModel-&gt;m_nTexPreviewDim, m_pModel-&gt;m_nTexPreviewDim<span class="k2">)</span><span class="k2">;</span>     </td></tr><tr><td class="number">85</td><td>        </td></tr><tr><td class="number">86</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">87</td><td>      <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td>&#160;</td></tr><tr><td class="number">89</td><td>    <span class="k1">case</span> MODELDATATYPE_TEXTUREDIMS:</td></tr><tr><td class="number">90</td><td>      nIndex <span class="k3">=</span> <span class="k3">*</span><span class="k2">(</span><span class="k1">int</span><span class="k3">*</span><span class="k2">)</span>pt<span class="k2">;</span></td></tr><tr><td class="number">91</td><td>      <span class="k1">if</span> <span class="k2">(</span>nIndex <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> nIndex <span class="k3">&lt;</span> m_pModel-&gt;m_nNbTextures<span class="k2">)</span></td></tr><tr><td class="number">92</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">93</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>szBuf, <span class="s">"%d * %d"</span>, </td></tr><tr><td class="number">94</td><td>          m_pModel-&gt;m_Texs<span class="k2">[</span>nIndex<span class="k2">]</span>.bmpImage-&gt;w,</td></tr><tr><td class="number">95</td><td>          m_pModel-&gt;m_Texs<span class="k2">[</span>nIndex<span class="k2">]</span>.bmpImage-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">96</td><td>        pDC-&gt;DrawText<span class="k2">(</span>szBuf, <span class="k3">&amp;</span><a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a>, DT_LEFT <span class="k3">|</span> DT_SINGLELINE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">97</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">98</td><td>      <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">99</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">100</td><td>    </td></tr><tr><td class="number">101</td><td>    <span class="c">// pDC-&gt;RestoreDC(-1);    </span></td></tr><tr><td class="number">102</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">103</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Thanks a lot for any help!!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Tue, 23 May 2006 14:26:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>MFC is a lost cause, i hope you dont plan to invest to much in it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Tue, 23 May 2006 15:36:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Anyone except AJ knows the trick? (even if it&#39;s a lost cause....)<br />Thank you.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Tue, 23 May 2006 17:56:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>when you dont get much of a reply, i would consider that as a measure of how much everyone has already realized.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Wed, 24 May 2006 02:11:49 +0000</pubDate>
	</item>
</rss>
