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

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

capture changes/fixes, SetWindowPos fix

File size: 4.3 KB
Line 
1/* $Id: winmouse.cpp,v 1.9 2000-05-03 18:35:56 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 "win32wnd.h"
15#include <win\mouse.h>
16#include "winmouse.h"
17#include "oslibmsg.h"
18#include "pmwindow.h"
19#include "oslibwin.h"
20
21#define DBG_LOCALLOG DBG_winmouse
22#include "dbglocal.h"
23
24LPMOUSE_EVENT_PROC mouseHandler = NULL;
25WNDPROC keyboardHandler = NULL;
26
27//******************************************************************************
28//******************************************************************************
29VOID WIN32API MOUSE_Enable(LPMOUSE_EVENT_PROC lpMouseEventProc)
30{
31 if(lpMouseEventProc == (LPMOUSE_EVENT_PROC)-1)
32 {
33 mouseHandler = NULL;
34 }
35 else mouseHandler = lpMouseEventProc;
36}
37//******************************************************************************
38//******************************************************************************
39VOID WIN32API KEYBOARD_Enable(WNDPROC handler)
40{
41 keyboardHandler = handler;
42}
43//******************************************************************************
44//******************************************************************************
45BOOL DInputKeyBoardHandler(MSG *msg)
46{
47 if(!ISKDB_CAPTURED())
48 return FALSE;
49
50 return keyboardHandler(msg->hwnd, msg->message, msg->wParam, msg->lParam);
51}
52//******************************************************************************
53//******************************************************************************
54BOOL DInputMouseHandler(HWND hwnd, ULONG msg, ULONG x, ULONG y)
55{
56 WINE_MOUSEEVENT mouseEvent;
57 DWORD dwFlags = MOUSEEVENTF_ABSOLUTE;
58
59 if(!ISMOUSE_CAPTURED())
60 return FALSE;
61
62 mouseEvent.magic = WINE_MOUSEEVENT_MAGIC;
63 mouseEvent.hWnd = hwnd;
64 mouseEvent.time = OSLibWinQueryMsgTime();
65 mouseEvent.keyState = 0; //not used in dinput right now
66 switch(msg)
67 {
68 case WM_NCLBUTTONDOWN:
69 case WM_LBUTTONDOWN:
70 dwFlags |= MOUSEEVENTF_LEFTDOWN;
71 break;
72 case WM_NCLBUTTONUP:
73 case WM_LBUTTONUP:
74 dwFlags |= MOUSEEVENTF_LEFTUP;
75 break;
76 case WM_NCRBUTTONUP:
77 case WM_RBUTTONUP:
78 dwFlags |= MOUSEEVENTF_RIGHTUP;
79 break;
80 case WM_NCRBUTTONDOWN:
81 case WM_RBUTTONDOWN:
82 dwFlags |= MOUSEEVENTF_RIGHTDOWN;
83 break;
84 case WM_NCMBUTTONUP:
85 case WM_MBUTTONUP:
86 dwFlags |= MOUSEEVENTF_MIDDLEUP;
87 break;
88 case WM_NCMBUTTONDOWN:
89 case WM_MBUTTONDOWN:
90 dwFlags |= MOUSEEVENTF_MIDDLEDOWN;
91 break;
92 case WM_MOUSEMOVE:
93 case WM_NCMOUSEMOVE:
94 dwFlags |= MOUSEEVENTF_MOVE;
95 break;
96 default:
97 //TODO: handle double clicks???
98 return FALSE;
99 }
100
101 x = (((long)x << 16) + ScreenWidth-1) / ScreenWidth;
102 y = (((long)y << 16) + ScreenHeight-1) / ScreenHeight;
103
104 mouseHandler(dwFlags, x, y, 0, (DWORD)&mouseEvent);
105 return TRUE;
106}
107//******************************************************************************
108//******************************************************************************
109HWND WIN32API GetCapture(void)
110{
111 HWND hwnd;
112
113 hwnd = Win32Window::OS2ToWin32Handle(OSLibWinQueryCapture());
114 dprintf(("USER32: GetCapture returned %x", hwnd));
115 return hwnd;
116}
117//******************************************************************************
118//******************************************************************************
119HWND WIN32API SetCapture( HWND hwnd)
120{
121 HWND hwndPrev = GetCapture();
122
123 if(hwnd == 0) {
124 ReleaseCapture();
125 return hwndPrev;
126 }
127 OSLibWinSetCapture(Win32Window::Win32ToOS2Handle(hwnd));
128 dprintf(("USER32: SetCapture %x (prev %x)", hwnd, hwndPrev));
129 if(hwndPrev) {
130 SendMessageA(hwndPrev, WM_CAPTURECHANGED, 0L, hwnd);
131 }
132 return hwndPrev;
133// return 0;
134}
135//******************************************************************************
136//******************************************************************************
137BOOL WIN32API ReleaseCapture(void)
138{
139 HWND hwndPrev;
140
141 dprintf(("USER32: ReleaseCapture"));
142 hwndPrev = GetCapture();
143 if(hwndPrev) {
144 SendMessageA(hwndPrev, WM_CAPTURECHANGED, 0L, 0L);
145 }
146 return OSLibWinSetCapture(0);
147}
148//******************************************************************************
149//******************************************************************************
Note: See TracBrowser for help on using the repository browser.