OSDN Git Service

最初のコミット
[shooting3/s2001.git] / project / InputImpl.html
1 <html><head>
2 <title>InputImpl.cpp</title>
3 </head>
4 <body><pre>
5 <p>InputImpl.cpp</p>
6 <font color="green">//@STATE=\8dì\90¬\92\86</font>
7 <font color="green">//@DESCRIPTION ---------------------------------------------------------------</font>
8 <font color="green">//  InputImpl \92\8a\8fÛ\83N\83\89\83X\82Ì\8bï\8fÛ\81i\8eÀ\91\95\81j\83N\83\89\83X</font>
9 <font color="green">//  \83T\83\93\83v\83\8b\82©\82ç\83p\83N\83\8a\82Ü\82­\82Á\82Ä\82Ü\82·\81B    </font>
10 <font color="green">//  \97\9a\97ð:</font>
11 <font color="green">// $Log: InputImpl.cpp,v $</font>
12 <font color="green">// Revision 1.5  2001/07/09 20:30:08  fujiwara</font>
13 <font color="green">// \97á\8aO\8f\88\97\9d\82Ì\91g\82Ý\8d\9e\82Ý</font>
14 <font color="green">//</font>
15 <font color="green">// Revision 1.4  2001/07/01 21:30:34  fujiwara</font>
16 <font color="green">// \83\81\83\82\83\8a\83\8a\81[\83N\83`\83F\83b\83N\8c©\92¼\82µ</font>
17 <font color="green">//</font>
18 <font color="green">// Revision 1.3  2001/07/01 01:03:44  fujiwara</font>
19 <font color="green">// const \82Ì\8c©\92¼\82µ</font>
20 <font color="green">// \94z\92u\83G\83f\83B\83^\82Í\93r\92\86\8co\89ß</font>
21 <font color="green">//</font>
22 <font color="green">// Revision 1.2  2001/05/29 01:12:45  fujiwara</font>
23 <font color="green">// \8eG\8b\9b\83L\83\83\83\89(\94ò\8ds\95¨\81j\82Ì\8dì\90¬\81B\94z\92u\83G\83f\83B\83^\82Ì\83o\83O\8fC\90³</font>
24 <font color="green">//</font>
25 <font color="green">// Revision 1.1  2001/05/12 01:07:33  fujiwara</font>
26 <font color="green">// \82b\82u\82r\82ð\93±\93ü\82µ\81A\83\8d\83O\95\\8e¦\82ð\92Ç\89Á</font>
27 <font color="green">//</font>
28 <font color="green">//  2001/01/29 \83\81\83\82\83\8a\81[\83\8a\81[\83N\8c\9f\8fo\97p\83\89\83C\83u\83\89\83\8a\82Ì\92Ç\89Á </font>
29 <font color="green">//@DESCRIPTION_END -----------------------------------------------------------</font>
30 <font color="green">//@AUTHOR=S.F.</font>
31 <font color="green">// Copyright (C) 2000 Satoshi Fujiwara. All Rights Reserved.</font>
32 <font color="green">///////////////////////////////////////////////////////////////////////////////</font>
33 <font color="blue">#pragma</font> warning( disable : 4786 )   <font color="green">//STL\82Ì\8cx\8d\90\8aO\82µ</font>
34
35 <font color="green">// \83\81\83\82\83\8a\81[\83\8a\81[\83N\8c\9f\8fo\97p</font>
36 <font color="blue">#include</font> "sfdebug.h"
37
38 <font color="blue">#define</font> WIN32_LEAN_AND_MEAN
39 <font color="blue">#define</font> _WIN32_WINNT  0x0400
40 <font color="blue">#include</font> "math.h"
41 <font color="blue">#include</font> &lt;list&gt;
42 <font color="blue">#include</font> &lt;queue&gt;
43 <font color="blue">#include</font> &lt;memory&gt;
44 <font color="blue">#include</font> &lt;map&gt;
45
46 <font color="blue">#include</font> "windows.h"
47 <font color="blue">#include</font> "windowsx.h"
48 <font color="blue">#include</font> "d3d8.h"
49 <font color="blue">#include</font> "d3dx8.h"
50 <font color="blue">#include</font> "dmusici.h"
51 <font color="blue">#include</font> "dinput.h"
52 <font color="blue">#include</font> "dxerr8sf.h"
53
54 <font color="green">// PROJECT INCLUDES</font>
55 <font color="green">//</font>
56
57 <font color="blue">#include</font> "exception.h"
58 <font color="blue">#include</font> "resource.h"
59 <font color="blue">#include</font> "<font color="DarkRed">System</font>.h"
60 <font color="blue">#include</font> "Console.h"
61 <font color="blue">#include</font> "Obj.h"
62 <font color="blue">#include</font> "singleton.h"
63 <font color="blue">#include</font> "AbstractSprite.h"
64 <font color="blue">#include</font> "ConsoleImpl.h"    
65 <font color="blue">#include</font> "<font color="Brown">SoundImpl</font>.h"
66
67 <font color="blue">#ifdef</font> _DEBUG
68 <font color="blue">#define</font> new DEBUG_NEW
69 <font color="blue">#endif</font>
70
71 <font color="blue">#include</font> "<font color="Brown">InputImpl</font>.h"
72 <font color="blue">#include</font> "<font color="DarkRed">Scene</font>.h"
73 <font color="blue">#include</font> "MainApp.h"
74 <font color="blue">#include</font> "<font color="Brown">SystemImpl</font>.h"
75
76 <font color="green">//////////////////////////////////////////////////////////////////////</font>
77 <font color="green">// \8d\\92z/\8fÁ\96Å</font>
78 <font color="green">//////////////////////////////////////////////////////////////////////</font>
79
80 <font color="blue">using</font> <font color="blue">namespace</font> <font color="darkblue">sf</font>::<font color="darkblue">system</font>::<font color="darkblue">input</font>;
81
82 <font color="green">// \83f\83t\83H\83\8b\83g\83R\83\93\83X\83g\83\89\83N\83^ ---------------------------------------------------</font>
83 <font color="Brown">InputImpl</font>::InputImpl()
84 {
85
86 }
87
88 <font color="green">// \83R\83\93\83X\83g\83\89\83N\83^ -------------------------------------------------------------</font>
89 <font color="Brown">InputImpl</font>::InputImpl(HWND hwnd)
90 {
91     mHWND = hwnd;
92 <font color="green">//  initialize();       </font>
93 }
94
95 <font color="green">// \83f\83X\83g\83\89\83N\83^ ---------------------------------------------------------------</font>
96 <font color="Brown">InputImpl</font>::~InputImpl()
97 {
98     uninitialize();
99 }<font color="green">// ~InputImpl()</font>
100
101 <font color="green">// \8f\89\8aú\89» ---------------------------------------------------------------------</font>
102 <font color="blue">void</font> <font color="Brown">InputImpl</font>::initialize(void)
103 {
104
105     mpDI = NULL;
106     mpJoystick = NULL;
107     mpKeyboard = NULL;
108     mbEnabled = false;
109     
110     mbLeft = false;
111     mbRight = false;
112     mbUp = false;
113     mbDown = false;
114
115     mbButtonA = false;
116     mbButtonB = false;
117     mbButtonC = false;
118     mbButtonD = false;
119
120     mbStart = false;
121     mbExit = false;
122
123     mbBeforeLeft = false;
124     mbBeforeRight = false;
125     mbBeforeUp = false;
126     mbBeforeDown = false;
127
128     mbBeforeButtonA = false;
129     mbBeforeButtonB = false;
130     mbBeforeButtonC = false;
131     mbBeforeButtonD = false;
132
133     mbBeforeStart = false;
134     mbBeforeExit = false;
135 <font color="green">//  uninitialize();</font>
136     mbEnabled = false;
137     mbMouseCursor = false;
138
139     HRESULT hr;
140
141
142     <font color="green">// DirectInput \83I\83u\83W\83F\83N\83g\82Ì\90\90¬</font>
143     <font color="blue">if</font>( FAILED( hr = DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION, 
144                                          IID_IDirectInput8, (VOID**)&amp;mpDI, NULL ) ) )
145     {   <font color="blue">std</font>::string tmp("DirectInput8Create() Error : ");
146         tmp += DXGetErrorString8(hr);
147         tmp += " ";
148         throw FatalErrorException(tmp,__FILE__,__LINE__);
149     }
150
151     <font color="green">// Joystick\82Ì\8f\89\8aú\89» </font>
152     <font color="blue">try</font> {
153         initJoystick();
154     } <font color="blue">catch</font> (RecoverbleErrorException e)
155     {
156         <font color="blue">if</font>(mpJoystick != NULL){
157             mpJoystick-&gt;Release();
158             mpJoystick = NULL;
159         }
160     } <font color="blue">catch</font> (...){
161         throw;
162     }
163
164
165     <font color="green">// KeyBoard\82Ì\8f\89\8aú\89»</font>
166
167     <font color="blue">try</font> {
168         initKeyboard();
169     } <font color="blue">catch</font> (RecoverbleErrorException e) {
170         <font color="blue">if</font>(mpKeyboard != NULL)
171         {
172             mpKeyboard-&gt;Release();
173             mpKeyboard = NULL;
174         }
175
176     } <font color="blue">catch</font> (...){
177         throw;
178     }
179
180     <font color="green">// \93ü\97Í\83f\83o\83C\83X\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87\82Í\81A\83G\83\89\81[\82Å\8fI\97¹\82·\82é\81B</font>
181
182     <font color="blue">if</font>(NULL == mpJoystick &amp;& NULL == mpKeyboard)
183     {
184         throw FatalErrorException("<font color="Brown">InputImpl</font> Device Not Found\r\n",__FILE__,__LINE__);
185     };
186
187     addWindowMessageMap();
188
189     mbEnabled = true;
190 }<font color="green">// intialize()</font>
191
192 <font color="green">// \8fI\97¹ -----------------------------------------------------------------------</font>
193 <font color="blue">void</font> <font color="Brown">InputImpl</font>::uninitialize(void)
194 {
195     KeyboardListenerList::iterator it = mKeyboardListenerList.begin();
196     
197     <font color="blue">while</font>(it != mKeyboardListenerList.end())
198     {
199         <font color="blue">if</font>(*it != NULL){
200             (*it)-&gt;keyboardTalkerIsDeleted();
201 <font color="green">//          ++it;</font>
202         }
203         it = mKeyboardListenerList.erase(it);
204     }
205
206     it = mKeyboardListenerQ.begin();
207     
208     <font color="blue">while</font>(it != mKeyboardListenerQ.end())
209     {
210         <font color="blue">if</font>(*it != NULL){
211             (*it)-&gt;keyboardTalkerIsDeleted();
212
213         }
214         it = mKeyboardListenerQ.erase(it);
215     }
216
217     MouseListenerList::iterator itm = mMouseListenerList.begin();
218
219     <font color="blue">while</font>(itm != mMouseListenerList.end())
220     {
221         <font color="blue">if</font>(*itm != NULL){
222             (*itm)-&gt;mouseTalkerIsDeleted();
223 <font color="green">//          ++itm;</font>
224         }
225         itm = mMouseListenerList.erase(itm);
226     }
227
228     itm = mMouseListenerQ.begin();
229
230     <font color="blue">while</font>(itm != mMouseListenerQ.end())
231     {
232         <font color="blue">if</font>(*itm != NULL){
233             (*itm)-&gt;mouseTalkerIsDeleted();
234 <font color="green">//          ++itm;</font>
235         }
236         itm = mMouseListenerQ.erase(itm);
237     }
238
239     <font color="blue">if</font>(mpJoystick){
240         mpJoystick-&gt;Release();
241         mpJoystick = NULL;
242     }
243
244     <font color="blue">if</font>(mpKeyboard){
245         mpKeyboard-&gt;Release();
246         mpKeyboard = NULL;
247     }
248     
249     <font color="blue">if</font>(mpDI){
250         mpDI-&gt;Release();
251         mpDI = NULL;
252     }
253
254 }<font color="green">// uninitialize()</font>
255
256 <font color="green">// \83W\83\87\83C\83X\83e\83B\83b\83N\83f\83o\83C\83X\97ñ\8b\93\97p\83R\81[\83\8b\83o\83b\83N ---------------------------------</font>
257 BOOL <font color="Brown">InputImpl</font>::enumJoysticksCallback(<font color="blue">const</font> DIDEVICEINSTANCE *pdidInstance)
258 {
259     HRESULT hr;
260
261     <font color="green">// Obtain an interface to the enumerated joystick.</font>
262     hr = mpDI-&gt;CreateDevice( pdidInstance->guidInstance, &amp;mpJoystick, NULL );
263
264     <font color="green">// If it failed, then we can't use this joystick. (Maybe the user unplugged</font>
265     <font color="green">// it while we were in the middle of enumerating it.)</font>
266     <font color="blue">if</font>( FAILED(hr) ) 
267         <font color="blue">return</font> DIENUM_CONTINUE;
268
269     <font color="green">// Stop enumeration. Note: we're just taking the first joystick we get. You</font>
270     <font color="green">// could store all the enumerated joysticks and let the user pick.</font>
271     <font color="blue">return</font> DIENUM_STOP;
272 }
273
274
275 <font color="green">// \83W\83\87\83C\83X\83e\83B\83b\83N\82Ì\8f\89\8aú\89» ---------------------------------------------------</font>
276 <font color="blue">void</font> <font color="Brown">InputImpl</font>::initJoystick(void)
277 {
278
279     HRESULT hr = E_FAIL;
280
281     <font color="green">// DirectInput\83f\83o\83C\83X\82Ì\97ñ\8b\93</font>
282     <font color="blue">if</font>( FAILED(hr = mpDI-&gt;EnumDevices( DI8DEVCLASS_GAMECTRL, 
283                                          enumJoysticksCallback,
284                                          (VOID*)this, DIEDFL_ATTACHEDONLY ) ) )
285     {   
286         throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
287     }
288
289     <font color="green">// Make sure we got a joystick</font>
290     <font color="blue">if</font>( NULL == mpJoystick )
291     {   throw RecoverbleErrorException(" NULL == mpJoystick",__FILE__,__LINE__);}
292
293     <font color="blue">if</font>( FAILED(mpJoystick-&gt;SetDataFormat( &amp;c_dfDIJoystick2 ) ) )
294     {   
295         throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
296     }
297
298     <font color="green">// Set the cooperative level to let DInputImpl know how this device should</font>
299     <font color="green">// interact with the system and with other DInputImpl applications.</font>
300     <font color="blue">if</font>( FAILED(mpJoystick-&gt;SetCooperativeLevel( mHWND, DISCL_EXCLUSIVE | 
301                                                              DISCL_FOREGROUND ) ) )
302     {   
303         throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);}
304
305     <font color="green">// Determine how many axis the joystick has (so we don't error out setting</font>
306     <font color="green">// properties for unavailable axis)</font>
307     mDIJoystickDevCaps.dwSize = sizeof(DIDEVCAPS);
308     <font color="blue">if</font> ( FAILED(mpJoystick-&gt;GetCapabilities(&amp;mDIJoystickDevCaps) ) )
309     {   
310         throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
311     
312     }
313
314     
315     <font color="green">// Enumerate the axes of the joyctick and set the range of each axis. Note:</font>
316     <font color="green">// we could just use the defaults, but we're just trying to show an example</font>
317     <font color="green">// of enumerating device objects (axes, buttons, etc.).</font>
318     <font color="blue">if</font> ( FAILED(mpJoystick-&gt;EnumObjects( enumAxesCallback, 
319                                                 (VOID*)this, DIDFT_AXIS ) ) )
320     {   
321         throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
322     
323     }
324 }<font color="green">// InitJoystick()</font>
325
326 <font color="green">// \83W\83\87\83C\83X\83e\83B\83b\83N\82Ì\90Ý\92è\83R\81[\83\8b\83o\83b\83N\81@-------------------------------------------------</font>
327 BOOL <font color="Brown">InputImpl</font>::enumAxesCallback( <font color="blue">const</font> DIDEVICEOBJECTINSTANCE* pdidoi)
328 {
329
330     DIPROPRANGE diprg; 
331     diprg.diph.dwSize       = sizeof(DIPROPRANGE); 
332     diprg.diph.dwHeaderSize = sizeof(DIPROPHEADER); 
333     diprg.diph.dwHow        = DIPH_BYID; 
334     diprg.diph.dwObj        = pdidoi-&gt;dwType; <font color="green">// Specify the enumerated axis</font>
335     diprg.lMin              = -1000; 
336     diprg.lMax              = +1000; 
337     
338     <font color="green">// Set the range for the axis</font>
339     <font color="blue">if</font>( FAILED( mpJoystick-&gt;SetProperty( DIPROP_RANGE, &amp;diprg.diph ) ) )
340     {
341         <font color="blue">return</font> DIENUM_STOP;
342     }
343
344     <font color="blue">return</font> DIENUM_CONTINUE;
345 }<font color="green">// enumAxesCallback </font>
346
347 <font color="green">// \83L\81[\83{\81[\83h\83f\83o\83C\83X\82Ì\8f\89\8aú\89» -------------------------------------------------</font>
348 <font color="blue">void</font> <font color="Brown">InputImpl</font>::initKeyboard(void)
349 {
350     HRESULT hr = E_FAIL;
351
352     <font color="green">// \83L\81[\83{\81[\83h\83f\83o\83C\83X\82Ì\8dì\90¬</font>
353     <font color="blue">if</font>( FAILED( hr = mpDI-&gt;CreateDevice( GUID_SysKeyboard, &amp;mpKeyboard, NULL ) ) )
354     {   <font color="green">//system::Factory::getInstance()-&gt;outputError(DXGetErrorString8(hr));</font>
355         throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
356     }
357     
358     <font color="blue">if</font>( FAILED( hr = mpKeyboard-&gt;SetDataFormat( &amp;c_dfDIKeyboard ) ) )
359     {
360         <font color="green">//system::Factory::getInstance()-&gt;outputError(DXGetErrorString8(hr));</font>
361         throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
362     }
363     
364     <font color="green">// \8b¦\92²\83\8c\83x\83\8b\82Ì\90Ý\92è </font>
365     <font color="blue">if</font>(FAILED(mpKeyboard-&gt;SetCooperativeLevel( mHWND, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND )))
366     {
367         throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
368     }
369
370     <font color="green">// Acquire the newly created device</font>
371     mpKeyboard-&gt;Acquire();
372 }<font color="green">// initKeyboard</font>
373
374 <font color="green">// \83L\81[\83{\81[\83h\81E\83W\83\87\83C\83X\83e\83B\83b\83N\82Ì\8c»\8dÝ\82Ì\8fó\91Ô\82ð\8eæ\93¾ -----------------------------</font>
375 <font color="blue">void</font> <font color="Brown">InputImpl</font>::update(void)
376 {
377     HRESULT hr = E_FAIL;
378     <font color="blue">bool</font> b_joystick = false;
379     <font color="blue">bool</font> b_keyboard = false;
380     
381     <font color="green">// \83W\83\87\83C\83X\83e\83B\83b\83N\82Ì\8c»\8dÝ\8fó\91Ô\82ð\8eæ\93¾ //</font>
382     <font color="blue">if</font>(mpJoystick){
383         mpJoystick-&gt;Poll();
384         hr = mpJoystick-&gt;GetDeviceState(sizeof(DIJOYSTATE2),(LPVOID)&amp;mDIJoyState);
385         <font color="blue">if</font>(FAILED(hr)){
386             mpJoystick-&gt;Acquire();
387             <font color="blue">while</font>( hr == DIERR_INPUTLOST ) 
388                 hr = mpJoystick-&gt;Acquire();
389         } <font color="blue">else</font> {
390             b_joystick = true;
391         }
392         
393
394     } 
395
396     <font color="green">// \83L\81[\83{\81[\83h\82Ì\8c»\8dÝ\8fó\91Ô\82ð\8eæ\93¾ //</font>
397     <font color="blue">if</font>(mpKeyboard){
398 <font color="green">//      ZeroMemory( &amp;mDIKeys, sizeof(mDIKeys) );</font>
399         hr = mpKeyboard-&gt;GetDeviceState(sizeof(mDIKeys),(LPVOID)&amp;mDIKeys);
400         <font color="blue">if</font>(FAILED(hr)){
401 <font color="blue">#ifdef</font> _DEBUG
402             OutputDebugString(DXGetErrorString8(hr));
403 <font color="blue">#endif</font>
404             mpKeyboard-&gt;Acquire();
405             <font color="blue">while</font>( hr == DIERR_INPUTLOST ) 
406                 hr = mpKeyboard-&gt;Acquire();
407         } <font color="blue">else</font> {
408             b_keyboard = true;
409         }
410     }
411
412     <font color="green">//</font>
413     mbBeforeLeft = mbLeft;
414     mbBeforeRight = mbRight;
415     mbBeforeUp = mbUp;
416     mbBeforeDown = mbDown;
417
418     mbBeforeButtonA = mbButtonA;
419     mbBeforeButtonB = mbButtonB;
420     mbBeforeButtonC = mbButtonC;
421     mbBeforeButtonD = mbButtonD;
422
423     mbBeforeStart = mbStart;
424     mbBeforeExit = mbExit;
425
426     mbLeft = mbRight = mbUp = mbDown = false;
427     mbButtonA = mbButtonB = mbButtonC = mbButtonD = false;
428     mbStart = mbExit = false;
429     
430
431     <font color="blue">if</font>(b_joystick){
432         
433         <font color="blue">if</font>(mDIJoyState.lX &gt; 300){
434             mbRight = true;
435         } <font color="blue">else</font> {
436             <font color="blue">if</font>(mDIJoyState.lX &lt; -300)
437             {
438
439                 mbLeft = true;
440             }
441         }
442             
443         <font color="blue">if</font>(mDIJoyState.lY &gt; 300)
444             mbDown = true;
445         <font color="blue">else</font> 
446             <font color="blue">if</font>(mDIJoyState.lY &lt; -300)
447                 mbUp = true;
448
449         <font color="blue">if</font>(mDIJoyState.rgbButtons[0])
450         {
451             mbButtonA = true;
452             mbStart = true;
453         }
454
455         <font color="blue">if</font>(mDIJoyState.rgbButtons[1])
456             mbButtonB = true;
457         
458         <font color="blue">if</font>(mDIJoyState.rgbButtons[2])
459             mbButtonC =  true;
460         
461         <font color="blue">if</font>(mDIJoyState.rgbButtons[3])
462             mbButtonD =  true;
463     }
464
465     <font color="blue">if</font>(b_keyboard){
466         
467         <font color="blue">if</font>(mDIKeys[DIK_LEFT] &amp; 0x80)
468             mbLeft = true;
469
470         <font color="blue">if</font>(mDIKeys[DIK_RIGHT] &amp; 0x80)
471             mbRight = true;
472
473         <font color="blue">if</font>(mDIKeys[DIK_UP] &amp; 0x80)
474             mbUp = true;
475
476         <font color="blue">if</font>(mDIKeys[DIK_DOWN] &amp; 0x80)
477             mbDown =  true;
478
479         <font color="blue">if</font>(mDIKeys[DIK_Z] &amp; 0x80)
480             mbButtonA = true;
481         
482         <font color="blue">if</font>(mDIKeys[DIK_X] &amp; 0x80)
483             mbButtonB = true;
484         
485         <font color="blue">if</font>(mDIKeys[DIK_C] &amp; 0x80)
486             mbButtonC = true;
487         
488         <font color="blue">if</font>(mDIKeys[DIK_V] &amp; 0x80)
489             mbButtonD = true;
490         
491         <font color="blue">if</font>(mDIKeys[DIK_SPACE] &amp; 0x80)
492             mbStart = true;
493
494         <font color="blue">if</font>(mDIKeys[DIK_ESCAPE] &amp; 0x80)
495             mbExit = true;
496
497     }
498
499     <font color="green">// \83C\83x\83\93\83g\83\8a\83X\83i\81[Q\81¨\83C\83x\83\93\83g\83\8a\83X\83i\81[\83\8a\83X\83g\82Ö //</font>
500     MouseListenerList::iterator it = mMouseListenerQ.begin();
501     
502     <font color="blue">while</font>(it != mMouseListenerQ.end())
503     {
504         <font color="blue">if</font>(*it != NULL){
505             mMouseListenerList.push_back(*it);
506         }
507         it = mMouseListenerQ.erase(it);
508
509     }
510
511     KeyboardListenerList::iterator itk = mKeyboardListenerQ.begin();
512
513     <font color="blue">while</font>(itk != mKeyboardListenerQ.end())
514     {
515         <font color="blue">if</font>(*itk != NULL){
516             mKeyboardListenerList.push_back(*itk);
517         }
518         itk = mKeyboardListenerQ.erase(itk);
519     }
520 }<font color="green">// update() </font>
521
522 LRESULT     <font color="Brown">InputImpl</font>::onSetCursor(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam)
523 {
524     <font color="blue">if</font>(<font color="darkblue">system</font>::Factory::getInstance()-&gt;isActive() &amp;& !mouseCursorVisibility())
525     {
526         SetCursor(NULL);<font color="green">//\83}\83E\83X\83J\81[\83\\83\8b\82ð\8fÁ\82·\81B</font>
527         <font color="blue">return</font> 0;
528     }
529     <font color="blue">return</font> DefWindowProc (hwnd, WM_SETCURSOR,wParam, lParam);
530 }<font color="green">// onSetCursor()</font>
531
532 <font color="green">// \83}\83E\83X\82Ì\8d\83{\83^\83\93\82ª\89\9f\82³\82ê\82½ \81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|</font>
533 LRESULT     <font color="Brown">InputImpl</font>::onLButtonDown(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam)
534 {
535     <font color="blue">return</font> callMouseListenerMethod(hwnd,wParam,lParam,<font color="darkblue">input</font>::<font color="darkblue">mouse</font>::<font color="DarkRed">Listener</font>::leftButtonDown);
536 }<font color="green">// onLButtonDown()</font>
537
538 <font color="green">// \83}\83E\83X\82Ì\8d\83{\83^\83\93\82ª\97£\82³\82ê\82½ \81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|</font>
539 LRESULT     <font color="Brown">InputImpl</font>::onLButtonUp(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam)
540 {
541     <font color="blue">return</font> callMouseListenerMethod(hwnd,wParam,lParam,<font color="darkblue">input</font>::<font color="darkblue">mouse</font>::<font color="DarkRed">Listener</font>::leftButtonUp);
542 }<font color="green">// onLButtonUp()</font>
543
544 <font color="green">// \83}\83E\83X\82Ì\8d\83{\83^\83\93\82ª\83_\83u\83\8b\83N\83\8a\83b\83N\82³\82ê\82½\81@\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|</font>
545 LRESULT     <font color="Brown">InputImpl</font>::onLButtonDoubleClick(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam)
546 {
547     <font color="blue">return</font> callMouseListenerMethod(hwnd,wParam,lParam,<font color="darkblue">input</font>::<font color="darkblue">mouse</font>::<font color="DarkRed">Listener</font>::leftButtonDoubleClick);
548 }<font color="green">// onLButtonDoubleClick()</font>
549
550 <font color="green">// \83}\83E\83X\82Ì\89E\83{\83^\83\93\82ª\97£\82³\82ê\82½ \81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|</font>
551 LRESULT     <font color="Brown">InputImpl</font>::onRButtonDown(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam)
552 {
553     <font color="blue">return</font> callMouseListenerMethod(hwnd,wParam,lParam,<font color="darkblue">input</font>::<font color="darkblue">mouse</font>::<font color="DarkRed">Listener</font>::rightButtonDown);
554 }<font color="green">// onRButtonDown()</font>
555
556 <font color="green">// \83}\83E\83X\82Ì\89E\83{\83^\83\93\82ª\89\9f\82³\82ê\82½ \81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|</font>
557 LRESULT     <font color="Brown">InputImpl</font>::onRButtonUp(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam)
558 {
559     <font color="blue">return</font> callMouseListenerMethod(hwnd,wParam,lParam,<font color="darkblue">input</font>::<font color="darkblue">mouse</font>::<font color="DarkRed">Listener</font>::rightButtonUp);
560 }<font color="green">// onRButtonUp()</font>
561
562 <font color="green">// \83}\83E\83X\82Ì\89E\83{\83^\83\93\82ª\83_\83u\83\8b\83N\83\8a\83b\83N\82³\82ê\82½\81@\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|</font>
563 LRESULT     <font color="Brown">InputImpl</font>::onRButtonDoubleClick(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam)
564 {
565     <font color="blue">return</font> callMouseListenerMethod(hwnd,wParam,lParam,<font color="darkblue">input</font>::<font color="darkblue">mouse</font>::<font color="DarkRed">Listener</font>::rightButtonDoubleClick);
566 }<font color="green">// onRButtonDoubleClick()</font>
567
568 <font color="green">// \83}\83E\83X\82ª\93®\82¢\82½\81@\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|</font>
569 LRESULT     <font color="Brown">InputImpl</font>::onMouseMove(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam)
570 {
571     <font color="blue">return</font> callMouseListenerMethod(hwnd,wParam,lParam,<font color="darkblue">input</font>::<font color="darkblue">mouse</font>::<font color="DarkRed">Listener</font>::mouseMove);
572 }<font color="green">// onMouseMove()</font>
573
574 <font color="green">// \83z\83C\81[\83\8b\82ª\93®\82¢\82½\81@\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|</font>
575 LRESULT     <font color="Brown">InputImpl</font>::onMouseWheel(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam)
576 {
577     <font color="blue">return</font> callMouseListenerMethod(hwnd,wParam,lParam,<font color="darkblue">input</font>::<font color="darkblue">mouse</font>::<font color="DarkRed">Listener</font>::mouseWheel);
578 }<font color="green">// onMouseWheel()</font>
579
580 <font color="green">// MouseListener\82Ì\83\81\83\\83b\83h\82ð\8cÄ\82Ñ\8fo\82· \81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|\81|</font>
581 LRESULT <font color="Brown">InputImpl</font>::callMouseListenerMethod(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam,<font color="blue">void</font>(<font color="darkblue">mouse</font>::<font color="DarkRed">Listener</font>::* pMethod)(<font color="blue">const</font> <font color="blue">int</font>,<font color="blue">const</font> <font color="blue">int</font>,<font color="blue">const</font> DWORD))
582 {
583     <font color="blue">using</font> <font color="blue">namespace</font> <font color="darkblue">sf</font>::<font color="darkblue">system</font>::<font color="darkblue">input</font>;
584
585     <font color="blue">if</font>(mMouseListenerList.size() == 0)
586         <font color="blue">return</font> 0;
587
588     POINT pt;
589     
590     pt.x = LOWORD(lParam);
591     pt.y = HIWORD(lParam);
592     
593     ClientToScreen(hwnd,&amp;pt);
594
595     DWORD mkey = 0;
596
597     <font color="blue">if</font>(MK_CONTROL &amp; wParam)
598         mkey |= <font color="darkblue">mouse</font>::MKEY_CONTROL;
599     
600     <font color="blue">if</font>(MK_SHIFT &amp; wParam)
601         mkey |= <font color="darkblue">mouse</font>::MKEY_SHIFT;
602
603     mkey |= (wParam &amp; 0xffff0000);
604
605     
606     MouseListenerList::iterator it = mMouseListenerList.begin();
607     
608     <font color="blue">while</font>(it != mMouseListenerList.end())
609     {
610         <font color="blue">if</font>(*it == NULL){
611             it = mMouseListenerList.erase(it);
612         } <font color="blue">else</font> {
613             <font color="blue">if</font>((*it)-&gt;isListeningMouse()){
614                 ((*it)-&gt;*pMethod)(pt.x,pt.y,mkey);
615             }
616             ++it;
617         }
618     }
619
620     <font color="blue">return</font> 0;
621 }<font color="green">// callListener</font>
622
623 <font color="green">// \83L\81[\89\9f\89º\8e\9e\82Ì\8f\88\97\9d -----------------------------------------------------------</font>
624 LRESULT <font color="Brown">InputImpl</font>::onKeyDown(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam)
625 {
626     DWORD extKey = 0;
627
628     <font color="green">// \82Æ\82è\82 \82¦\82¸\81AESC\83L\81[\82ª\89\9f\82³\82ê\82½\82ç\8fI\97¹\82·\82é\82æ\82¤\82É\82µ\82Ä\82¢\82é</font>
629     <font color="blue">switch</font>(wParam)
630     {
631     <font color="blue">case</font> 'Q':
632         PostMessage( hwnd, WM_CLOSE, 0, 0L );
633         break;
634     <font color="blue">default</font>:
635
636         <font color="blue">if</font>(GetAsyncKeyState(VK_SHIFT))
637             extKey |= <font color="darkblue">keyboard</font>::SHIFT;
638
639         <font color="blue">if</font>(GetAsyncKeyState(VK_CONTROL))
640             extKey |= <font color="darkblue">keyboard</font>::CONTROL;
641
642         
643         KeyboardListenerList::iterator it = mKeyboardListenerList.begin();
644     
645         <font color="blue">while</font>(it != mKeyboardListenerList.end())
646         {
647             <font color="blue">if</font>(*it == NULL){
648                 it = mKeyboardListenerList.erase(it);
649             } <font color="blue">else</font> {
650                 <font color="blue">if</font>((*it)-&gt;isListeningKeyboard()){
651                         (*it)-&gt;keyDown(wParam,extKey);
652                 }
653                 ++it;
654             }
655         }
656
657     }
658     <font color="blue">return</font> 0; <font color="green">// WM_KEYDOWN</font>
659 }<font color="green">// onKeyDown</font>
660
661 <font color="green">// \83L\81[\82ª\97£\82³\82ê\82½\8e\9e\82Ì\8f\88\97\9d -----------------------------------------------------------</font>
662 LRESULT <font color="Brown">InputImpl</font>::onKeyUp(<font color="blue">const</font> HWND hwnd, <font color="blue">const</font> WPARAM wParam, <font color="blue">const</font> LPARAM lParam)
663 {
664     <font color="blue">return</font> 0;
665 }<font color="green">// onKeyUp</font>
666
667 <font color="green">// \83E\83B\83\93\83h\83E\83\81\83b\83Z\81[\83W\83n\83\93\83h\83\89\82ðSystemImpl\82É\93o\98\81|\81|\81|\81|\81|\81|\81|\81|</font>
668 <font color="blue">void</font> <font color="Brown">InputImpl</font>::addWindowMessageMap()
669 {
670     <font color="Brown">SystemImpl</font> *pSys = dynamic_cast&lt;<font color="Brown">SystemImpl</font> *&gt;(<font color="darkblue">system</font>::Factory::getInstance());
671
672     pSys-&gt;addWindowMessage(WM_SETCURSOR, new WindowMessageImpl&lt;<font color="Brown">InputImpl</font>>(this,&amp;<font color="Brown">InputImpl</font>::onSetCursor));
673     pSys-&gt;addWindowMessage(WM_LBUTTONDOWN,new WindowMessageImpl&lt;<font color="Brown">InputImpl</font>>(this,&amp;<font color="Brown">InputImpl</font>::onLButtonDown));
674     pSys-&gt;addWindowMessage(WM_LBUTTONUP,new WindowMessageImpl&lt;<font color="Brown">InputImpl</font>>(this,&amp;<font color="Brown">InputImpl</font>::onLButtonUp));
675     pSys-&gt;addWindowMessage(WM_LBUTTONDBLCLK,new WindowMessageImpl&lt;<font color="Brown">InputImpl</font>>(this,&amp;<font color="Brown">InputImpl</font>::onLButtonDoubleClick));
676
677     pSys-&gt;addWindowMessage(WM_RBUTTONDOWN,new WindowMessageImpl&lt;<font color="Brown">InputImpl</font>>(this,&amp;<font color="Brown">InputImpl</font>::onRButtonDown));
678     pSys-&gt;addWindowMessage(WM_RBUTTONUP,new WindowMessageImpl&lt;<font color="Brown">InputImpl</font>>(this,&amp;<font color="Brown">InputImpl</font>::onRButtonUp));
679     pSys-&gt;addWindowMessage(WM_RBUTTONDBLCLK,new WindowMessageImpl&lt;<font color="Brown">InputImpl</font>>(this,&amp;<font color="Brown">InputImpl</font>::onRButtonDoubleClick));
680
681     pSys-&gt;addWindowMessage(WM_MOUSEMOVE,new WindowMessageImpl&lt;<font color="Brown">InputImpl</font>>(this,&amp;<font color="Brown">InputImpl</font>::onMouseMove));
682     pSys-&gt;addWindowMessage(WM_MOUSEWHEEL,new WindowMessageImpl&lt;<font color="Brown">InputImpl</font>>(this,&amp;<font color="Brown">InputImpl</font>::onMouseWheel));
683
684     pSys-&gt;addWindowMessage(WM_KEYDOWN,new WindowMessageImpl&lt;<font color="Brown">InputImpl</font>>(this,&amp;<font color="Brown">InputImpl</font>::onKeyDown));
685     pSys-&gt;addWindowMessage(WM_KEYUP,new WindowMessageImpl&lt;<font color="Brown">InputImpl</font>>(this,&amp;<font color="Brown">InputImpl</font>::onKeyUp));
686
687 }
688 </pre></body>
689 </html>