<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>`al_show_native_message_box` buttons argument ignored</title>
		<link>http://www.allegro.cc/forums/view/611173</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 13 Oct 2012 07:39:15 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This code:<br /><span class="source-code"><a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span><span class="n">0</span>, <span class="s">"Native Message"</span>, <span class="s">"Allegro test"</span>, <span class="s">"If this works, there will be three buttons."</span>, <span class="s">"A|B|C"</span>, ALLEGRO_MESSAGEBOX_WARN<span class="k2">)</span><span class="k2">;</span></span></p><p>Produces the attached screenshot.</p><p><span class="remote-thumbnail"><span class="json">{"name":"606650","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/a\/a\/aa0fb20013ef645f5ad17249012d1b5c.png","w":319,"h":174,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/a\/a\/aa0fb20013ef645f5ad17249012d1b5c"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/a/a/aa0fb20013ef645f5ad17249012d1b5c-240.jpg" alt="606650" width="240" height="130" /></span></p><p>Based on my understanding of <a href="http://alleg.sourceforge.net/a5docs/refman/native_dialog.html#al_show_native_message_box">the manual</a> I&#39;d expect it to show three buttons, labeled &#39;A&#39;, &#39;B&#39;, and &#39;C&#39;.</p><p>I&#39;ve tried a few different messagebox flags, and the problem is the same.</p><p>I&#39;m using allegro v5.1.2[1], and mingw v4.7.0. (It isn&#39;t the latest version of Allegro, but I didn&#39;t see anything about this in the changelog.)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Karadoc ~~)</author>
		<pubDate>Tue, 02 Oct 2012 18:59:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think this was discussed a few weeks ago but I can&#39;t find it now.  The problem is that nobody has bothered to write a full blown modeless dialog box function for Windows.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 02 Oct 2012 19:07:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>And it seems to be not easy at all, compared to OSX/GTK. But yes, if anyone has the code for it and can make a patch it would be added of course.</p><p>The current implementation is this btw: <a href="https://github.com/elias-pschernig/allegro5/blob/5.1/addons/native_dialog/win_dialog.c#L238">https://github.com/elias-pschernig/allegro5/blob/5.1/addons/native_dialog/win_dialog.c#L238</a></p><p>So basically just a call to MessageBoxW.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Tue, 02 Oct 2012 20:35:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok. I might look into adding that functionality later today. (Or rather, I will look into it, but I might give up before doing anything useful...)</p><p>Is there some kind of <span class="source-code">todo</span> list for Allegro which tracks unfinished features like this? I didn&#39;t notice anything in the manual, or any comments in the code, to indicate that this feature is incomplete on Windows.</p><p>[edit]<br />Damn... this Windows dialog stuff looks like a bit of a nightmare. From what I can tell, we&#39;d need to do something like <a href="http://blogs.msdn.com/b/oldnewthing/archive/2005/04/29/412577.aspx">this</a>, but with automatically generated parameters and style etc, and without using C++ features. I haven&#39;t been able to find any neat shortcuts.</p><p>Surely there must be some libraries or something which already do this stuff. It&#39;s a pretty basic and useful task, but the winapi stuff is just too low level. <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Karadoc ~~)</author>
		<pubDate>Wed, 03 Oct 2012 04:40:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967317#target">Karadoc ~~</a> said:</div><div class="quote"><p> From what I can tell, we&#39;d need to do something like this [blogs.msdn.com], but with automatically generated parameters and style etc, and without using C++ features.</p></div></div><p>That looks horribly obtuse, but not too terrible. It&#39;s fine to use C++ (I mean the OSX dialogs are implemented in ObjC) but I don&#39;t think C++ is necessary here.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 03 Oct 2012 10:05:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve been writing some code to implement the custom buttons functionality in Allegro. My code isn&#39;t quite finished yet, but I&#39;ve just tried to compile it as part of Allegro and I&#39;ve run into some problems...</p><p>Apparently Allegro is set up to only allow ISO C90 code, and so I&#39;m getting error messages like this:</p><pre>win_dialog.c:303:4: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
win_dialog.c:308:4: error: &#39;for&#39; loop initial declarations are only allowed in C99 mode</pre><p>
Is there some good reason for enforcing C90 rather than C99? In my view, declaring variable where they are needed, and initialing variables when they are declared are both good style, and I&#39;d rather not have to change it.</p><p>In case someone is interested, here is the code I&#39;ve got so far:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="k1">int</span> _al_show_native_message_box<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display,
<span class="number">   2</span>   ALLEGRO_NATIVE_DIALOG <span class="k3">*</span>fd<span class="k2">)</span>
<span class="number">   3</span><span class="k2">{</span>
<span class="number">   4</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;mb_buttons <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span><span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> <span class="k2">(</span>ALLEGRO_MESSAGEBOX_OK_CANCEL <span class="k3">|</span> ALLEGRO_MESSAGEBOX_YES_NO<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">   5</span>   <span class="k2">{</span>
<span class="number">   6</span>      <span class="c">// (all of the code from the current implementation)</span>
<span class="number">   7</span>      <span class="c">// ...</span>
<span class="number">   8</span>   <span class="k2">}</span>
<span class="number">   9</span>
<span class="number">  10</span>   <span class="c">// else there are custom buttons - so things are more complex</span>
<span class="number">  11</span>
<span class="number">  12</span>   <span class="c">// (new code)</span>
<span class="number">  13</span>   <span class="k1">size_t</span> text_size <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_size_utf16"><span class="a">al_ustr_size_utf16</span></a><span class="k2">(</span>fd-&gt;mb_heading<span class="k2">)</span><span class="k2">;</span>
<span class="number">  14</span>   <span class="k1">size_t</span> title_size <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_size_utf16"><span class="a">al_ustr_size_utf16</span></a><span class="k2">(</span>fd-&gt;title<span class="k2">)</span><span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span>   <span class="c">// count the number of custom buttons</span>
<span class="number">  17</span>   <span class="k1">size_t</span> num_buttons <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  18</span>   <span class="k1">for</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> i <span class="k3">=</span> fd-&gt;mb_buttons<span class="k2">;</span> <span class="k3">*</span>i <span class="k3">!</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  19</span>   <span class="k2">{</span>
<span class="number">  20</span>       <span class="k1">if</span> <span class="k2">(</span><span class="k3">*</span>i <span class="k3">=</span><span class="k3">=</span> <span class="s">'|'</span><span class="k2">)</span>
<span class="number">  21</span>           num_buttons<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  22</span>   <span class="k2">}</span>
<span class="number">  23</span>
<span class="number">  24</span>   <span class="c">// record the starting position and length of each button name</span>
<span class="number">  25</span>   <span class="k1">size_t</span> button_caption_length<span class="k2">[</span>num_buttons<span class="k2">]</span><span class="k2">;</span> <span class="c">// note: this is string length, not memory size</span>
<span class="number">  26</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> button_caption_start<span class="k2">[</span>num_buttons<span class="k2">]</span><span class="k2">;</span>
<span class="number">  27</span>   button_caption_start<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> fd-&gt;mb_buttons<span class="k2">;</span>
<span class="number">  28</span>   num_buttons <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  29</span>   <span class="k1">for</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> i <span class="k3">=</span> fd-&gt;mb_buttons<span class="k2">;</span> <span class="k1">true</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  30</span>   <span class="k2">{</span>
<span class="number">  31</span>       <span class="k1">if</span> <span class="k2">(</span><span class="k3">*</span>i <span class="k3">=</span><span class="k3">=</span> <span class="s">'|'</span> <span class="k3">|</span><span class="k3">|</span> <span class="k3">*</span>i <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span>
<span class="number">  32</span>       <span class="k2">{</span>
<span class="number">  33</span>           button_caption_length<span class="k2">[</span>num_buttons<span class="k2">]</span> <span class="k3">=</span> i <span class="k3">-</span> button_caption_start<span class="k2">[</span>num_buttons<span class="k2">]</span><span class="k2">;</span>
<span class="number">  34</span>           num_buttons<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  35</span>           <span class="k1">if</span> <span class="k2">(</span><span class="k3">*</span>i <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span>
<span class="number">  36</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number">  37</span>           <span class="k1">else</span>
<span class="number">  38</span>               button_caption_start<span class="k2">[</span>num_buttons<span class="k2">]</span> <span class="k3">=</span> i<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  39</span>       <span class="k2">}</span>
<span class="number">  40</span>   <span class="k2">}</span>
<span class="number">  41</span>   <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span>num_buttons <span class="k3">=</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>button_caption_length<span class="k2">)</span> <span class="k3">/</span> <span class="k1">sizeof</span><span class="k2">(</span><span class="k3">*</span>button_caption_length<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span>
<span class="number">  43</span>   <span class="c">// Note: the sizes of the buttons, and text box, and the dialog itself are currently mostly just arbitrary numbers.</span>
<span class="number">  44</span>   <span class="c">//       Ideally these sizes should be calculated to best suit the content of the dialog.</span>
<span class="number">  45</span>   <span class="k1">const</span> <span class="k1">short</span> button_width <span class="k3">=</span> <span class="n">50</span><span class="k2">;</span>
<span class="number">  46</span>   <span class="k1">const</span> <span class="k1">short</span> button_height <span class="k3">=</span> <span class="n">14</span><span class="k2">;</span>
<span class="number">  47</span>   <span class="k1">short</span> dlg_width <span class="k3">=</span> <span class="n">200</span> <span class="k3">&gt;</span> num_buttons<span class="k3">*</span><span class="k2">(</span>button_width<span class="k3">+</span><span class="n">20</span><span class="k2">)</span> ? <span class="n">200</span> <span class="k2">:</span> num_buttons<span class="k3">*</span><span class="k2">(</span>button_width<span class="k3">+</span><span class="n">20</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  48</span>   <span class="k1">short</span> dlg_height <span class="k3">=</span> <span class="n">80</span><span class="k2">;</span>
<span class="number">  49</span>
<span class="number">  50</span>   <span class="c">//</span>
<span class="number">  51</span>   <span class="k1">size_t</span> dlg_buffer_size <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>   dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="n">2</span><span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// menu and class (unused)</span>
<span class="number">  53</span>   dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> title_size<span class="k2">;</span> <span class="c">// dialog title</span>
<span class="number">  54</span>
<span class="number">  55</span>   <span class="c">// text (heading and text combined)</span>
<span class="number">  56</span>   <span class="c">// align to dword</span>
<span class="number">  57</span>   <span class="k2">{</span>
<span class="number">  58</span>      <span class="k1">int</span> excess <span class="k3">=</span> dlg_buffer_size % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>      <span class="k1">if</span> <span class="k2">(</span>excess<span class="k2">)</span>
<span class="number">  60</span>         dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span> <span class="k3">-</span> excess<span class="k2">;</span>
<span class="number">  61</span>   <span class="k2">}</span>
<span class="number">  62</span>   <span class="c">// item data</span>
<span class="number">  63</span>   dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGITEMTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>   dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// class</span>
<span class="number">  65</span>   dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> text_size<span class="k2">;</span> <span class="c">// the text itself</span>
<span class="number">  66</span>   dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// creation data</span>
<span class="number">  67</span>
<span class="number">  68</span>   <span class="c">// similarly for each of the buttons.</span>
<span class="number">  69</span>   <span class="k1">for</span> <span class="k2">(</span><span class="k1">size_t</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> num_buttons<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  70</span>   <span class="k2">{</span>
<span class="number">  71</span>      <span class="c">// align to dword</span>
<span class="number">  72</span>      <span class="k2">{</span>
<span class="number">  73</span>         <span class="k1">int</span> excess <span class="k3">=</span> dlg_buffer_size % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>         <span class="k1">if</span> <span class="k2">(</span>excess<span class="k2">)</span>
<span class="number">  75</span>            dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span> <span class="k3">-</span> excess<span class="k2">;</span>
<span class="number">  76</span>      <span class="k2">}</span>
<span class="number">  77</span>
<span class="number">  78</span>      <span class="c">// add the data size of this button</span>
<span class="number">  79</span>      dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGITEMTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>      dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// class</span>
<span class="number">  81</span>      dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> button_caption_length<span class="k2">[</span>i<span class="k2">]</span><span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span>WCHAR<span class="k2">)</span><span class="k2">;</span> <span class="c">// caption</span>
<span class="number">  82</span>      dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// creation data</span>
<span class="number">  83</span>   <span class="k2">}</span>
<span class="number">  84</span>
<span class="number">  85</span>   DLGTEMPLATE<span class="k3">*</span> dlg_template <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span>dlg_buffer_size<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>dlg_template<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  87</span>      <span class="c">// Not enough memory. :(</span>
<span class="number">  88</span>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  89</span>   <span class="k2">}</span>
<span class="number">  90</span>   dlg_template-&gt;x     <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  91</span>   dlg_template-&gt;y     <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  92</span>   dlg_template-&gt;cx    <span class="k3">=</span> dlg_width<span class="k2">;</span>
<span class="number">  93</span>   dlg_template-&gt;cy    <span class="k3">=</span> dlg_height<span class="k2">;</span>
<span class="number">  94</span>   dlg_template-&gt;cdit  <span class="k3">=</span> <span class="n">1</span> <span class="k3">+</span> num_buttons<span class="k2">;</span> <span class="c">// components = text + number of buttons (todo + icons for warning / error etc)</span>
<span class="number">  95</span>   dlg_template-&gt;style <span class="k3">=</span> DS_CENTER <span class="k3">|</span> DS_MODALFRAME <span class="k3">|</span> WS_CAPTION <span class="k3">|</span> WS_POPUP <span class="k3">|</span> WS_BORDER<span class="k2">;</span>
<span class="number">  96</span>
<span class="number">  97</span>
<span class="number">  98</span>   <span class="k1">size_t</span> buffer_offset <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>   <span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// menu (none)</span>
<span class="number"> 100</span>   buffer_offset <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>   <span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// class (none)</span>
<span class="number"> 102</span>   buffer_offset <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</span>   <a href="http://www.allegro.cc/manual/al_ustr_encode_utf16"><span class="a">al_ustr_encode_utf16</span></a><span class="k2">(</span>fd-&gt;title, <span class="k2">(</span><span class="k1">uint16_t</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k2">)</span>, title_size<span class="k2">)</span><span class="k2">;</span> <span class="c">// title</span>
<span class="number"> 104</span>   buffer_offset <span class="k3">+</span><span class="k3">=</span> title_size<span class="k2">;</span>
<span class="number"> 105</span>
<span class="number"> 106</span>   <span class="c">// dialog header complete.  Now for the dialog items.</span>
<span class="number"> 107</span>   <span class="c">// First, the text.</span>
<span class="number"> 108</span>   buffer_offset <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span> <span class="k3">-</span> buffer_offset % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">)</span> % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// align to DWORD</span>
<span class="number"> 109</span>   <span class="k2">{</span>
<span class="number"> 110</span>      DLGITEMTEMPLATE<span class="k3">*</span> item <span class="k3">=</span> <span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</span>      item-&gt;helpID <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 112</span>      item-&gt;dwExtendedStyle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 113</span>      item-&gt;style <span class="k3">=</span> WS_CHILD <span class="k3">|</span> WS_VISIBLE<span class="k2">;</span>
<span class="number"> 114</span>      item-&gt;x     <span class="k3">=</span> <span class="n">7</span><span class="k2">;</span>
<span class="number"> 115</span>      item-&gt;y     <span class="k3">=</span> <span class="n">7</span><span class="k2">;</span>
<span class="number"> 116</span>      item-&gt;cx    <span class="k3">=</span> dlg_width <span class="k3">-</span> <span class="n">14</span><span class="k2">;</span>
<span class="number"> 117</span>      item-&gt;cy    <span class="k3">=</span> dlg_height-7-button_height-7<span class="k2">;</span>
<span class="number"> 118</span>      item-&gt;id    <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 119</span>   <span class="k2">}</span>
<span class="number"> 120</span>   buffer_offset <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGITEMTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>
<span class="number"> 122</span>   <span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k2">)</span> <span class="k3">=</span> <span class="n">0xFFFF</span><span class="k2">;</span> <span class="c">// pre-defined type to follow</span>
<span class="number"> 123</span>   <span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k3">+</span><span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0x0082</span><span class="k2">;</span> <span class="c">// 'static'</span>
<span class="number"> 124</span>   buffer_offset <span class="k3">+</span><span class="k3">=</span> <span class="n">2</span><span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>
<span class="number"> 126</span>   <a href="http://www.allegro.cc/manual/al_ustr_encode_utf16"><span class="a">al_ustr_encode_utf16</span></a><span class="k2">(</span>fd-&gt;title, <span class="k2">(</span><span class="k1">uint16_t</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k2">)</span>, text_size<span class="k2">)</span><span class="k2">;</span> <span class="c">// text body</span>
<span class="number"> 127</span>   buffer_offset <span class="k3">+</span><span class="k3">=</span> text_size<span class="k2">;</span>
<span class="number"> 128</span>   <span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// creation data (whatever that means - we don't need it)</span>
<span class="number"> 129</span>   buffer_offset <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span>
<span class="number"> 131</span>   <span class="c">// Next, each of the buttons.</span>
<span class="number"> 132</span>   <span class="k1">for</span> <span class="k2">(</span><span class="k1">size_t</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> num_buttons<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 133</span>   <span class="k2">{</span>
<span class="number"> 134</span>      buffer_offset <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span> <span class="k3">-</span> buffer_offset % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">)</span> % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// align to DWORD</span>
<span class="number"> 135</span>
<span class="number"> 136</span>      DLGITEMTEMPLATE<span class="k3">*</span> item <span class="k3">=</span> <span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>      item-&gt;helpID <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 138</span>      item-&gt;dwExtendedStyle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 139</span>      item-&gt;style <span class="k3">=</span> WS_CHILD <span class="k3">|</span> WS_VISIBLE <span class="k3">|</span> WS_TABSTOP <span class="k3">|</span> BS_DEFPUSHBUTTON <span class="k3">|</span> <span class="k2">(</span>i <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> ? WS_GROUP <span class="k2">:</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>      item-&gt;x     <span class="k3">=</span> dlg_width <span class="k3">-</span> <span class="k2">(</span>num_buttons <span class="k3">-</span> i<span class="k2">)</span> <span class="k3">*</span> button_width <span class="k3">-</span> <span class="k2">(</span>num_buttons <span class="k3">+</span> <span class="n">1</span> <span class="k3">-</span> i<span class="k2">)</span> <span class="k3">*</span> <span class="n">20</span><span class="k2">;</span>
<span class="number"> 141</span>      item-&gt;y     <span class="k3">=</span> dlg_height <span class="k3">-</span> button_height <span class="k3">-</span> <span class="n">7</span><span class="k2">;</span>
<span class="number"> 142</span>      item-&gt;cx    <span class="k3">=</span> button_width<span class="k2">;</span>
<span class="number"> 143</span>      item-&gt;cy    <span class="k3">=</span> button_height<span class="k2">;</span>
<span class="number"> 144</span>      item-&gt;id    <span class="k3">=</span> <span class="n">1000</span> <span class="k3">+</span> i<span class="k2">;</span>
<span class="number"> 145</span>
<span class="number"> 146</span>      buffer_offset <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGITEMTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 147</span>
<span class="number"> 148</span>      <span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k2">)</span> <span class="k3">=</span> <span class="n">0xFFFF</span><span class="k2">;</span> <span class="c">// pre-defined type to follow</span>
<span class="number"> 149</span>      <span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k3">+</span><span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0x0080</span><span class="k2">;</span> <span class="c">// 'button'</span>
<span class="number"> 150</span>      buffer_offset <span class="k3">+</span><span class="k3">=</span> <span class="n">2</span><span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>
<span class="number"> 152</span>      <a href="http://www.allegro.cc/manual/al_ustr_encode_utf16"><span class="a">al_ustr_encode_utf16</span></a><span class="k2">(</span>button_caption_start, <span class="k2">(</span><span class="k1">uint16_t</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k2">)</span>, button_caption_length<span class="k2">[</span>i<span class="k2">]</span><span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span>WCHAR<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// caption</span>
<span class="number"> 153</span>      buffer_offset <span class="k3">+</span><span class="k3">=</span> button_caption_length<span class="k2">[</span>i<span class="k2">]</span><span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span>WCHAR<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span>      <span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>dlg_template<span class="k3">+</span>buffer_offset<span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 155</span>      buffer_offset <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>   <span class="k2">}</span>
<span class="number"> 157</span>   <span class="k1">int</span> result <span class="k3">=</span> DialogBoxIndirect<span class="k2">(</span><span class="n">0</span>, dlg_template, <a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span>display<span class="k2">)</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 158</span>   <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>dlg_template<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 159</span>   <span class="k1">return</span> result<span class="k2">;</span>
<span class="number"> 160</span><span class="k2">}</span>
</div></div><p>

As I said though, it isn&#39;t quite finished.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Karadoc ~~)</author>
		<pubDate>Sun, 07 Oct 2012 09:21:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967586#target">Karadoc ~~</a> said:</div><div class="quote"><p> Is there some good reason for enforcing C90 rather than C99?
</p></div></div><p>Visual C++.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sun, 07 Oct 2012 09:26:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967587#target">Matthew Leverton</a> said:</div><div class="quote"><p>Visual C++.</p></div></div><p> he asked if there were any <i>good</i> reasons.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sun, 07 Oct 2012 09:47:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967588#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p> he asked if there were any good reasons.
</p></div></div><p>To annoy the Freetards <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Sun, 07 Oct 2012 11:10:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sticking to a 22 year old standard instead of a 13 year old standard is good business practice!</p><p>Let me see, what else was new in 1990?</p><p>Tim Berners Lee proposes a &quot;hypertext&quot; system, a precursor to the World Wide Wait, er, Web!</p><p>Windows 3.0 was brand spanking new!</p><p>The Sound Blaster Pro was new!</p><p>IBM introduces <a href="http://en.wikipedia.org/wiki/Graphics_display_resolution#XGA_.281024.C3.97768.29">XGA</a> to extend the VGA standard.</p><p>The first 32 bit Amiga is introduced!  Yves hasn&#39;t been born yet.  Or BAF (!)</p><p>I&#39;ll stop now.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Sun, 07 Oct 2012 13:55:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I wouldn&#39;t mind dropping Visual C++ support. Not for using Allegro, but for compiling it. We&#39;d of course adjust the DLL creation process so the produced DLLs can be used with VC before doing that.</p><p>But it would mean, Allegro itself could be written in proper C11. To compile it you would need to use clang or gcc or the Intel compiler or any other C11 compiler. Most VS users wouldn&#39;t compile the library themselves anyway, so nothing would change for them. They get the headers and libraries and can use Allegro.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Sun, 07 Oct 2012 16:00:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967593#target">Elias</a> said:</div><div class="quote"><p> But it would mean, Allegro itself could be written in proper C11. To compile it you would need to use clang or gcc or the Intel compiler or any other C11 compiler. Most VS users wouldn&#39;t compile the library themselves anyway, so nothing would change for them.</p></div></div><p>Being unable to build and debug Allegro in Visual Studio could mean losing most Windows contributors.  And you wouldn&#39;t have debug information for Allegro that the MSVC debugger can read.  Etc.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Sun, 07 Oct 2012 23:34:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t see what the big problem is with declaring variables at the top of functions, including loop iterators. Really not worth losing MSVC support over.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sun, 07 Oct 2012 23:52:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967618#target">torhu</a> said:</div><div class="quote"><p>Being unable to build and debug Allegro in Visual Studio could mean losing most Windows contributors. </p></div></div><p>You mean almost none? If not none? We don&#39;t really have a windows dev.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sun, 07 Oct 2012 23:55:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I maintain the d3d port and work on opengl too <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />. The only thing I haven&#39;t fixed is the topic of this very thread. I use MinGW myself but I may be using VC++ more for Windows 8 stuff. If I have the money to buy a Windows 8 license I intend to &quot;port&quot; Allegro to it (meaning have it feel like a  real Windows 8 app with metro and all that, not just a compatibility app, ready for the Windows store etc.)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Mon, 08 Oct 2012 00:21:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967622#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p> You mean almost none? If not none? We don&#39;t really have a windows dev?</p></div></div><p>Remember END_OF_MAIN()?  That would probably still be there if someone that use MSVC as their main development tool hadn&#39;t realized that it&#39;s not needed.  It would have stayed because &quot;the stupid MSVC crap can&#39;t do things in a sane way&quot;.  And nobody would know that the real reason was just that the Allegro dev team lacked familiarity with the MSVC tool chain.</p><p>And this was done by an outside contributor who probably wouldn&#39;t bother if he couldn&#39;t build and debug Allegro in his beloved MSVC.  And I should know, as it was me <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967620#target">Trent Gamblin</a> said:</div><div class="quote"><p> I don&#39;t see what the big problem is with declaring variables at the top of functions, including loop iterators. Really not worth losing MSVC support over.</p></div></div><p>Me neither.  I see how it&#39;s annoying having to get used to a slightly different (and inferior) style of programming if you&#39;ve never had to do it like this before.  And even worse when it&#39;s evil Microsoft&#39;s fault. But it&#39;s still pretty much the same C that we all know and love.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Mon, 08 Oct 2012 00:55:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, I&#39;d vote in favour of dropping Visual C++ support for building Allegro; but since I&#39;m not a significant contributor to Allegro, I don&#39;t think my vote should count for much.</p><p>The archaic rules about variable declarations are pretty annoying<span class="ref"><sup>[<a href="#">1</a>]</sup></span>; but more generally, I just don&#39;t think Allegro should allow itself to be held back by just because one compiler is no longer being updated.</p><p>There are a bunch of new C features which some Allegro developers may want to use at some point. And although it may not be easy to come up with <i>a priori</i> reasons for using any given feature, I think that the question of whether or not developers can use any given feature should be &quot;is this standard C&quot; rather than &quot;is this supported by Microsoft?&quot; For me, this kind of VC++ stuff is bad for morale. Instead of thinking about making high quality code, I just end up getting frustrated at Microsoft and it makes me want to avoid working in such an environment.
</p><div class="ref-block"><h2>References</h2><ol><li>I like initialize variables on the same line that they are declared, and to have them go out of scope when their value is obsolete - that way there&#39;s no chance of accidentally using uninitialized junk.</li></ol></div></div>]]>
		</description>
		<author>no-reply@allegro.cc (Karadoc ~~)</author>
		<pubDate>Mon, 08 Oct 2012 04:23:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967632#target">torhu</a> said:</div><div class="quote"><p>And this was done by an outside contributor who probably wouldn&#39;t bother if he couldn&#39;t build and debug Allegro in his beloved MSVC. And I should know, as it was me </p></div></div><p>You are welcome to become the full time windows maintainer <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 08 Oct 2012 04:31:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>We&#39;re not dropping MSVC support over this trivial issue.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Mon, 08 Oct 2012 05:26:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967652#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p> You are welcome to become the full time windows maintainer <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p></div></div><p>Thanks, but just the thought of making any commitment to an unpaid project makes me feel a bit stressed right now <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>Karadoc, most of your reasons are valid but pretty insignificant in practice.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Mon, 08 Oct 2012 05:38:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967656#target">torhu</a> said:</div><div class="quote"><p>Thanks, but just the thought of making any commitment to an unpaid project makes me feel a bit stressed right now </p></div></div><p>That busy eh?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 08 Oct 2012 06:01:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok. Moving on from that VC++ stuff, and back to implementing this custom buttons functionality...</p><p>In the code I posted, one of the big and obvious holes is that the way I&#39;ve handled the buttons names is broken. I&#39;m going to fix that now; but I&#39;m not familiar with how to handle unicode strings, so I just want to do a quick sanity check here before I write the code. (Somewhat embarrassingly, I didn&#39;t even realise that unicode character had variable length until a few minutes ago. I thought UTF-16 just meant all characters were 16 bit numbers or something like that.)</p><p>As I understand it, we start with a <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a></span> called <span class="source-code">mb_buttons</span> which contains a list of button names separated by &#39;|&#39; characters. To use this in the Windows API, we&#39;ll need to encode the individual button names into the correct places in the dialog template buffer, as UTF-16 strings.</p><p>I&#39;ve just browsed through some of the Allegro API to see how this can be done. I now know how to iterate through the characters in <span class="source-code">mb_buttons</span> to find the starting position and the size of each button name. But unfortunately I can&#39;t see a way to encode one of these substrings directly into the dialog buffer.</p><p>What I&#39;d like is to use a function like <span class="source-code">al_ustr_encode_utf16_substr</span> to encode the button names directly onto the buffer. Unfortunately, that function doesn&#39;t exist. So it seems to me that I have to use <span class="source-code"><a href="http://www.allegro.cc/manual/al_ustr_dup_substr"><span class="a">al_ustr_dup_substr</span></a></span> to create separate `ALLEGRO_USTR`s for each button name and then use <span class="source-code"><a href="http://www.allegro.cc/manual/al_ustr_encode_utf16"><span class="a">al_ustr_encode_utf16</span></a></span> to encode each of them into their place in the dialog buffer. Does that sound about right? It sucks a bit, because its a bunch of allocating/copying/freeing just to move data from one API to the other.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Karadoc ~~)</author>
		<pubDate>Mon, 08 Oct 2012 06:07:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>al_ref_ustr
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Mon, 08 Oct 2012 07:22:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Right. <span class="source-code"><a href="http://www.allegro.cc/manual/al_ref_ustr"><span class="a">al_ref_ustr</span></a></span> is the thing to use; and I&#39;ve worked around the variable declaration problem by putting a bunch of braces all over the place. </p><p>I&#39;ve now finished what I was trying to implement; but I&#39;m pretty disappointed with how it turned out. It doesn&#39;t really look &#39;native&#39; at all. It looks like quite bad. <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /></p><p><span class="remote-thumbnail"><span class="json">{"name":"606671","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/a\/ba6f742214ab05bcfd8921e98b5d9082.png","w":466,"h":188,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/a\/ba6f742214ab05bcfd8921e98b5d9082"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/b/a/ba6f742214ab05bcfd8921e98b5d9082-240.jpg" alt="606671" width="240" height="96" /></span></p><p>I assumed that if I didn&#39;t specify a font, Windows would automatically pick whatever the normal font is – but unfortunately it actually just uses a trashy looking system font.</p><p>Also, my current implementation doesn&#39;t make any attempt to make the box big enough to fit the text. The height of the box is the same regardless of the text.</p><p>So.. I guess the main shortcomings of my implementation are as follows:</p><ul><li><p>The height of the box is not set dynamically, and so long messages may appear underneath the buttons or be truncated.
</p></li><li><p>The size of the buttons is not set dynamically, and so long button names might not fit.
</p></li><li><p>The text is missing the white background that standard dialog boxes have.
</p></li><li><p>Flags such as <span class="source-code">ALLEGRO_MESSAGEBOX_WARN</span> and <span class="source-code">ALLEGRO_MESSAGEBOX_ERROR</span> are ignored. (These flags should have a corresponding sound-effect, and an icon inside the dialog box.)</p></li></ul><p>... So the result is pretty ugly, but at least it has the correct buttons!</p><p>I&#39;m not intending to work on this again in the near future, but if someone else wants to have a go at it, or if you think this is good enough to put into Allegro, then here&#39;s the code:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">// DialogProc callback for customized windows dialog boxes</span>
<span class="number">   2</span>INT_PTR CALLBACK _al_winAPI_DlgProc<span class="k2">(</span>HWND hwnd, UINT wm, WPARAM wParam, LPARAM lParam<span class="k2">)</span>
<span class="number">   3</span><span class="k2">{</span>
<span class="number">   4</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>lParam<span class="k2">;</span> <span class="c">// unused</span>
<span class="number">   5</span>   <span class="k1">if</span> <span class="k2">(</span>wm <span class="k3">=</span><span class="k3">=</span> WM_INITDIALOG<span class="k2">)</span>
<span class="number">   6</span>      <span class="k1">return</span> TRUE<span class="k2">;</span>
<span class="number">   7</span>   <span class="k1">if</span> <span class="k2">(</span>wm <span class="k3">=</span><span class="k3">=</span> WM_COMMAND<span class="k2">)</span>
<span class="number">   8</span>   <span class="k2">{</span>
<span class="number">   9</span>      <span class="k1">int</span> control_id <span class="k3">=</span> LOWORD<span class="k2">(</span>wParam<span class="k2">)</span><span class="k2">;</span>
<span class="number">  10</span>
<span class="number">  11</span>      <span class="k1">if</span> <span class="k2">(</span>control_id <span class="k3">&gt;</span> <span class="n">1000</span><span class="k2">)</span>
<span class="number">  12</span>      <span class="k2">{</span>
<span class="number">  13</span>         EndDialog<span class="k2">(</span>hwnd, control_id-1000<span class="k2">)</span><span class="k2">;</span>
<span class="number">  14</span>         <span class="k1">return</span> TRUE<span class="k2">;</span>
<span class="number">  15</span>      <span class="k2">}</span>
<span class="number">  16</span>   <span class="k2">}</span>
<span class="number">  17</span>   <span class="k1">return</span> FALSE<span class="k2">;</span>
<span class="number">  18</span><span class="k2">}</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="k1">int</span> _al_show_native_message_box<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display,
<span class="number">  21</span>   ALLEGRO_NATIVE_DIALOG <span class="k3">*</span>fd<span class="k2">)</span>
<span class="number">  22</span><span class="k2">{</span>
<span class="number">  23</span>   <span class="c">/* heading + text are combined together */</span>
<span class="number">  24</span>
<span class="number">  25</span>   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_ustr_size"><span class="a">al_ustr_size</span></a><span class="k2">(</span>fd-&gt;mb_heading<span class="k2">)</span><span class="k2">)</span>
<span class="number">  26</span>      <a href="http://www.allegro.cc/manual/al_ustr_append_cstr"><span class="a">al_ustr_append_cstr</span></a><span class="k2">(</span>fd-&gt;mb_heading, <span class="s">"\n\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  27</span>
<span class="number">  28</span>   <a href="http://www.allegro.cc/manual/al_ustr_append"><span class="a">al_ustr_append</span></a><span class="k2">(</span>fd-&gt;mb_heading, fd-&gt;mb_text<span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>
<span class="number">  30</span>   <span class="c">// If there are no custom button names, then we can use a standard Windows message box.</span>
<span class="number">  31</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>fd-&gt;mb_buttons <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> <span class="k2">(</span>ALLEGRO_MESSAGEBOX_OK_CANCEL <span class="k3">|</span> ALLEGRO_MESSAGEBOX_YES_NO<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  32</span>   <span class="k2">{</span>
<span class="number">  33</span>       UINT type <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  34</span>       <span class="k1">int</span> result<span class="k2">;</span>
<span class="number">  35</span>
<span class="number">  36</span>       <span class="k1">uint16_t</span> <span class="k3">*</span>wide_text, <span class="k3">*</span>wide_title<span class="k2">;</span>
<span class="number">  37</span>       <span class="k1">size_t</span> text_len, title_len<span class="k2">;</span>
<span class="number">  38</span>
<span class="number">  39</span>       <span class="c">/* Note: the message box code cannot assume that Allegro is installed. */</span>
<span class="number">  40</span>
<span class="number">  41</span>       <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_MESSAGEBOX_QUESTION<span class="k2">)</span>
<span class="number">  42</span>          type <span class="k3">|</span><span class="k3">=</span> MB_ICONQUESTION<span class="k2">;</span>
<span class="number">  43</span>       <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_MESSAGEBOX_WARN<span class="k2">)</span>
<span class="number">  44</span>          type <span class="k3">|</span><span class="k3">=</span> MB_ICONWARNING<span class="k2">;</span>
<span class="number">  45</span>       <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span>
<span class="number">  46</span>          type <span class="k3">|</span><span class="k3">=</span> MB_ICONERROR<span class="k2">;</span>
<span class="number">  47</span>       <span class="k1">else</span>
<span class="number">  48</span>          type <span class="k3">|</span><span class="k3">=</span> MB_ICONINFORMATION<span class="k2">;</span>
<span class="number">  49</span>
<span class="number">  50</span>       <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_MESSAGEBOX_YES_NO<span class="k2">)</span>
<span class="number">  51</span>          type <span class="k3">|</span><span class="k3">=</span> MB_YESNO<span class="k2">;</span>
<span class="number">  52</span>       <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_MESSAGEBOX_OK_CANCEL<span class="k2">)</span>
<span class="number">  53</span>          type <span class="k3">|</span><span class="k3">=</span> MB_OKCANCEL<span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span>       text_len <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_size_utf16"><span class="a">al_ustr_size_utf16</span></a><span class="k2">(</span>fd-&gt;mb_heading<span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>       title_len <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_size_utf16"><span class="a">al_ustr_size_utf16</span></a><span class="k2">(</span>fd-&gt;title<span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>
<span class="number">  58</span>       wide_text <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span>text_len <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>       <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>wide_text<span class="k2">)</span>
<span class="number">  60</span>          <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  61</span>
<span class="number">  62</span>       wide_title <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span>title_len <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>       <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>wide_title<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  64</span>          <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>wide_text<span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span>          <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  66</span>       <span class="k2">}</span>
<span class="number">  67</span>
<span class="number">  68</span>       <a href="http://www.allegro.cc/manual/al_ustr_encode_utf16"><span class="a">al_ustr_encode_utf16</span></a><span class="k2">(</span>fd-&gt;mb_heading, wide_text, text_len<span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>       <a href="http://www.allegro.cc/manual/al_ustr_encode_utf16"><span class="a">al_ustr_encode_utf16</span></a><span class="k2">(</span>fd-&gt;title, wide_title, title_len<span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>
<span class="number">  71</span>       result <span class="k3">=</span> MessageBoxW<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span>display<span class="k2">)</span>,
<span class="number">  72</span>          <span class="k2">(</span>LPCWSTR<span class="k2">)</span> wide_text, <span class="k2">(</span>LPCWSTR<span class="k2">)</span> wide_title, type<span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>
<span class="number">  74</span>       <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>wide_text<span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>       <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>wide_title<span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>
<span class="number">  77</span>       <span class="k1">if</span> <span class="k2">(</span>result <span class="k3">=</span><span class="k3">=</span> IDYES <span class="k3">|</span><span class="k3">|</span> result <span class="k3">=</span><span class="k3">=</span> IDOK<span class="k2">)</span>
<span class="number">  78</span>          <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  79</span>       <span class="k1">else</span>
<span class="number">  80</span>          <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  81</span>   <span class="k2">}</span>
<span class="number">  82</span>   <span class="c">// else there are custom buttons - so things are more complex</span>
<span class="number">  83</span>   <span class="k1">else</span>
<span class="number">  84</span>   <span class="k2">{</span>
<span class="number">  85</span>      <span class="k1">size_t</span> text_size <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_size_utf16"><span class="a">al_ustr_size_utf16</span></a><span class="k2">(</span>fd-&gt;mb_heading<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>      <span class="k1">size_t</span> title_size <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_size_utf16"><span class="a">al_ustr_size_utf16</span></a><span class="k2">(</span>fd-&gt;title<span class="k2">)</span><span class="k2">;</span>
<span class="number">  87</span>
<span class="number">  88</span>      <span class="k1">size_t</span> num_buttons<span class="k2">;</span>
<span class="number">  89</span>      <span class="k1">int</span><span class="k3">*</span> button_caption_start<span class="k2">;</span>
<span class="number">  90</span>      <span class="k1">int</span><span class="k3">*</span> button_caption_end<span class="k2">;</span>
<span class="number">  91</span>
<span class="number">  92</span>      <span class="c">// count the number of custom buttons</span>
<span class="number">  93</span>      <span class="k2">{</span>
<span class="number">  94</span>         <span class="k1">int</span> offset <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  95</span>         num_buttons <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  96</span>         <span class="k1">do</span>
<span class="number">  97</span>         <span class="k2">{</span>
<span class="number">  98</span>            offset <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_find_chr"><span class="a">al_ustr_find_chr</span></a><span class="k2">(</span>fd-&gt;mb_buttons, offset, <span class="s">'|'</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>            <a href="http://www.allegro.cc/manual/al_ustr_next"><span class="a">al_ustr_next</span></a><span class="k2">(</span>fd-&gt;mb_buttons, <span class="k3">&amp;</span>offset<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>            num_buttons<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 101</span>         <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span>offset <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>      <span class="k2">}</span>
<span class="number"> 103</span>      <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span>num_buttons <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>
<span class="number"> 105</span>      <span class="c">// record the start and end of each button name</span>
<span class="number"> 106</span>      button_caption_start <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k3">*</span>button_caption_start<span class="k2">)</span><span class="k3">*</span>num_buttons<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 107</span>      button_caption_end <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k3">*</span>button_caption_end<span class="k2">)</span><span class="k3">*</span>num_buttons<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>button_caption_start <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span>button_caption_end<span class="k2">)</span>
<span class="number"> 109</span>      <span class="k2">{</span>
<span class="number"> 110</span>          <span class="c">// failed to allocate memory for at least one of the arrays</span>
<span class="number"> 111</span>          <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>button_caption_start<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>          <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>button_caption_end<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>          <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 114</span>      <span class="k2">}</span>
<span class="number"> 115</span>
<span class="number"> 116</span>      <span class="c">// record the start and end of each button name</span>
<span class="number"> 117</span>      <span class="k2">{</span>
<span class="number"> 118</span>         <span class="k1">int</span> offset <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 119</span>         num_buttons <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 120</span>         <span class="k1">do</span>
<span class="number"> 121</span>         <span class="k2">{</span>
<span class="number"> 122</span>            button_caption_start<span class="k2">[</span>num_buttons<span class="k2">]</span> <span class="k3">=</span> offset<span class="k2">;</span>
<span class="number"> 123</span>            offset <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_find_chr"><span class="a">al_ustr_find_chr</span></a><span class="k2">(</span>fd-&gt;mb_buttons, offset, <span class="s">'|'</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>            button_caption_end<span class="k2">[</span>num_buttons<span class="k2">]</span> <span class="k3">=</span> offset<span class="k2">;</span>
<span class="number"> 125</span>            <a href="http://www.allegro.cc/manual/al_ustr_next"><span class="a">al_ustr_next</span></a><span class="k2">(</span>fd-&gt;mb_buttons, <span class="k3">&amp;</span>offset<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>            num_buttons<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 127</span>         <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span>offset <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 128</span>         button_caption_end<span class="k2">[</span>num_buttons-1<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_size"><span class="a">al_ustr_size</span></a><span class="k2">(</span>fd-&gt;mb_buttons<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 129</span>      <span class="k2">}</span>
<span class="number"> 130</span>
<span class="number"> 131</span>      <span class="k2">{</span>
<span class="number"> 132</span>         <span class="c">// Note: the sizes of the buttons, and text box, and the dialog itself are currently mostly just arbitrary numbers.</span>
<span class="number"> 133</span>         <span class="c">//       Ideally these sizes should be calculated to best suit the content of the dialog.</span>
<span class="number"> 134</span>         <span class="k1">const</span> <span class="k1">short</span> button_width <span class="k3">=</span> <span class="n">50</span><span class="k2">;</span>
<span class="number"> 135</span>         <span class="k1">const</span> <span class="k1">short</span> button_height <span class="k3">=</span> <span class="n">14</span><span class="k2">;</span>
<span class="number"> 136</span>         <span class="k1">short</span> dlg_width <span class="k3">=</span> <span class="n">200</span> <span class="k3">&gt;</span> <span class="n">20</span><span class="k3">+</span>num_buttons<span class="k3">*</span><span class="k2">(</span>button_width<span class="k3">+</span><span class="n">20</span><span class="k2">)</span> ? <span class="n">200</span> <span class="k2">:</span> <span class="n">20</span><span class="k3">+</span>num_buttons<span class="k3">*</span><span class="k2">(</span>button_width<span class="k3">+</span><span class="n">20</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>         <span class="k1">short</span> dlg_height <span class="k3">=</span> <span class="n">80</span><span class="k2">;</span>
<span class="number"> 138</span>
<span class="number"> 139</span>         <span class="c">//</span>
<span class="number"> 140</span>         <span class="k1">int</span> result<span class="k2">;</span>
<span class="number"> 141</span>         <span class="k1">size_t</span> i<span class="k2">;</span> <span class="c">// generic iterator</span>
<span class="number"> 142</span>         DLGTEMPLATE<span class="k3">*</span> dlg_template<span class="k2">;</span>
<span class="number"> 143</span>         BYTE<span class="k3">*</span> buffer<span class="k2">;</span>
<span class="number"> 144</span>         <span class="k1">size_t</span> dlg_buffer_size <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 145</span>         dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="n">2</span><span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// menu and class (unused)</span>
<span class="number"> 146</span>         dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> title_size<span class="k2">;</span> <span class="c">// dialog title</span>
<span class="number"> 147</span>
<span class="number"> 148</span>         <span class="c">// text (heading and text combined)</span>
<span class="number"> 149</span>         dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span> <span class="k3">-</span> dlg_buffer_size % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">)</span> % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// align to DWORD</span>
<span class="number"> 150</span>
<span class="number"> 151</span>         <span class="c">// item data</span>
<span class="number"> 152</span>         dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGITEMTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>         dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// class</span>
<span class="number"> 154</span>         dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> text_size<span class="k2">;</span> <span class="c">// the text itself</span>
<span class="number"> 155</span>         dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// creation data</span>
<span class="number"> 156</span>
<span class="number"> 157</span>         <span class="c">// similarly for each of the buttons.</span>
<span class="number"> 158</span>         <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> num_buttons<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 159</span>         <span class="k2">{</span>
<span class="number"> 160</span>            dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span> <span class="k3">-</span> dlg_buffer_size % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">)</span> % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// align to DWORD</span>
<span class="number"> 161</span>
<span class="number"> 162</span>            <span class="c">// add the data size of this button</span>
<span class="number"> 163</span>            dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGITEMTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 164</span>            dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// class</span>
<span class="number"> 165</span>            <span class="c">// caption</span>
<span class="number"> 166</span>            <span class="k2">{</span>
<span class="number"> 167</span>                <a href="http://www.allegro.cc/manual/ALLEGRO_USTR_INFO"><span class="a">ALLEGRO_USTR_INFO</span></a> str_info<span class="k2">;</span>
<span class="number"> 168</span>                <span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> sub_string <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ref_ustr"><span class="a">al_ref_ustr</span></a><span class="k2">(</span><span class="k3">&amp;</span>str_info, fd-&gt;mb_buttons, button_caption_start<span class="k2">[</span>i<span class="k2">]</span>, button_caption_end<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>                <span class="k1">size_t</span> caption_size <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_size_utf16"><span class="a">al_ustr_size_utf16</span></a><span class="k2">(</span>sub_string<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 170</span>                dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> caption_size<span class="k2">;</span>
<span class="number"> 171</span>            <span class="k2">}</span>
<span class="number"> 172</span>            dlg_buffer_size <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// creation data</span>
<span class="number"> 173</span>         <span class="k2">}</span>
<span class="number"> 174</span>
<span class="number"> 175</span>         dlg_template <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span>dlg_buffer_size<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 176</span>         <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>dlg_template<span class="k2">)</span>
<span class="number"> 177</span>         <span class="k2">{</span>
<span class="number"> 178</span>            <span class="c">// Not enough memory. :(</span>
<span class="number"> 179</span>            <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>button_caption_start<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 180</span>            <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>button_caption_end<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 181</span>            <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 182</span>         <span class="k2">}</span>
<span class="number"> 183</span>         dlg_template-&gt;x     <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 184</span>         dlg_template-&gt;y     <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 185</span>         dlg_template-&gt;cx    <span class="k3">=</span> dlg_width<span class="k2">;</span>
<span class="number"> 186</span>         dlg_template-&gt;cy    <span class="k3">=</span> dlg_height<span class="k2">;</span>
<span class="number"> 187</span>         dlg_template-&gt;cdit  <span class="k3">=</span> <span class="n">1</span> <span class="k3">+</span> num_buttons<span class="k2">;</span> <span class="c">// components = text + number of buttons (todo + icons for warning / error etc)</span>
<span class="number"> 188</span>         dlg_template-&gt;style <span class="k3">=</span> DS_CENTER <span class="k3">|</span> DS_MODALFRAME <span class="k3">|</span> WS_CAPTION <span class="k3">|</span> WS_POPUP <span class="k3">|</span> WS_BORDER<span class="k2">;</span>
<span class="number"> 189</span>         dlg_template-&gt;dwExtendedStyle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 190</span>
<span class="number"> 191</span>         buffer <span class="k3">=</span> <span class="k2">(</span>BYTE<span class="k3">*</span><span class="k2">)</span>dlg_template<span class="k2">;</span>
<span class="number"> 192</span>         buffer <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 193</span>         <span class="k3">*</span><span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span>buffer <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// menu (none)</span>
<span class="number"> 194</span>         buffer <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>         <span class="k3">*</span><span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span>buffer <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// class (none)</span>
<span class="number"> 196</span>         buffer <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span>         <a href="http://www.allegro.cc/manual/al_ustr_encode_utf16"><span class="a">al_ustr_encode_utf16</span></a><span class="k2">(</span>fd-&gt;title, <span class="k2">(</span><span class="k1">uint16_t</span><span class="k3">*</span><span class="k2">)</span>buffer, title_size<span class="k2">)</span><span class="k2">;</span> <span class="c">// title</span>
<span class="number"> 198</span>         buffer <span class="k3">+</span><span class="k3">=</span> title_size<span class="k2">;</span>
<span class="number"> 199</span>
<span class="number"> 200</span>         <span class="c">// dialog header complete.  Now for the dialog items.</span>
<span class="number"> 201</span>         <span class="c">// First, the text.</span>
<span class="number"> 202</span>         buffer <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span> <span class="k3">-</span> <span class="k2">(</span>buffer <span class="k3">-</span> <span class="k2">(</span>BYTE<span class="k3">*</span><span class="k2">)</span>dlg_template<span class="k2">)</span> % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">)</span> % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// align to DWORD</span>
<span class="number"> 203</span>         <span class="k2">{</span>
<span class="number"> 204</span>            DLGITEMTEMPLATE<span class="k3">*</span> item <span class="k3">=</span> <span class="k2">(</span>DLGITEMTEMPLATE<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 205</span>            item-&gt;dwExtendedStyle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 206</span>            item-&gt;style <span class="k3">=</span> WS_CHILD <span class="k3">|</span> WS_VISIBLE<span class="k2">;</span>
<span class="number"> 207</span>            item-&gt;x     <span class="k3">=</span> <span class="n">7</span><span class="k2">;</span>
<span class="number"> 208</span>            item-&gt;y     <span class="k3">=</span> <span class="n">7</span><span class="k2">;</span>
<span class="number"> 209</span>            item-&gt;cx    <span class="k3">=</span> dlg_width <span class="k3">-</span> <span class="n">14</span><span class="k2">;</span>
<span class="number"> 210</span>            item-&gt;cy    <span class="k3">=</span> dlg_height-7-button_height-7<span class="k2">;</span>
<span class="number"> 211</span>            item-&gt;id    <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 212</span>         <span class="k2">}</span>
<span class="number"> 213</span>         buffer <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGITEMTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 214</span>
<span class="number"> 215</span>         <span class="k3">*</span><span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span>buffer <span class="k3">=</span> <span class="n">0xFFFF</span><span class="k2">;</span> <span class="c">// pre-defined type to follow</span>
<span class="number"> 216</span>         <span class="k3">*</span><span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>buffer<span class="k3">+</span><span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0x0082</span><span class="k2">;</span> <span class="c">// 'static'</span>
<span class="number"> 217</span>         buffer <span class="k3">+</span><span class="k3">=</span> <span class="n">2</span><span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 218</span>
<span class="number"> 219</span>         <a href="http://www.allegro.cc/manual/al_ustr_encode_utf16"><span class="a">al_ustr_encode_utf16</span></a><span class="k2">(</span>fd-&gt;mb_heading, <span class="k2">(</span><span class="k1">uint16_t</span><span class="k3">*</span><span class="k2">)</span>buffer, text_size<span class="k2">)</span><span class="k2">;</span> <span class="c">// text body</span>
<span class="number"> 220</span>         buffer <span class="k3">+</span><span class="k3">=</span> text_size<span class="k2">;</span>
<span class="number"> 221</span>         <span class="k3">*</span><span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span>buffer <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// creation data (whatever that means - we don't need it)</span>
<span class="number"> 222</span>         buffer <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 223</span>
<span class="number"> 224</span>         <span class="c">// Next, each of the buttons.</span>
<span class="number"> 225</span>         <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> num_buttons<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 226</span>         <span class="k2">{</span>
<span class="number"> 227</span>            buffer <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span> <span class="k3">-</span> <span class="k2">(</span>buffer <span class="k3">-</span> <span class="k2">(</span>BYTE<span class="k3">*</span><span class="k2">)</span>dlg_template<span class="k2">)</span> % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">)</span> % <span class="k1">sizeof</span><span class="k2">(</span>DWORD<span class="k2">)</span><span class="k2">;</span> <span class="c">// align to DWORD</span>
<span class="number"> 228</span>            <span class="k2">{</span>
<span class="number"> 229</span>                DLGITEMTEMPLATE<span class="k3">*</span> item <span class="k3">=</span> <span class="k2">(</span>DLGITEMTEMPLATE<span class="k3">*</span><span class="k2">)</span>buffer<span class="k2">;</span>
<span class="number"> 230</span>                item-&gt;dwExtendedStyle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 231</span>                item-&gt;style <span class="k3">=</span> WS_CHILD <span class="k3">|</span> WS_VISIBLE <span class="k3">|</span> WS_TABSTOP <span class="k3">|</span> BS_DEFPUSHBUTTON <span class="k3">|</span> <span class="k2">(</span>i <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> ? WS_GROUP <span class="k2">:</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 232</span>                item-&gt;x     <span class="k3">=</span> dlg_width <span class="k3">-</span> <span class="k2">(</span>num_buttons <span class="k3">-</span> i<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span>button_width<span class="k3">+</span><span class="n">20</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 233</span>                item-&gt;y     <span class="k3">=</span> dlg_height <span class="k3">-</span> button_height <span class="k3">-</span> <span class="n">7</span><span class="k2">;</span>
<span class="number"> 234</span>                item-&gt;cx    <span class="k3">=</span> button_width<span class="k2">;</span>
<span class="number"> 235</span>                item-&gt;cy    <span class="k3">=</span> button_height<span class="k2">;</span>
<span class="number"> 236</span>                item-&gt;id    <span class="k3">=</span> <span class="n">1000</span> <span class="k3">+</span> i <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 237</span>                <span class="c">// Note: item id will determine dialog return value. See _al_winAPI_DlgProc.</span>
<span class="number"> 238</span>            <span class="k2">}</span>
<span class="number"> 239</span>            buffer <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>DLGITEMTEMPLATE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 240</span>
<span class="number"> 241</span>            <span class="k3">*</span><span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span>buffer <span class="k3">=</span> <span class="n">0xFFFF</span><span class="k2">;</span> <span class="c">// pre-defined type to follow</span>
<span class="number"> 242</span>            <span class="k3">*</span><span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>buffer<span class="k3">+</span><span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0x0080</span><span class="k2">;</span> <span class="c">// 'button'</span>
<span class="number"> 243</span>            buffer <span class="k3">+</span><span class="k3">=</span> <span class="n">2</span><span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 244</span>
<span class="number"> 245</span>            <span class="c">// caption</span>
<span class="number"> 246</span>            <span class="k2">{</span>
<span class="number"> 247</span>                <a href="http://www.allegro.cc/manual/ALLEGRO_USTR_INFO"><span class="a">ALLEGRO_USTR_INFO</span></a> str_info<span class="k2">;</span>
<span class="number"> 248</span>                <span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> sub_string <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ref_ustr"><span class="a">al_ref_ustr</span></a><span class="k2">(</span><span class="k3">&amp;</span>str_info, fd-&gt;mb_buttons, button_caption_start<span class="k2">[</span>i<span class="k2">]</span>, button_caption_end<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 249</span>                <span class="k1">size_t</span> caption_size <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_size_utf16"><span class="a">al_ustr_size_utf16</span></a><span class="k2">(</span>sub_string<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 250</span>
<span class="number"> 251</span>                <a href="http://www.allegro.cc/manual/al_ustr_encode_utf16"><span class="a">al_ustr_encode_utf16</span></a><span class="k2">(</span>sub_string, <span class="k2">(</span><span class="k1">uint16_t</span><span class="k3">*</span><span class="k2">)</span>buffer, caption_size<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 252</span>                buffer <span class="k3">+</span><span class="k3">=</span> caption_size<span class="k2">;</span>
<span class="number"> 253</span>            <span class="k2">}</span>
<span class="number"> 254</span>            <span class="k3">*</span><span class="k2">(</span>WORD<span class="k3">*</span><span class="k2">)</span>buffer <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 255</span>            buffer <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>WORD<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 256</span>         <span class="k2">}</span>
<span class="number"> 257</span>         <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span>buffer <span class="k3">-</span> <span class="k2">(</span>BYTE<span class="k3">*</span><span class="k2">)</span>dlg_template <span class="k3">=</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>dlg_buffer_size<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 258</span>         result <span class="k3">=</span> DialogBoxIndirect<span class="k2">(</span><span class="n">0</span>, dlg_template, <a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span>display<span class="k2">)</span>, _al_winAPI_DlgProc<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 259</span>         <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>dlg_template<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 260</span>         <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>button_caption_start<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 261</span>         <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>button_caption_end<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 262</span>         <span class="k1">return</span> result <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span> ? <span class="n">0</span> <span class="k2">:</span> result<span class="k2">;</span>
<span class="number"> 263</span>      <span class="k2">}</span>
<span class="number"> 264</span>   <span class="k2">}</span>
<span class="number"> 265</span><span class="k2">}</span>
</div></div><p>

Unless someone wants to make a better version, I think that this version should be put into Allegro so that at least then the function will do what the manual says it should do. The previous Allegro functionality for the cases without custom buttons is unchanged, so this ugliness wouldn&#39;t be a regression.</p><p>[edit]<br />In case anyone is interested in fixing the font problem, I think <a href="http://stackoverflow.com/questions/6057239/which-font-is-the-default-for-mfc-dialog-controls">this</a> is a good place to start. If no one else wants to look at it, I may tackle it again at some point in the future; but for the time being I&#39;m just going to leave it alone. -- I only wanted to use these dialog boxes for debugging anyway...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Karadoc ~~)</author>
		<pubDate>Mon, 08 Oct 2012 12:47:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967687#target">Karadoc ~~</a> said:</div><div class="quote"><p> /* Note: the message box code cannot assume that Allegro is installed. */
</p></div></div><p>That&#39;s a PITA, I guess.<br />Sound effect:<br /><a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms680356(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/ms680356(v=vs.85).aspx</a><br />I think maybe it would be most structured to first have a function which determines whether a standard dialog can be used, and then calls either a &quot;normal&quot; message box or &quot;constructs&quot; a dialog.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (weapon_S)</author>
		<pubDate>Wed, 10 Oct 2012 11:43:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>From what I can tell, if there&#39;s only three buttons you can just change their labels...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Luiji99)</author>
		<pubDate>Thu, 11 Oct 2012 18:46:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/611173/967931#target">Luiji99</a> said:</div><div class="quote"><p>From what I can tell, if there&#39;s only three buttons you can just change their labels...</p></div></div><p> I have no idea what you are trying to communicate by this statement.</p><p>Only three buttons where? Change what labels, and how, and for what goal?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Karadoc ~~)</author>
		<pubDate>Thu, 11 Oct 2012 19:03:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you had three or less buttons, if the information I&#39;ve gathered is correct, you can use the built-in message box and just change the button labels. I&#39;m not exactly sure how, but it seems there&#39;s something more than <span class="source-code">MessageBox</span>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Luiji99)</author>
		<pubDate>Thu, 11 Oct 2012 21:57:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I see. Well, that would be good, but I don&#39;t think there is any way to change the button names (or anything else) on any of the standard dialogs. And even if that can be done, we&#39;d still be lacking an implementation for &gt; 3 buttons. Anyway, let us know if you work something out.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Karadoc ~~)</author>
		<pubDate>Fri, 12 Oct 2012 05:13:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I found some information. It&#39;s not exactly what I recalled, but it looks simpler than what you&#39;ve been doing so far. It essentially has you intercept the messages that normally go to a message box and just customize it. <a href="http://www.catch22.net/tuts/custom-messagebox">http://www.catch22.net/tuts/custom-messagebox</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Luiji99)</author>
		<pubDate>Fri, 12 Oct 2012 08:42:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>By the sounds of that, it is possible to intercept a standard message box during the creation process, and then use whatever API functions are available to edit pre-existing windows. Maybe that would be easier, but it sounds a bit sketchy to me. I&#39;m sure that&#39;s not how the API is meant to be used...</p><p>In any case, even with that idea, I still don&#39;t know how to rename buttons and stuff - I&#39;d have to learn about some new API functions and so on I suppose. Also, as far as I can tell, the customization of the window has to be done inside the callback function - and so we need to somehow get our data into that callback function. The only ways that come to mind are boost::bind (ie. bind our data with a generalized function to create a unique callback function every time we want to make a custom message box), or global variables (store the data somewhere global so that the callback function can use it). -- Neither of those options sound very attractive to me.</p><p>So.. if/when I try to beautify the stuff I&#39;ve already done, I think I&#39;ll just build on the current implementation rather than trying to use these hook/callback tricks. -- But I wouldn&#39;t discourage someone else from trying that other stuff if they thought it would turn out better.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Karadoc ~~)</author>
		<pubDate>Sat, 13 Oct 2012 07:39:15 +0000</pubDate>
	</item>
</rss>
