Changeset 10185 for trunk/src/user32/winmouse.cpp
- Timestamp:
- Jul 28, 2003, 1:35:32 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/winmouse.cpp
r9019 r10185 1 /* $Id: winmouse.cpp,v 1.2 6 2002-08-16 16:49:05sandervl Exp $ */1 /* $Id: winmouse.cpp,v 1.27 2003-07-28 11:27:50 sandervl Exp $ */ 2 2 /* 3 3 * Win32 mouse functions … … 40 40 #include "hook.h" 41 41 42 #include <winkeyboard.h> 43 42 44 #define DBG_LOCALLOG DBG_winmouse 43 45 #include "dbglocal.h" … … 150 152 { 151 153 dprintf(("USER32: SetCapture %x; already set to that window; ignore", hwnd)); 154 //TODO: NT4 SP6 sends this message even now 155 //////// SendMessageA(hwndPrev, WM_CAPTURECHANGED, 0L, hwnd); 152 156 return hwndPrev; 153 157 } … … 252 256 INPUT i; 253 257 254 // format input packet255 258 i.type = INPUT_MOUSE; 256 259 i.mi.dx = dx; … … 292 295 // TranslateMessage posts an appropriate 293 296 // WM_CHAR message. 297 294 298 HWND hwnd = GetForegroundWindow(); 295 299 296 300 LPINPUT piBase = pInputs; 297 301 for (int i = 0; … … 305 309 { 306 310 PMOUSEINPUT p = (PMOUSEINPUT)&piBase->mi; 307 MSG msg; 308 309 // simulate mouse input message 310 // @@@PH 311 MSG msg; 312 HWND hwndCapture; 313 314 hwndCapture = GetCapture(); 315 if(hwndCapture) hwnd = hwndCapture; 316 317 if(p->dwFlags & MOUSEEVENTF_MOVE) 318 { 319 if(!(p->dwFlags & MOUSEEVENTF_ABSOLUTE)) { 320 POINT pt; 321 322 if(GetCursorPos(&pt) == TRUE) { 323 LONG relx = (LONG)p->dx; 324 LONG rely = (LONG)p->dy; 325 326 p->dx = pt.x + relx; 327 p->dy = pt.y + rely; 328 } 329 else { 330 DebugInt3(); 331 return 0; 332 } 333 } 334 SetCursorPos(p->dx, p->dy); 335 OSLibSendWinMessage(hwnd, WM_MOUSEMOVE); 336 } 337 338 if(p->dwFlags & MOUSEEVENTF_LEFTDOWN) 339 { 340 KeySetOverlayKeyState(VK_LBUTTON, KEYOVERLAYSTATE_DOWN); 341 OSLibSendWinMessage(hwnd, WM_LBUTTONDOWN); 342 } 343 if(p->dwFlags & MOUSEEVENTF_LEFTUP) 344 { 345 KeySetOverlayKeyState(VK_LBUTTON, KEYOVERLAYSTATE_DONTCARE); 346 OSLibSendWinMessage(hwnd, WM_LBUTTONUP); 347 } 348 if(p->dwFlags & MOUSEEVENTF_RIGHTDOWN) 349 { 350 KeySetOverlayKeyState(VK_RBUTTON, KEYOVERLAYSTATE_DOWN); 351 OSLibSendWinMessage(hwnd, WM_RBUTTONDOWN); 352 } 353 if(p->dwFlags & MOUSEEVENTF_RIGHTUP) 354 { 355 KeySetOverlayKeyState(VK_RBUTTON, KEYOVERLAYSTATE_DONTCARE); 356 OSLibSendWinMessage(hwnd, WM_RBUTTONUP); 357 } 358 if(p->dwFlags & MOUSEEVENTF_MIDDLEDOWN) 359 { 360 KeySetOverlayKeyState(VK_MBUTTON, KEYOVERLAYSTATE_DOWN); 361 OSLibSendWinMessage(hwnd, WM_MBUTTONDOWN); 362 } 363 if(p->dwFlags & MOUSEEVENTF_MIDDLEUP) 364 { 365 KeySetOverlayKeyState(VK_MBUTTON, KEYOVERLAYSTATE_DONTCARE); 366 OSLibSendWinMessage(hwnd, WM_MBUTTONUP); 367 } 311 368 } 312 369 break; … … 319 376 BOOL fUnicode = (p->dwFlags & KEYEVENTF_UNICODE) == KEYEVENTF_UNICODE; 320 377 DWORD extrainfo = GetMessageExtraInfo(); 378 379 //TODO: We should really send an OS/2 WM_CHAR message here and let 380 // our existing code handle everything (WM_CHAR generation) 381 // This is a quick and dirty implementation. Not entirely correct. 321 382 322 383 // build keyboard message … … 360 421 361 422 SetMessageExtraInfo( (LPARAM)p->dwExtraInfo ); 423 424 KeySetOverlayKeyState(msg.wParam, (msg.message == WM_KEYDOWN) ? KEYOVERLAYSTATE_DOWN : KEYOVERLAYSTATE_DONTCARE); 362 425 363 426 if (fUnicode) … … 365 428 else 366 429 SendMessageA(hwnd, msg.message, msg.wParam, msg.lParam); 367 430 431 if(msg.message == WM_KEYDOWN) { 432 char keybstate[256]; 433 WORD key = 0; 434 435 GetKeyboardState((LPBYTE)&keybstate[0]); 436 if(ToAscii(p->wVk, p->wScan, (LPBYTE)&keybstate[0], &key, 0) != 0) { 437 SendMessageA(hwnd, WM_CHAR, key, msg.lParam); 438 } 439 } 440 368 441 //restore extra info 369 442 SetMessageExtraInfo(extrainfo); … … 656 729 //****************************************************************************** 657 730 //****************************************************************************** 731 ULONG GetMouseKeyState() 732 { 733 ULONG keystate = 0; 734 735 if(GetKeyState(VK_LBUTTON) & 0x8000) 736 keystate |= MK_LBUTTON; 737 if(GetKeyState(VK_RBUTTON) & 0x8000) 738 keystate |= MK_RBUTTON; 739 if(GetKeyState(VK_MBUTTON) & 0x8000) 740 keystate |= MK_MBUTTON; 741 if(GetKeyState(VK_SHIFT) & 0x8000) 742 keystate |= MK_SHIFT; 743 if(GetKeyState(VK_CONTROL) & 0x8000) 744 keystate |= MK_CONTROL; 745 746 return keystate; 747 } 748 //****************************************************************************** 749 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.