source: trunk/src/user32/winmouse.cpp@ 3072

Last change on this file since 3072 was 3072, checked in by sandervl, 25 years ago

dinput changes/fixes

File size: 2.9 KB
Line 
1/* $Id: winmouse.cpp,v 1.8 2000-03-09 21:50:11 sandervl Exp $ */
2/*
3 * Mouse handler for DINPUT
4 *
5 * Copyright 1999 Sander van Leeuwen
6 *
7 *
8 * Project Odin Software License can be found in LICENSE.TXT
9 *
10 */
11#include <os2win.h>
12#include <misc.h>
13#include "win32wbase.h"
14#include <win\mouse.h>
15#include "winmouse.h"
16#include "oslibmsg.h"
17#include "pmwindow.h"
18
19#define DBG_LOCALLOG DBG_winmouse
20#include "dbglocal.h"
21
22LPMOUSE_EVENT_PROC mouseHandler = NULL;
23WNDPROC keyboardHandler = NULL;
24
25//******************************************************************************
26//******************************************************************************
27VOID WIN32API MOUSE_Enable(LPMOUSE_EVENT_PROC lpMouseEventProc)
28{
29 if(lpMouseEventProc == (LPMOUSE_EVENT_PROC)-1)
30 {
31 mouseHandler = NULL;
32 }
33 else mouseHandler = lpMouseEventProc;
34}
35//******************************************************************************
36//******************************************************************************
37VOID WIN32API KEYBOARD_Enable(WNDPROC handler)
38{
39 keyboardHandler = handler;
40}
41//******************************************************************************
42//******************************************************************************
43BOOL DInputKeyBoardHandler(MSG *msg)
44{
45 if(!ISKDB_CAPTURED())
46 return FALSE;
47
48 return keyboardHandler(msg->hwnd, msg->message, msg->wParam, msg->lParam);
49}
50//******************************************************************************
51//******************************************************************************
52BOOL DInputMouseHandler(HWND hwnd, ULONG msg, ULONG x, ULONG y)
53{
54 WINE_MOUSEEVENT mouseEvent;
55 DWORD dwFlags = MOUSEEVENTF_ABSOLUTE;
56
57 if(!ISMOUSE_CAPTURED())
58 return FALSE;
59
60 mouseEvent.magic = WINE_MOUSEEVENT_MAGIC;
61 mouseEvent.hWnd = hwnd;
62 mouseEvent.time = OSLibWinQueryMsgTime();
63 mouseEvent.keyState = 0; //not used in dinput right now
64 switch(msg)
65 {
66 case WM_NCLBUTTONDOWN:
67 case WM_LBUTTONDOWN:
68 dwFlags |= MOUSEEVENTF_LEFTDOWN;
69 break;
70 case WM_NCLBUTTONUP:
71 case WM_LBUTTONUP:
72 dwFlags |= MOUSEEVENTF_LEFTUP;
73 break;
74 case WM_NCRBUTTONUP:
75 case WM_RBUTTONUP:
76 dwFlags |= MOUSEEVENTF_RIGHTUP;
77 break;
78 case WM_NCRBUTTONDOWN:
79 case WM_RBUTTONDOWN:
80 dwFlags |= MOUSEEVENTF_RIGHTDOWN;
81 break;
82 case WM_NCMBUTTONUP:
83 case WM_MBUTTONUP:
84 dwFlags |= MOUSEEVENTF_MIDDLEUP;
85 break;
86 case WM_NCMBUTTONDOWN:
87 case WM_MBUTTONDOWN:
88 dwFlags |= MOUSEEVENTF_MIDDLEDOWN;
89 break;
90 case WM_MOUSEMOVE:
91 case WM_NCMOUSEMOVE:
92 dwFlags |= MOUSEEVENTF_MOVE;
93 break;
94 default:
95 //TODO: handle double clicks???
96 return FALSE;
97 }
98
99 x = (((long)x << 16) + ScreenWidth-1) / ScreenWidth;
100 y = (((long)y << 16) + ScreenHeight-1) / ScreenHeight;
101
102 mouseHandler(dwFlags, x, y, 0, (DWORD)&mouseEvent);
103 return TRUE;
104}
105//******************************************************************************
106//******************************************************************************
Note: See TracBrowser for help on using the repository browser.