<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Application Hangs When Switching In/Out</title>
		<link>http://www.allegro.cc/forums/view/590992</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 13 Apr 2007 10:52:53 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I know I&#39;m doing something wrong, but I&#39;m not entirely sure what.</p><p>Basically, before reading the lengthy amount of code below, here&#39;s what I&#39;m trying to do:</p><ul><li><p>I&#39;m writing an input wrapper for the Keyboard, Mouse and Joystick.
</p></li><li><p>I&#39;m trying to use my own window instead of Allegro&#39;s built-in window.
</p></li><li><p>I still want access to Allegro&#39;s graphics handling.</p></li></ul><p>This is what I&#39;ve accomplished:</p><ul><li><p>Keyboard input works fine.
</p></li><li><p>Mouse input works fine but is still incomplete.
</p></li><li><p>Graphics work fine both windowed or fullscreen.</p></li></ul><p>And here&#39;s the problem:</p><ul><li><p>If the program loses the focus, it locks up.</p></li></ul><p>What am I doing wrong? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></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">// Gemini's DirectInput Testing Program</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="p">#define ALLEGRO_NO_MAGIC_MAIN</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="p">#define APPLICATION_NAME "Gemini's DirectInput Testing Program"</span></td></tr><tr><td class="number">6</td><td><span class="p">#define GEMINI_WND_CLASS "GWNDCLASS1"</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">9</td><td><span class="p">#include &lt;winalleg.h&gt;</span></td></tr><tr><td class="number">10</td><td><span class="p">#include &lt;stdio.h&gt;</span></td></tr><tr><td class="number">11</td><td><span class="p">#include &lt;stdlib.h&gt;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td><span class="p">#include "g-dinput.h"</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td>HINSTANCE  app_hInst<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>HWND    app_hWnd<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer, <span class="k3">*</span>cursor<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>LRESULT CALLBACK G_WindowProc <span class="k2">(</span>HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam<span class="k2">)</span></td></tr><tr><td class="number">23</td><td><span class="k2">{</span></td></tr><tr><td class="number">24</td><td>  <span class="k1">switch</span> <span class="k2">(</span>msg<span class="k2">)</span></td></tr><tr><td class="number">25</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>    <span class="k1">case</span> WM_CREATE: <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>    <span class="k1">case</span> WM_DESTROY: PostQuitMessage<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>    <span class="k1">case</span> WM_KEYDOWN: <span class="k1">case</span> WM_KEYUP: <span class="k1">case</span> WM_SYSKEYDOWN: <span class="k1">case</span> WM_SYSKEYUP: <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    <span class="k1">case</span> WM_PAINT: <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">31</td><td>&#160;</td></tr><tr><td class="number">32</td><td>  <span class="k1">return</span> DefWindowProc<span class="k2">(</span>hWnd, msg, wParam, lParam<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td><span class="k2">}</span></td></tr><tr><td class="number">34</td><td>&#160;</td></tr><tr><td class="number">35</td><td><span class="k1">void</span> G_HandleWindowsMessages <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">36</td><td><span class="k2">{</span></td></tr><tr><td class="number">37</td><td>  MSG msg<span class="k2">;</span></td></tr><tr><td class="number">38</td><td>&#160;</td></tr><tr><td class="number">39</td><td>  <span class="k1">while</span> <span class="k2">(</span>PeekMessage<span class="k2">(</span><span class="k3">&amp;</span>msg,NULL,<span class="n">0</span>,<span class="n">0</span>,PM_REMOVE<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">40</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">41</td><td>    TranslateMessage<span class="k2">(</span><span class="k3">&amp;</span>msg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>    DispatchMessage<span class="k2">(</span><span class="k3">&amp;</span>msg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>  <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>&#160;</td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td>&#160;</td></tr><tr><td class="number">48</td><td><span class="k1">void</span> Switch_In_Callback <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">49</td><td><span class="k2">{</span></td></tr><tr><td class="number">50</td><td>  GDINPUT_ResetThread<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td><span class="k2">}</span></td></tr><tr><td class="number">52</td><td>&#160;</td></tr><tr><td class="number">53</td><td><span class="k1">void</span> g_main <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">54</td><td><span class="k2">{</span></td></tr><tr><td class="number">55</td><td>  <span class="k1">char</span> s<span class="k2">[</span><span class="n">512</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>  <span class="k1">int</span> z, zz, c<span class="k2">;</span></td></tr><tr><td class="number">57</td><td>&#160;</td></tr><tr><td class="number">58</td><td>  <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">32</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>  <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED,<span class="n">640</span>,<span class="n">480</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>  <a href="http://www.allegro.cc/manual/set_display_switch_callback" target="_blank"><span class="a">set_display_switch_callback</span></a><span class="k2">(</span>SWITCH_IN,Switch_In_Callback<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">61</td><td>&#160;</td></tr><tr><td class="number">62</td><td>  <span class="k1">if</span> <span class="k2">(</span>GDINPUT_Initialize<span class="k2">(</span>app_hInst,app_hWnd<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">63</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">64</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Unable to start DirectInput driver."</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">65</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">66</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">67</td><td>  <span class="k1">if</span> <span class="k2">(</span>GDINPUT_Init_Keyboard<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">68</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">69</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Unable to start DirectInput Keyboard device."</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">70</td><td>    GDINPUT_Shutdown<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">71</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">72</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">73</td><td>  <span class="k1">if</span> <span class="k2">(</span>GDINPUT_Init_Mouse<span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,screen-&gt;w-1,screen-&gt;h-1,<a href="http://www.allegro.cc/manual/is_windowed_mode" target="_blank"><span class="a">is_windowed_mode</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">74</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">75</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Unable to start DirectInput Mouse device."</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td>    GDINPUT_Shutdown<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">77</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">78</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">79</td><td>  GDINPUT_SetMousePos<span class="k2">(</span>screen-&gt;w<span class="k3">/</span><span class="n">2</span>,screen-&gt;h<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">80</td><td>&#160;</td></tr><tr><td class="number">81</td><td>  buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">640</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">82</td><td>  cursor <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">25</span>,<span class="n">25</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">83</td><td>&#160;</td></tr><tr><td class="number">84</td><td>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>cursor,<a href="http://www.allegro.cc/manual/bitmap_mask_color" target="_blank"><span class="a">bitmap_mask_color</span></a><span class="k2">(</span>cursor<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">85</td><td>  <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>cursor,<span class="n">12</span>,<span class="n">12</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">86</td><td>  <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>cursor,<span class="n">1</span>,<span class="n">12</span>,<span class="n">9</span>,<span class="n">12</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">87</td><td>  <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>cursor,<span class="n">15</span>,<span class="n">12</span>,<span class="n">23</span>,<span class="n">12</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td>  <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>cursor,<span class="n">12</span>,<span class="n">1</span>,<span class="n">12</span>,<span class="n">9</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">89</td><td>  <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>cursor,<span class="n">12</span>,<span class="n">15</span>,<span class="n">12</span>,<span class="n">23</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">90</td><td>  <span class="k1">for</span> <span class="k2">(</span>z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> z <span class="k3">&lt;</span> <span class="n">25</span><span class="k2">;</span> z<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k1">for</span> <span class="k2">(</span>zz <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> zz <span class="k3">&lt;</span> <span class="n">25</span><span class="k2">;</span> zz<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">91</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">92</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span>cursor,z,zz<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/bitmap_mask_color" target="_blank"><span class="a">bitmap_mask_color</span></a><span class="k2">(</span>cursor<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">93</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">94</td><td>      <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span>cursor,z-1,zz<span class="k2">)</span> <span class="k3">|</span> <a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span>cursor,z<span class="k3">+</span><span class="n">1</span>,zz<span class="k2">)</span> <span class="k3">|</span> <a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span>cursor,z,zz-1<span class="k2">)</span></td></tr><tr><td class="number">95</td><td>        <span class="k3">|</span> <a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span>cursor,z,zz<span class="k3">+</span><span class="n">1</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/bitmap_mask_color" target="_blank"><span class="a">bitmap_mask_color</span></a><span class="k2">(</span>cursor<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">96</td><td>        <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>cursor,z,zz,<span class="n">0</span><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="k2">}</span></td></tr><tr><td class="number">99</td><td>&#160;</td></tr><tr><td class="number">100</td><td>  <span class="k1">do</span> <span class="k2">{</span></td></tr><tr><td class="number">101</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>s,<span class="n">0</span>,<span class="k1">sizeof</span><span class="k2">(</span>s<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">102</td><td>    <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td>    GDINPUT_Poll_Keyboard<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>    GDINPUT_Poll_Mouse<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">105</td><td>    <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">8</span>,<span class="n">8</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">0</span><span class="k2">)</span>,<span class="k3">-</span><span class="n">1</span>,<span class="s">"Gemini's DirectInput Wrapper Testing Program"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">106</td><td>    <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">16</span>,<span class="n">24</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>,<span class="k3">-</span><span class="n">1</span>,<span class="s">"Key States"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">107</td><td>    <span class="k1">for</span> <span class="k2">(</span>z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> z <span class="k3">&lt;</span> <span class="n">16</span><span class="k2">;</span> z<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">40</span><span class="k3">+</span>z<span class="k3">*</span><span class="n">24</span>,<span class="n">40</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>,<span class="k3">-</span><span class="n">1</span>,<span class="s">"0%x"</span>,z<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">108</td><td>    <span class="k1">for</span> <span class="k2">(</span>z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> z <span class="k3">&lt;</span> <span class="n">16</span><span class="k2">;</span> z<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">16</span>,<span class="n">56</span><span class="k3">+</span>z<span class="k3">*</span><span class="n">16</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>,<span class="k3">-</span><span class="n">1</span>,<span class="s">"%x0"</span>,z<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">109</td><td>    <span class="k1">for</span> <span class="k2">(</span>z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> z <span class="k3">&lt;</span> <span class="n">256</span><span class="k2">;</span> z<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">110</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">111</td><td>      <span class="k1">if</span> <span class="k2">(</span>gkey<span class="k2">[</span>z<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">112</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">113</td><td>        c <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">64</span>,<span class="n">64</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">114</td><td>        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>s<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">115</td><td>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>s,<span class="s">"%s"</span>,gkey_name_16<span class="k2">[</span>z<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">116</td><td>        <span class="k1">else</span></td></tr><tr><td class="number">117</td><td>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>s,<span class="s">"%s, %s"</span>,s,gkey_name_16<span class="k2">[</span>z<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">118</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">119</td><td>      <span class="k1">else</span></td></tr><tr><td class="number">120</td><td>        c <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">96</span>,<span class="n">96</span>,<span class="n">96</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">121</td><td>      <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">40</span><span class="k3">+</span><span class="k2">(</span>z%<span class="n">16</span><span class="k2">)</span><span class="k3">*</span><span class="n">24</span>,<span class="n">56</span><span class="k3">+</span><span class="k2">(</span>z<span class="k3">/</span><span class="n">16</span><span class="k2">)</span><span class="k3">*</span><span class="n">16</span>,c,<span class="k3">-</span><span class="n">1</span>,<span class="s">"%2x"</span>,gkey<span class="k2">[</span>z<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">123</td><td>    <span class="k1">if</span> <span class="k2">(</span>s<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">8</span>,<span class="n">440</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>,<span class="k3">-</span><span class="n">1</span>,<span class="s">"Keys: %s"</span>,s<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">124</td><td>    <a href="http://www.allegro.cc/manual/textprintf_right_ex" target="_blank"><span class="a">textprintf_right_ex</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">640</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">192</span>,<span class="n">0</span><span class="k2">)</span>,<span class="k3">-</span><span class="n">1</span>,<span class="s">"%d"</span>,gdinput_thread_loop<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">125</td><td>    <a href="http://www.allegro.cc/manual/textprintf_right_ex" target="_blank"><span class="a">textprintf_right_ex</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">640</span>,<span class="n">8</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span>,<span class="k3">-</span><span class="n">1</span>,<span class="s">"%d"</span>,gdinput_reset_count<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">126</td><td>    <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buffer,cursor,gmouse.x-12,gmouse.y-12<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">127</td><td>    <a href="http://www.allegro.cc/manual/vsync" target="_blank"><span class="a">vsync</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">128</td><td>    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">640</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">129</td><td>    G_HandleWindowsMessages<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">130</td><td>    Sleep<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">131</td><td>  <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>gkey<span class="k2">[</span>GKEY_ESCAPE<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">132</td><td>  </td></tr><tr><td class="number">133</td><td>  GDINPUT_Shutdown<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">134</td><td><span class="k2">}</span></td></tr><tr><td class="number">135</td><td>&#160;</td></tr><tr><td class="number">136</td><td><span class="k1">int</span> WINAPI WinMain <span class="k2">(</span>HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, <span class="k1">int</span> nShowCmd<span class="k2">)</span></td></tr><tr><td class="number">137</td><td><span class="k2">{</span></td></tr><tr><td class="number">138</td><td>  WNDCLASSEX  g_winClass<span class="k2">;</span></td></tr><tr><td class="number">139</td><td>  HWND    g_hWnd<span class="k2">;</span></td></tr><tr><td class="number">140</td><td>&#160;</td></tr><tr><td class="number">141</td><td>  app_hInst <span class="k3">=</span> hInstance<span class="k2">;</span></td></tr><tr><td class="number">142</td><td>&#160;</td></tr><tr><td class="number">143</td><td>  g_winClass.cbSize      <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WNDCLASSEX<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">144</td><td>  g_winClass.style      <span class="k3">=</span> CS_HREDRAW <span class="k3">|</span> CS_VREDRAW<span class="k2">;</span></td></tr><tr><td class="number">145</td><td>  g_winClass.lpfnWndProc    <span class="k3">=</span> G_WindowProc<span class="k2">;</span></td></tr><tr><td class="number">146</td><td>  g_winClass.cbClsExtra    <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">147</td><td>  g_winClass.cbWndExtra    <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">148</td><td>  g_winClass.hInstance    <span class="k3">=</span> hInstance<span class="k2">;</span></td></tr><tr><td class="number">149</td><td>  g_winClass.hIcon      <span class="k3">=</span> LoadIcon<span class="k2">(</span>NULL, IDI_APPLICATION<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">150</td><td>  g_winClass.hIconSm      <span class="k3">=</span> LoadIcon<span class="k2">(</span>NULL, IDI_APPLICATION<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">151</td><td>  g_winClass.hCursor      <span class="k3">=</span> LoadCursor<span class="k2">(</span>NULL, IDC_ARROW<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">152</td><td>  g_winClass.hbrBackground  <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">153</td><td>  g_winClass.lpszMenuName    <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">154</td><td>  g_winClass.lpszClassName  <span class="k3">=</span> GEMINI_WND_CLASS<span class="k2">;</span></td></tr><tr><td class="number">155</td><td>&#160;</td></tr><tr><td class="number">156</td><td>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>RegisterClassEx<span class="k2">(</span><span class="k3">&amp;</span>g_winClass<span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">157</td><td>&#160;</td></tr><tr><td class="number">158</td><td>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>g_hWnd <span class="k3">=</span> CreateWindowEx<span class="k2">(</span>NULL,GEMINI_WND_CLASS,APPLICATION_NAME,</td></tr><tr><td class="number">159</td><td>      WS_OVERLAPPEDWINDOW <span class="k3">|</span> WS_SYSMENU <span class="k3">|</span> WS_CAPTION <span class="k3">|</span> WS_MINIMIZEBOX,</td></tr><tr><td class="number">160</td><td>      <span class="n">100</span>,<span class="n">100</span>,<span class="n">800</span>,<span class="n">600</span>,NULL,NULL,hInstance,NULL<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">161</td><td>&#160;</td></tr><tr><td class="number">162</td><td>  app_hWnd <span class="k3">=</span> g_hWnd<span class="k2">;</span></td></tr><tr><td class="number">163</td><td>&#160;</td></tr><tr><td class="number">164</td><td>  ShowWindow<span class="k2">(</span>g_hWnd,SW_SHOWNORMAL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">165</td><td>  SetForegroundWindow<span class="k2">(</span>g_hWnd<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">166</td><td>  UpdateWindow<span class="k2">(</span>g_hWnd<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">167</td><td>&#160;</td></tr><tr><td class="number">168</td><td>  <a href="http://www.allegro.cc/manual/win_set_window" target="_blank"><span class="a">win_set_window</span></a><span class="k2">(</span>g_hWnd<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">169</td><td>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">170</td><td>&#160;</td></tr><tr><td class="number">171</td><td>  g_main<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">172</td><td>&#160;</td></tr><tr><td class="number">173</td><td>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">174</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

(NOTE: Unrecognized commands probably come from my DirectInput wrapper. Since the problem is likely messaging related I&#39;ve excluded it, but will post it if no one can find anything wrong with the above code.)</p><p>Also, just a quick note, many of the messages I&#39;m normally supposed to handle are being handled by Allegro. When you set up a custom window, Allegro still processes its message handler before calling your own, and half of the messages in it still function properly (such as WM_PAINT) even if you&#39;re using your own window. (Granted, WM_PAINT for example, only functions if you&#39;ve called set_gfx_mode().)</p><p>EDIT: Another quick note: I know the window is bigger than what set_gfx_mode() is being set to. This was to test some stuff and I haven&#39;t changed them back yet.</p><p>EDIT: Yet another quick note: I tried removing all references to my input wrapper and the hang problem persisted, so the problem&#39;s definitely not related to that.</p><p>--------------------------------------------------------------------------------</p><p> <b>EDIT (6:52 AM, Several Hours Later):</b></p><p>Solved! <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /><br />...wish I could take the credit. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>Apparently, as I suspected, I wasn&#39;t the first person to try to attempt this. In the &quot;allegro\tests\win&quot; folder is a program called &quot;dxwindow&quot;, which features a fully functional, user-created window, working perfectly, using Allegro&#39;s graphics system. After comparing the differences between my code and it, the solution was all of one line:</p><p><span class="source-code"><a href="http://www.allegro.cc/manual/set_display_switch_mode" target="_blank"><span class="a">set_display_switch_mode</span></a><span class="k2">(</span>SWITCH_BACKGROUND<span class="k2">)</span><span class="k2">;</span></span></p><p>My code works flawlessly now, and I have the amount of control I wanted. (Such as being able to manipulate the mouse cursor without loading the Allegro mouse drivers.)</p><p>In the several hour long process of trying to solve this issue I learned some more about the Windows messaging system and how much Allegro handles on its own, so at least those hours weren&#39;t completely lost to frustration.</p><p>--- Kris Asick (Gemini)<br />--- <a href="http://www.pixelships.com">http://www.pixelships.com</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Fri, 13 Apr 2007 10:52:53 +0000</pubDate>
	</item>
</rss>
