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

<channel>
	<title>Last Ray of Hope &#187; Win32</title>
	<atom:link href="http://www.lastrayofhope.com/tag/win32/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lastrayofhope.com</link>
	<description>Home of Kaluriel Hargrove</description>
	<lastBuildDate>Thu, 02 Feb 2012 00:21:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>AGT: Using XBox360 Pad with XInput</title>
		<link>http://www.lastrayofhope.com/2008/01/07/agt-using-xbox360-pad-with-xinput/</link>
		<comments>http://www.lastrayofhope.com/2008/01/07/agt-using-xbox360-pad-with-xinput/#comments</comments>
		<pubDate>Mon, 07 Jan 2008 19:12:22 +0000</pubDate>
		<dc:creator>Kaluriel</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Legend of Bob]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[Input]]></category>
		<category><![CDATA[Win32]]></category>
		<category><![CDATA[XBox]]></category>

		<guid isPermaLink="false">http://www.lastrayofhope.com/?p=2193</guid>
		<description><![CDATA[For my AGT assignment I've decided to use a XBox 360 pad for input since I found out it can be used in Windows. To do this requires use of the XInput library that comes with DirectX. So after setting up my input manager which automatically updates all input devices (there can be a maximum [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lastrayofhope.com/wp-content/uploads/2008/01/800px-xbox_360_controller.jpg"><img class="alignleft size-medium wp-image-2256" title="XBox 360 Controller" src="http://www.lastrayofhope.com/wp-content/uploads/2008/01/800px-xbox_360_controller-300x214.jpg" alt="XBox 360 Controller" width="180" height="128" /></a>For my AGT assignment I've decided to use a XBox 360 pad for input since I found out it can be used in Windows. To do this requires use of the XInput library that comes with DirectX.</p>
<p>So after setting up my input manager which automatically updates all input devices (there can be a maximum of four pad devices, defined by the variable XUSER_MAX_COUNT in the XInput header), I began work on the controller class to manage the state information about the pad.</p>
<p>The following header is my source for this class, when a controller is created, an id is passed to it that is used as the pad index for XInput.</p>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="cpp" style="font-family:monospace;"><span class="co2">#ifndef CONTROLLER_H_INCLUDED</span>
<span class="co2">#define CONTROLLER_H_INCLUDED</span>
&nbsp;
<span class="co1">// --- [ libraries ] ------------------------------------------</span>
<span class="co2">#pragma comment(lib, &quot;XInput.lib&quot;)</span>
&nbsp;
<span class="co1">// --- [ includes ] -------------------------------------------</span>
<span class="co2">#include &lt;windows.h&gt;</span>
<span class="co2">#include &lt;XInput.h&gt;</span>
&nbsp;
<span class="co1">// --- [ class ] ----------------------------------------------</span>
<span class="kw2">class</span> Controller
<span class="br0">&#123;</span>
	<span class="co1">//</span>
	<span class="kw2">public</span><span class="sy4">:</span>
		<span class="kw2">enum</span> Button
		<span class="br0">&#123;</span>
			kButton_DPad_Up <span class="sy1">=</span> 0,
			kButton_DPad_Down,
			kButton_DPad_Left,
			kButton_DPad_Right,
			kButton_Start,
			kButton_Back,
			kButton_Thumb_Left,
			kButton_Thumb_Right,
			kButton_Shoulder_Left,
			kButton_Shoulder_Right,
			kButton_X,
			kButton_Y,
			kButton_A,
			kButton_B
		<span class="br0">&#125;</span>
&nbsp;
		<span class="kw2">enum</span> AxisType
		<span class="br0">&#123;</span>
			kAxis_Left <span class="sy1">=</span> 0,
			kAxis_Right,
			kNumAxisTypes
		<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
		<span class="kw2">enum</span> MotorType
		<span class="br0">&#123;</span>
			kMotor_Left <span class="sy1">=</span> 0,
			kMotor_Right,
			kNumMotorTypes
		<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
		<span class="kw2">enum</span> TriggerType
		<span class="br0">&#123;</span>
			kTrigger_Left <span class="sy1">=</span> 0,
			kTrigger_Right,
			kNumTriggerTypes
		<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
		<span class="kw4">struct</span> AxisData
		<span class="br0">&#123;</span>
			<span class="kw4">double</span> x<span class="sy4">;</span>
			<span class="kw4">double</span> y<span class="sy4">;</span>
		<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
	<span class="co1">// Attributes</span>
	<span class="kw2">private</span><span class="sy4">:</span>
		<span class="kw4">const</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> m_id<span class="sy4">;</span>
		<span class="kw4">bool</span> m_isConnected<span class="sy4">;</span>
&nbsp;
		<span class="kw4">unsigned</span> <span class="kw4">int</span> m_currentButtons<span class="sy4">;</span>
		<span class="kw4">unsigned</span> <span class="kw4">int</span> m_previousButtons<span class="sy4">;</span>
&nbsp;
		AxisData m_axis<span class="br0">&#91;</span>kNumAxisTypes<span class="br0">&#93;</span><span class="sy4">;</span>
		<span class="kw4">float</span> m_triggers<span class="br0">&#91;</span>kNumTriggerTypes<span class="br0">&#93;</span><span class="sy4">;</span>
		<span class="kw4">double</span> m_motorSpeed<span class="br0">&#91;</span>kNumMotorTypes<span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp;
	<span class="co1">// Functions</span>
	<span class="kw2">public</span><span class="sy4">:</span>
		<span class="co1">// Constructor</span>
		Controller<span class="br0">&#40;</span> <span class="kw4">const</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> inControllerId <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
		<span class="co1">// Check button has just been pressed</span>
		<span class="kw4">bool</span> IsButtonDown<span class="br0">&#40;</span> <span class="kw4">const</span> Button inButton <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> <span class="br0">&#40;</span> ~m_previousButtons <span class="sy3">&amp;</span> m_currentButtons <span class="br0">&#41;</span> <span class="sy3">&amp;</span> <span class="br0">&#40;</span> 1 <span class="sy1">&lt;&lt;</span> inButton <span class="br0">&#41;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Check button has just been released</span>
		<span class="kw4">bool</span> IsButtonUp<span class="br0">&#40;</span> <span class="kw4">const</span> Button inButton <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> <span class="br0">&#40;</span> m_previousButtons <span class="sy3">&amp;</span> ~m_currentButtons <span class="br0">&#41;</span> <span class="sy3">&amp;</span> <span class="br0">&#40;</span> 1 <span class="sy1">&lt;&lt;</span> inButton <span class="br0">&#41;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Check button is pressed</span>
		<span class="kw4">bool</span> IsButtonPressed<span class="br0">&#40;</span> <span class="kw4">const</span> Button inButton <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> m_currentButtons <span class="sy3">&amp;</span> <span class="br0">&#40;</span> 1 <span class="sy1">&lt;&lt;</span> inButton <span class="br0">&#41;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Get Thumb Axis</span>
		<span class="kw4">void</span> GetAxis<span class="br0">&#40;</span> <span class="kw4">const</span> AxisType inType, AxisData <span class="sy3">&amp;</span> outData <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			outData <span class="sy1">=</span> m_axis<span class="br0">&#91;</span>inType<span class="br0">&#93;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Get Trigger Values</span>
		<span class="kw4">float</span> GetTrigger<span class="br0">&#40;</span> <span class="kw4">const</span> TriggerType inType <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> m_triggers<span class="br0">&#91;</span>inType<span class="br0">&#93;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Get Motor Speed</span>
		<span class="kw4">double</span> GetMotorSpeed<span class="br0">&#40;</span> <span class="kw4">const</span> MotorType inType <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> m_motorSpeed<span class="br0">&#91;</span>inType<span class="br0">&#93;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Set MotorSpeed</span>
		<span class="kw4">void</span> SetMotorSpeed<span class="br0">&#40;</span> <span class="kw4">const</span> MotorType inType, <span class="kw4">const</span> <span class="kw4">double</span> inValue <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
		<span class="co1">// Check Controller is Connected</span>
		<span class="kw4">bool</span> IsConnected<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> m_isConnected<span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Get Controller Id</span>
		<span class="kw4">unsigned</span> <span class="kw4">int</span> GetId<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> m_id<span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Update</span>
		<span class="kw4">void</span> Update<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
	<span class="kw2">private</span><span class="sy4">:</span>
		<span class="co1">// Update an Axis</span>
		<span class="kw4">void</span> UpdateAxis<span class="br0">&#40;</span> <span class="kw4">const</span> AxisType inType, <span class="kw4">const</span> <span class="kw4">short</span> inX, <span class="kw4">const</span> <span class="kw4">short</span> inY <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
		<span class="co1">// Update a Trigger</span>
		<span class="kw4">void</span> UpdateTrigger<span class="br0">&#40;</span> <span class="kw4">const</span> TriggerType inType, <span class="kw4">const</span> <span class="kw4">unsigned</span> <span class="kw4">char</span> inValue <span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></div></div>
<p>&nbsp;</p>
<p>All values that are variable are values between 0.0 and 1.0 in the case of triggers and motor speeds, and -1.0 and 1.0 in the case of axis components. You may have noticed that there is only one function that can change values explicitly, <em>SetMotorSpeed()</em>, the only other way to change values is direct input from the controller, so <em>Update()</em> must be called every frame.</p>
<p>You may notice that the division used to normalise the speed is 0x7FFF instead of 0xFFFF, this is because the number is signed, not unsigned like the other values we normalise.</p>
<p>Calling <em>Update()</em> more than once will break the <em>IsButtonUp()</em> and <em>IsButtonDown()</em> calls to always return false since they are based on the previous button states gotten by an update call.</p>
<p>The following is the source code for the controller class source file.</p>
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="cpp" style="font-family:monospace;"><span class="co1">// --- [ includes ] -------------------------------------------</span>
<span class="co2">#include &quot;Controller.h&quot;</span>
&nbsp;
<span class="co1">// --- [ constructor / destructor ] ---------------------------</span>
Controller<span class="sy4">::</span><span class="me2">Controller</span><span class="br0">&#40;</span> <span class="kw4">const</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> inControllerId <span class="br0">&#41;</span>
	<span class="sy4">:</span>
	m_id<span class="br0">&#40;</span> inControllerId <span class="br0">&#41;</span>,
	m_isConnected<span class="br0">&#40;</span> <span class="kw2">false</span> <span class="br0">&#41;</span>,
	m_currentButtons<span class="br0">&#40;</span> 0 <span class="br0">&#41;</span>,
	m_previousButtons<span class="br0">&#40;</span> 0 <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	<span class="kw1">for</span><span class="br0">&#40;</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> kNumAxisTypes<span class="sy4">;</span> <span class="sy2">++</span>i <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_axis<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">x</span> <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy4">;</span>
		m_axis<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">y</span> <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw1">for</span><span class="br0">&#40;</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> kNumTriggerTypes<span class="sy4">;</span> <span class="sy2">++</span>i <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_triggers<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="nu17">0.0f</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw1">for</span><span class="br0">&#40;</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> kNumMotorTypes<span class="sy4">;</span> <span class="sy2">++</span>i <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_motorSpeed<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="nu17">0.0f</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="co1">// --- [ functions ] ------------------------------------------</span>
<span class="kw4">void</span> Controller<span class="sy4">::</span><span class="me2">Update</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	XINPUT_STATE state<span class="sy4">;</span>
&nbsp;
	<span class="co1">// Get new controller state and check if it is connected</span>
	m_isConnected <span class="sy1">=</span> XInputGetState<span class="br0">&#40;</span> m_id, <span class="sy3">&amp;</span>state <span class="br0">&#41;</span> <span class="sy1">==</span> ERROR_SUCCESS<span class="sy4">;</span>
	<span class="kw1">if</span><span class="br0">&#40;</span> <span class="sy3">!</span>m_isConnected <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		<span class="kw1">return</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="co1">// Set New Axis Positions and normalise</span>
	UpdateAxis<span class="br0">&#40;</span> kAxis_Left, state.<span class="me1">Gamepad</span>.<span class="me1">sThumbLX</span>, state.<span class="me1">Gamepad</span>.<span class="me1">sThumbLY</span> <span class="br0">&#41;</span><span class="sy4">;</span>
	UpdateAxis<span class="br0">&#40;</span> kAxis_Right, state.<span class="me1">Gamepad</span>.<span class="me1">sThumbRX</span>, state.<span class="me1">Gamepad</span>.<span class="me1">sThumbRY</span> <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
	<span class="co1">// Set New Trigger Values and normalise</span>
	UpdateTrigger<span class="br0">&#40;</span> kTrigger_Left, state.<span class="me1">Gamepad</span>.<span class="me1">bLeftTrigger</span> <span class="br0">&#41;</span><span class="sy4">;</span>
	UpdateTrigger<span class="br0">&#40;</span> kTrigger_Right, state.<span class="me1">Gamepad</span>.<span class="me1">bRightTrigger</span> <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
	<span class="co1">// Set previous button states to m_currentButtons, and current button</span>
	<span class="co1">// state to new button state.</span>
	m_previousButtons <span class="sy1">=</span> m_currentButtons<span class="sy4">;</span>
	m_currentButtons <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">unsigned</span> <span class="kw4">int</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> state.<span class="me1">Gamepad</span>.<span class="me1">wButtons</span> <span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">void</span> Controller<span class="sy4">::</span><span class="me2">SetMotorSpeed</span><span class="br0">&#40;</span> <span class="kw4">const</span> MotorType inType, <span class="kw4">const</span> <span class="kw4">double</span> inValue <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	XINPUT_VIBRATION vibration<span class="sy4">;</span>
&nbsp;
	m_motorSpeed<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="sy1">=</span> inValue<span class="sy4">;</span>
&nbsp;
	vibration.<span class="me1">wLeftMotorSpeed</span> <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span>WORD<span class="sy1">&gt;</span><span class="br0">&#40;</span> 0xffff <span class="sy2">*</span> m_motorSpeed<span class="br0">&#91;</span>kMotor_Left<span class="br0">&#93;</span> <span class="br0">&#41;</span><span class="sy4">;</span>
	vibration.<span class="me1">wRightMotorSpeed</span> <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span>WORD<span class="sy1">&gt;</span><span class="br0">&#40;</span> 0xffff <span class="sy2">*</span> m_motorSpeed<span class="br0">&#91;</span>kMotor_Right<span class="br0">&#93;</span> <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
	XInputSetState<span class="br0">&#40;</span> m_id, <span class="sy3">&amp;</span>vibration <span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">void</span> Controller<span class="sy4">::</span><span class="me2">UpdateAxis</span><span class="br0">&#40;</span> <span class="kw4">const</span> AxisType inType, <span class="kw4">const</span> <span class="kw4">short</span> inX, <span class="kw4">const</span> <span class="kw4">short</span> inY <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	<span class="kw4">const</span> <span class="kw4">short</span> kAxisDeadzones<span class="br0">&#91;</span>kNumAxisTypes<span class="br0">&#93;</span> <span class="sy1">=</span>
	<span class="br0">&#123;</span>
	XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE,
	XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE
	<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
	m_axis<span class="br0">&#91;</span>inType<span class="br0">&#93;</span>.<span class="me1">x</span> <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy4">;</span>
	m_axis<span class="br0">&#91;</span>inType<span class="br0">&#93;</span>.<span class="me1">y</span> <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy4">;</span>
&nbsp;
	<span class="kw1">if</span><span class="br0">&#40;</span> inX <span class="sy1">&lt;</span> <span class="sy2">-</span>kAxisDeadzones<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="sy3">||</span> inX <span class="sy1">&gt;</span> kAxisDeadzones<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_axis<span class="br0">&#91;</span>inType<span class="br0">&#93;</span>.<span class="me1">x</span> <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">double</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> state.<span class="me1">Gamepad</span>.<span class="me1">sThumbLX</span> <span class="br0">&#41;</span> <span class="sy2">/</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">double</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> 0x7fff <span class="br0">&#41;</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw1">if</span><span class="br0">&#40;</span> inY <span class="sy1">&lt;</span> <span class="sy2">-</span>kAxisDeadzones<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="sy3">||</span> inY <span class="sy1">&gt;</span> kAxisDeadzones<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_axis<span class="br0">&#91;</span>inType<span class="br0">&#93;</span>.<span class="me1">y</span> <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">double</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> state.<span class="me1">Gamepad</span>.<span class="me1">sThumbLY</span> <span class="br0">&#41;</span> <span class="sy2">/</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">double</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> 0x7fff <span class="br0">&#41;</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">void</span> Controller<span class="sy4">::</span><span class="me2">UpdateTrigger</span><span class="br0">&#40;</span> <span class="kw4">const</span> TriggerType inType, <span class="kw4">const</span> <span class="kw4">unsigned</span> <span class="kw4">char</span> inValue <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	m_triggers<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="nu17">0.0f</span><span class="sy4">;</span>
&nbsp;
	<span class="kw1">if</span><span class="br0">&#40;</span> inValue <span class="sy1">&gt;</span> XINPUT_GAMEPAD_TRIGGER_THRESHOLD <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_triggers<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">float</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> inValue <span class="br0">&#41;</span> <span class="sy2">/</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">float</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> 0xff <span class="br0">&#41;</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>
<p>&nbsp;</p>
<p>And that is all that is required for getting state information from a XBox 360 pad.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lastrayofhope.com/2008/01/07/agt-using-xbox360-pad-with-xinput/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple C++ DLL for Visual Basic 6.0</title>
		<link>http://www.lastrayofhope.com/2003/08/02/simple-c-dll-for-visual-basic/</link>
		<comments>http://www.lastrayofhope.com/2003/08/02/simple-c-dll-for-visual-basic/#comments</comments>
		<pubDate>Sat, 02 Aug 2003 07:25:14 +0000</pubDate>
		<dc:creator>Kaluriel</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[DLL]]></category>
		<category><![CDATA[Win32]]></category>

		<guid isPermaLink="false">http://www.lastrayofhope.com/?p=1350</guid>
		<description><![CDATA[For that past few month or so I have been learning to make DLLs to use with Visual Basic, and in the process learning C++. The benefits of using C++ over Visual Basic is that division and multiplication can be up to 28x faster than the default Visual Basic method. So I decided to write [...]]]></description>
			<content:encoded><![CDATA[<p>For that past few month or so I have been learning to make DLLs to use with Visual Basic, and in the process learning C++. The benefits of using C++ over Visual Basic is that division and multiplication can be up to 28x faster than the default Visual Basic method.</p>
<p>So I decided to write up a tutorial for others to make their own Visual Basic DLLs. First of all you need to understand the type differences between Visual Basic and Visual C++. The following list has the Visual Basic variable types on the left, and their C++ variable type equivalents on the right.</p>
<blockquote><p>Integer &gt; short</p>
<p>Long &gt; long</p>
<p>Single &gt; float</p>
<p>Double &gt; double</p>
<p>Byte &gt; unsigned char</p>
<p>String &gt; BSTR</p></blockquote>
<p>A BStr is a special COM object, which starts with a 4 byte integer for the length, and ends with two terminal string characters. It should also be noted that C++ is case sensitive, so the variable types on the right are how they should be in C++.</p>
<p>Now to create the DLL, open up a copy of Microsoft Visual C++ and select "Win32 Dynamic Link Library" for a new project and call it "Example". An "Empty Application" will do for what we're making when the "AppWizard" pops up.</p>
<p>With this new project created, goto the Project menu and add a new file, we need a new source file, I called mine "Main.cpp" but anything will do. Fill the new source file with the following source code.</p>
<div id="wpshdo_3" class="wp-synhighlighter-outer"><div id="wpshdt_3" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_3"></a><a id="wpshat_3" class="wp-synhighlighter-title" href="#codesyntax_3"  onClick="javascript:wpsh_toggleBlock(3)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_3" onClick="javascript:wpsh_code(3)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_3" onClick="javascript:wpsh_print(3)" title="Print code"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_3" class="wp-synhighlighter-inner" style="display: block;"><pre class="c" style="font-family:monospace;"><span class="co1">//</span>
<span class="co1">//</span>
<span class="co2">#include &lt;windows.h&gt;</span>
&nbsp;
<span class="co1">//</span>
<span class="co1">//</span>
<span class="kw4">long</span> _stdcall Multiply<span class="br0">&#40;</span> <span class="kw4">long</span> A<span class="sy0">,</span> <span class="kw4">long</span> B <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	<span class="kw1">return</span> A <span class="sy0">*</span> B<span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="co1">//</span>
<span class="co1">//</span>
<span class="kw4">long</span> _stdcall Divide<span class="br0">&#40;</span> <span class="kw4">long</span> A<span class="sy0">,</span> <span class="kw4">long</span> B <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	<span class="kw1">return</span> A <span class="sy0">/</span> B<span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="co1">//</span>
<span class="co1">//</span>
<span class="kw4">long</span> _stdcall SumOf<span class="br0">&#40;</span> <span class="kw4">long</span> A<span class="sy0">,</span> <span class="kw4">long</span> B <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	<span class="kw1">return</span> A <span class="sy0">+</span> B<span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>
<p>&nbsp;</p>
<p>We include the Windows header since we may want to use APIs and because the BSTR is defined in there. The "_stdcall" is used to tell the compiler we want the parameters of the function pushed onto the stack in left to right order.</p>
<p>Now add a new module definition file to the Visual C++ project, call it "<em>Example.def</em>". This file will let the compiler know what functions we want available to external programs, so after LIBRARY we put the name of our DLL, and under the EXPORTS section we put our available functions, "Multiply", "Divide" and "SumOf".</p>
<div id="wpshdo_4" class="wp-synhighlighter-outer"><div id="wpshdt_4" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_4"></a><a id="wpshat_4" class="wp-synhighlighter-title" href="#codesyntax_4"  onClick="javascript:wpsh_toggleBlock(4)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_4" onClick="javascript:wpsh_code(4)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_print(4)" title="Print code"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_4" class="wp-synhighlighter-inner" style="display: block;"><pre class="text" style="font-family:monospace;">LIBRARY &quot;Example&quot;
EXPORTS
Multiply
Divide
SumOf</pre></div></div>
<p>&nbsp;</p>
<p>Finally in your Visual Basic project in the Form_Load() function, we can declare the functions within our DLL and make a call to them. Below shows can example of using the Multiply() function and then outputting it using a message box.</p>
<div id="wpshdo_5" class="wp-synhighlighter-outer"><div id="wpshdt_5" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_5"></a><a id="wpshat_5" class="wp-synhighlighter-title" href="#codesyntax_5"  onClick="javascript:wpsh_toggleBlock(5)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_5" onClick="javascript:wpsh_code(5)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_5" onClick="javascript:wpsh_print(5)" title="Print code"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_5" class="wp-synhighlighter-inner" style="display: block;"><pre class="vb" style="font-family:monospace;"><span class="kw1">Private</span> <span class="kw1">Declare</span> <span class="kw1">Function</span> Multiply <span class="kw1">Lib</span> <span class="st0">&quot;Example&quot;</span> (<span class="kw1">ByVal</span> A <span class="kw1">As</span> <span class="kw1">Long</span>, <span class="kw1">ByVal</span> B <span class="kw1">As</span> <span class="kw1">Long</span>) <span class="kw1">As</span> <span class="kw1">Long</span>
<span class="kw1">Private</span> <span class="kw1">Declare</span> <span class="kw1">Function</span> Divide <span class="kw1">Lib</span> <span class="st0">&quot;Example&quot;</span> (<span class="kw1">ByVal</span> A <span class="kw1">As</span> <span class="kw1">Long</span>, <span class="kw1">ByVal</span> B <span class="kw1">As</span> <span class="kw1">Long</span>) <span class="kw1">As</span> <span class="kw1">Long</span>
<span class="kw1">Private</span> <span class="kw1">Declare</span> <span class="kw1">Function</span> SumOf <span class="kw1">Lib</span> <span class="st0">&quot;Example&quot;</span> (<span class="kw1">ByVal</span> A <span class="kw1">As</span> <span class="kw1">Long</span>, <span class="kw1">ByVal</span> B <span class="kw1">As</span> <span class="kw1">Long</span>) <span class="kw1">As</span> <span class="kw1">Long</span>
&nbsp;
<span class="kw1">Private</span> <span class="kw1">Sub</span> Form_Load()
	<span class="kw1">Dim</span> i <span class="kw1">As</span> <span class="kw1">Long</span>
	i = Multiply(2, 6)
	MsgBox i, vkOkOnly, App.Title
<span class="kw1">End</span> <span class="kw1">Sub</span></pre></div></div>
<p>&nbsp;</p>
<p>If all goes correctly, a message box should appear with the value "12" shown.</p>
<p>That's all for this tutorial, I hope you found it useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lastrayofhope.com/2003/08/02/simple-c-dll-for-visual-basic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

