def pointer_grab(window, *args): hwnd = get_window_handle(window) grablog("pointer_grab%s window=%s, hwnd=%s", args, window, hwnd) if not hwnd: window._client.pointer_grabbed = None return wrect = RECT() GetWindowRect(hwnd, byref(wrect)) grablog("GetWindowRect(%i)=%s", hwnd, wrect) if DwmGetWindowAttribute: # Vista & 7 stuff rect = RECT() DWMWA_EXTENDED_FRAME_BOUNDS = 9 DwmGetWindowAttribute(HWND(hwnd), DWORD(DWMWA_EXTENDED_FRAME_BOUNDS), byref(rect), sizeof(rect)) #wx1,wy1,wx2,wy2 = rect.left, rect.top, rect.right, rect.bottom grablog("DwmGetWindowAttribute: DWMWA_EXTENDED_FRAME_BOUNDS(%i)=%s", hwnd, (rect.left, rect.top, rect.right, rect.bottom)) bx = GetSystemMetrics(win32con.SM_CXSIZEFRAME) by = GetSystemMetrics(win32con.SM_CYSIZEFRAME) top = by style = GetWindowLongW(hwnd, win32con.GWL_STYLE) if style & win32con.WS_CAPTION: top += GetSystemMetrics(win32con.SM_CYCAPTION) grablog(" window style=%s, SIZEFRAME=%s, top=%i", style_str(style), (bx, by), top) coords = wrect.left + bx, wrect.top + top, wrect.right - bx, wrect.bottom - by clip = RECT(*coords) r = ClipCursor(clip) grablog("ClipCursor%s=%s", coords, r) window._client.pointer_grabbed = window._id
def pointer_ungrab(window, *args): hwnd = get_window_handle(window) grablog("pointer_ungrab%s window=%s, hwnd=%s", args, window, hwnd) if hwnd: grablog("ClipCursor(None)") ClipCursor(None) window._client.pointer_grabbed = False