2 <title>InputImpl.cpp</title>
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>
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"
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> <list>
42 <font color="blue">#include</font> <queue>
43 <font color="blue">#include</font> <memory>
44 <font color="blue">#include</font> <map>
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"
54 <font color="green">// PROJECT INCLUDES</font>
55 <font color="green">//</font>
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"
67 <font color="blue">#ifdef</font> _DEBUG
68 <font color="blue">#define</font> new DEBUG_NEW
69 <font color="blue">#endif</font>
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"
76 <font color="green">//////////////////////////////////////////////////////////////////////</font>
77 <font color="green">//
\8d\
\92z/
\8fÁ
\96Å</font>
78 <font color="green">//////////////////////////////////////////////////////////////////////</font>
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>;
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()
88 <font color="green">//
\83R
\83\93\83X
\83g
\83\89\83N
\83^ -------------------------------------------------------------</font>
89 <font color="Brown">InputImpl</font>::InputImpl(HWND hwnd)
92 <font color="green">// initialize(); </font>
95 <font color="green">//
\83f
\83X
\83g
\83\89\83N
\83^ ---------------------------------------------------------------</font>
96 <font color="Brown">InputImpl</font>::~InputImpl()
99 }<font color="green">// ~InputImpl()</font>
101 <font color="green">//
\8f\89\8aú
\89» ---------------------------------------------------------------------</font>
102 <font color="blue">void</font> <font color="Brown">InputImpl</font>::initialize(void)
123 mbBeforeLeft = false;
124 mbBeforeRight = false;
126 mbBeforeDown = false;
128 mbBeforeButtonA = false;
129 mbBeforeButtonB = false;
130 mbBeforeButtonC = false;
131 mbBeforeButtonD = false;
133 mbBeforeStart = false;
134 mbBeforeExit = false;
135 <font color="green">// uninitialize();</font>
137 mbMouseCursor = false;
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**)&mpDI, NULL ) ) )
145 { <font color="blue">std</font>::string tmp("DirectInput8Create() Error : ");
146 tmp += DXGetErrorString8(hr);
148 throw FatalErrorException(tmp,__FILE__,__LINE__);
151 <font color="green">// Joystick
\82Ì
\8f\89\8aú
\89» </font>
152 <font color="blue">try</font> {
154 } <font color="blue">catch</font> (RecoverbleErrorException e)
156 <font color="blue">if</font>(mpJoystick != NULL){
157 mpJoystick->Release();
160 } <font color="blue">catch</font> (...){
165 <font color="green">// KeyBoard
\82Ì
\8f\89\8aú
\89»</font>
167 <font color="blue">try</font> {
169 } <font color="blue">catch</font> (RecoverbleErrorException e) {
170 <font color="blue">if</font>(mpKeyboard != NULL)
172 mpKeyboard->Release();
176 } <font color="blue">catch</font> (...){
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>
182 <font color="blue">if</font>(NULL == mpJoystick && NULL == mpKeyboard)
184 throw FatalErrorException("<font color="Brown">InputImpl</font> Device Not Found\r\n",__FILE__,__LINE__);
187 addWindowMessageMap();
190 }<font color="green">// intialize()</font>
192 <font color="green">//
\8fI
\97¹ -----------------------------------------------------------------------</font>
193 <font color="blue">void</font> <font color="Brown">InputImpl</font>::uninitialize(void)
195 KeyboardListenerList::iterator it = mKeyboardListenerList.begin();
197 <font color="blue">while</font>(it != mKeyboardListenerList.end())
199 <font color="blue">if</font>(*it != NULL){
200 (*it)->keyboardTalkerIsDeleted();
201 <font color="green">// ++it;</font>
203 it = mKeyboardListenerList.erase(it);
206 it = mKeyboardListenerQ.begin();
208 <font color="blue">while</font>(it != mKeyboardListenerQ.end())
210 <font color="blue">if</font>(*it != NULL){
211 (*it)->keyboardTalkerIsDeleted();
214 it = mKeyboardListenerQ.erase(it);
217 MouseListenerList::iterator itm = mMouseListenerList.begin();
219 <font color="blue">while</font>(itm != mMouseListenerList.end())
221 <font color="blue">if</font>(*itm != NULL){
222 (*itm)->mouseTalkerIsDeleted();
223 <font color="green">// ++itm;</font>
225 itm = mMouseListenerList.erase(itm);
228 itm = mMouseListenerQ.begin();
230 <font color="blue">while</font>(itm != mMouseListenerQ.end())
232 <font color="blue">if</font>(*itm != NULL){
233 (*itm)->mouseTalkerIsDeleted();
234 <font color="green">// ++itm;</font>
236 itm = mMouseListenerQ.erase(itm);
239 <font color="blue">if</font>(mpJoystick){
240 mpJoystick->Release();
244 <font color="blue">if</font>(mpKeyboard){
245 mpKeyboard->Release();
249 <font color="blue">if</font>(mpDI){
254 }<font color="green">// uninitialize()</font>
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)
261 <font color="green">// Obtain an interface to the enumerated joystick.</font>
262 hr = mpDI->CreateDevice( pdidInstance->guidInstance, &mpJoystick, NULL );
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;
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;
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)
281 <font color="green">// DirectInput
\83f
\83o
\83C
\83X
\82Ì
\97ñ
\8b\93</font>
282 <font color="blue">if</font>( FAILED(hr = mpDI->EnumDevices( DI8DEVCLASS_GAMECTRL,
283 enumJoysticksCallback,
284 (VOID*)this, DIEDFL_ATTACHEDONLY ) ) )
286 throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
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__);}
293 <font color="blue">if</font>( FAILED(mpJoystick->SetDataFormat( &c_dfDIJoystick2 ) ) )
295 throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
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->SetCooperativeLevel( mHWND, DISCL_EXCLUSIVE |
301 DISCL_FOREGROUND ) ) )
303 throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);}
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->GetCapabilities(&mDIJoystickDevCaps) ) )
310 throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
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->EnumObjects( enumAxesCallback,
319 (VOID*)this, DIDFT_AXIS ) ) )
321 throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
324 }<font color="green">// InitJoystick()</font>
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)
331 diprg.diph.dwSize = sizeof(DIPROPRANGE);
332 diprg.diph.dwHeaderSize = sizeof(DIPROPHEADER);
333 diprg.diph.dwHow = DIPH_BYID;
334 diprg.diph.dwObj = pdidoi->dwType; <font color="green">// Specify the enumerated axis</font>
338 <font color="green">// Set the range for the axis</font>
339 <font color="blue">if</font>( FAILED( mpJoystick->SetProperty( DIPROP_RANGE, &diprg.diph ) ) )
341 <font color="blue">return</font> DIENUM_STOP;
344 <font color="blue">return</font> DIENUM_CONTINUE;
345 }<font color="green">// enumAxesCallback </font>
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)
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->CreateDevice( GUID_SysKeyboard, &mpKeyboard, NULL ) ) )
354 { <font color="green">//system::Factory::getInstance()->outputError(DXGetErrorString8(hr));</font>
355 throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
358 <font color="blue">if</font>( FAILED( hr = mpKeyboard->SetDataFormat( &c_dfDIKeyboard ) ) )
360 <font color="green">//system::Factory::getInstance()->outputError(DXGetErrorString8(hr));</font>
361 throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
364 <font color="green">//
\8b¦
\92²
\83\8c\83x
\83\8b\82Ì
\90Ý
\92è </font>
365 <font color="blue">if</font>(FAILED(mpKeyboard->SetCooperativeLevel( mHWND, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND )))
367 throw RecoverbleErrorException(DXGetErrorString8(hr),__FILE__,__LINE__);
370 <font color="green">// Acquire the newly created device</font>
371 mpKeyboard->Acquire();
372 }<font color="green">// initKeyboard</font>
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)
378 <font color="blue">bool</font> b_joystick = false;
379 <font color="blue">bool</font> b_keyboard = false;
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->Poll();
384 hr = mpJoystick->GetDeviceState(sizeof(DIJOYSTATE2),(LPVOID)&mDIJoyState);
385 <font color="blue">if</font>(FAILED(hr)){
386 mpJoystick->Acquire();
387 <font color="blue">while</font>( hr == DIERR_INPUTLOST )
388 hr = mpJoystick->Acquire();
389 } <font color="blue">else</font> {
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( &mDIKeys, sizeof(mDIKeys) );</font>
399 hr = mpKeyboard->GetDeviceState(sizeof(mDIKeys),(LPVOID)&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->Acquire();
405 <font color="blue">while</font>( hr == DIERR_INPUTLOST )
406 hr = mpKeyboard->Acquire();
407 } <font color="blue">else</font> {
412 <font color="green">//</font>
413 mbBeforeLeft = mbLeft;
414 mbBeforeRight = mbRight;
416 mbBeforeDown = mbDown;
418 mbBeforeButtonA = mbButtonA;
419 mbBeforeButtonB = mbButtonB;
420 mbBeforeButtonC = mbButtonC;
421 mbBeforeButtonD = mbButtonD;
423 mbBeforeStart = mbStart;
424 mbBeforeExit = mbExit;
426 mbLeft = mbRight = mbUp = mbDown = false;
427 mbButtonA = mbButtonB = mbButtonC = mbButtonD = false;
428 mbStart = mbExit = false;
431 <font color="blue">if</font>(b_joystick){
433 <font color="blue">if</font>(mDIJoyState.lX > 300){
435 } <font color="blue">else</font> {
436 <font color="blue">if</font>(mDIJoyState.lX < -300)
443 <font color="blue">if</font>(mDIJoyState.lY > 300)
445 <font color="blue">else</font>
446 <font color="blue">if</font>(mDIJoyState.lY < -300)
449 <font color="blue">if</font>(mDIJoyState.rgbButtons[0])
455 <font color="blue">if</font>(mDIJoyState.rgbButtons[1])
458 <font color="blue">if</font>(mDIJoyState.rgbButtons[2])
461 <font color="blue">if</font>(mDIJoyState.rgbButtons[3])
465 <font color="blue">if</font>(b_keyboard){
467 <font color="blue">if</font>(mDIKeys[DIK_LEFT] & 0x80)
470 <font color="blue">if</font>(mDIKeys[DIK_RIGHT] & 0x80)
473 <font color="blue">if</font>(mDIKeys[DIK_UP] & 0x80)
476 <font color="blue">if</font>(mDIKeys[DIK_DOWN] & 0x80)
479 <font color="blue">if</font>(mDIKeys[DIK_Z] & 0x80)
482 <font color="blue">if</font>(mDIKeys[DIK_X] & 0x80)
485 <font color="blue">if</font>(mDIKeys[DIK_C] & 0x80)
488 <font color="blue">if</font>(mDIKeys[DIK_V] & 0x80)
491 <font color="blue">if</font>(mDIKeys[DIK_SPACE] & 0x80)
494 <font color="blue">if</font>(mDIKeys[DIK_ESCAPE] & 0x80)
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();
502 <font color="blue">while</font>(it != mMouseListenerQ.end())
504 <font color="blue">if</font>(*it != NULL){
505 mMouseListenerList.push_back(*it);
507 it = mMouseListenerQ.erase(it);
511 KeyboardListenerList::iterator itk = mKeyboardListenerQ.begin();
513 <font color="blue">while</font>(itk != mKeyboardListenerQ.end())
515 <font color="blue">if</font>(*itk != NULL){
516 mKeyboardListenerList.push_back(*itk);
518 itk = mKeyboardListenerQ.erase(itk);
520 }<font color="green">// update() </font>
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)
524 <font color="blue">if</font>(<font color="darkblue">system</font>::Factory::getInstance()->isActive() && !mouseCursorVisibility())
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;
529 <font color="blue">return</font> DefWindowProc (hwnd, WM_SETCURSOR,wParam, lParam);
530 }<font color="green">// onSetCursor()</font>
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)
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>
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)
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>
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)
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>
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)
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>
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)
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>
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)
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>
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)
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>
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)
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>
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))
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>;
585 <font color="blue">if</font>(mMouseListenerList.size() == 0)
586 <font color="blue">return</font> 0;
590 pt.x = LOWORD(lParam);
591 pt.y = HIWORD(lParam);
593 ClientToScreen(hwnd,&pt);
597 <font color="blue">if</font>(MK_CONTROL & wParam)
598 mkey |= <font color="darkblue">mouse</font>::MKEY_CONTROL;
600 <font color="blue">if</font>(MK_SHIFT & wParam)
601 mkey |= <font color="darkblue">mouse</font>::MKEY_SHIFT;
603 mkey |= (wParam & 0xffff0000);
606 MouseListenerList::iterator it = mMouseListenerList.begin();
608 <font color="blue">while</font>(it != mMouseListenerList.end())
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)->isListeningMouse()){
614 ((*it)->*pMethod)(pt.x,pt.y,mkey);
620 <font color="blue">return</font> 0;
621 }<font color="green">// callListener</font>
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)
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)
631 <font color="blue">case</font> 'Q':
632 PostMessage( hwnd, WM_CLOSE, 0, 0L );
634 <font color="blue">default</font>:
636 <font color="blue">if</font>(GetAsyncKeyState(VK_SHIFT))
637 extKey |= <font color="darkblue">keyboard</font>::SHIFT;
639 <font color="blue">if</font>(GetAsyncKeyState(VK_CONTROL))
640 extKey |= <font color="darkblue">keyboard</font>::CONTROL;
643 KeyboardListenerList::iterator it = mKeyboardListenerList.begin();
645 <font color="blue">while</font>(it != mKeyboardListenerList.end())
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)->isListeningKeyboard()){
651 (*it)->keyDown(wParam,extKey);
658 <font color="blue">return</font> 0; <font color="green">// WM_KEYDOWN</font>
659 }<font color="green">// onKeyDown</font>
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)
664 <font color="blue">return</font> 0;
665 }<font color="green">// onKeyUp</font>
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()
670 <font color="Brown">SystemImpl</font> *pSys = dynamic_cast<<font color="Brown">SystemImpl</font> *>(<font color="darkblue">system</font>::Factory::getInstance());
672 pSys->addWindowMessage(WM_SETCURSOR, new WindowMessageImpl<<font color="Brown">InputImpl</font>>(this,&<font color="Brown">InputImpl</font>::onSetCursor));
673 pSys->addWindowMessage(WM_LBUTTONDOWN,new WindowMessageImpl<<font color="Brown">InputImpl</font>>(this,&<font color="Brown">InputImpl</font>::onLButtonDown));
674 pSys->addWindowMessage(WM_LBUTTONUP,new WindowMessageImpl<<font color="Brown">InputImpl</font>>(this,&<font color="Brown">InputImpl</font>::onLButtonUp));
675 pSys->addWindowMessage(WM_LBUTTONDBLCLK,new WindowMessageImpl<<font color="Brown">InputImpl</font>>(this,&<font color="Brown">InputImpl</font>::onLButtonDoubleClick));
677 pSys->addWindowMessage(WM_RBUTTONDOWN,new WindowMessageImpl<<font color="Brown">InputImpl</font>>(this,&<font color="Brown">InputImpl</font>::onRButtonDown));
678 pSys->addWindowMessage(WM_RBUTTONUP,new WindowMessageImpl<<font color="Brown">InputImpl</font>>(this,&<font color="Brown">InputImpl</font>::onRButtonUp));
679 pSys->addWindowMessage(WM_RBUTTONDBLCLK,new WindowMessageImpl<<font color="Brown">InputImpl</font>>(this,&<font color="Brown">InputImpl</font>::onRButtonDoubleClick));
681 pSys->addWindowMessage(WM_MOUSEMOVE,new WindowMessageImpl<<font color="Brown">InputImpl</font>>(this,&<font color="Brown">InputImpl</font>::onMouseMove));
682 pSys->addWindowMessage(WM_MOUSEWHEEL,new WindowMessageImpl<<font color="Brown">InputImpl</font>>(this,&<font color="Brown">InputImpl</font>::onMouseWheel));
684 pSys->addWindowMessage(WM_KEYDOWN,new WindowMessageImpl<<font color="Brown">InputImpl</font>>(this,&<font color="Brown">InputImpl</font>::onKeyDown));
685 pSys->addWindowMessage(WM_KEYUP,new WindowMessageImpl<<font color="Brown">InputImpl</font>>(this,&<font color="Brown">InputImpl</font>::onKeyUp));