diff options
| author | Simon Krauter <trustablecode@gmail.com> | 2019-11-28 14:08:31 +0100 |
|---|---|---|
| committer | Simon Krauter <trustablecode@gmail.com> | 2019-11-28 14:08:31 +0100 |
| commit | 3841f1770ba68c7f1fea5960b5a812ac00f7e513 (patch) | |
| tree | 9edc9063e7eb8cddbc4241f2529008e6b95226d0 | |
| parent | e2b8ffbecf2edf004049757850c9cb79450fdd91 (diff) | |
| download | NiGui-3841f1770ba68c7f1fea5960b5a812ac00f7e513.tar.gz NiGui-3841f1770ba68c7f1fea5960b5a812ac00f7e513.zip | |
Windows: Center window on the screen which has the mouse cursor
| -rwxr-xr-x | src/nigui/private/windows/platform_impl.nim | 22 | ||||
| -rwxr-xr-x | src/nigui/private/windows/windows.nim | 4 |
2 files changed, 13 insertions, 13 deletions
diff --git a/src/nigui/private/windows/platform_impl.nim b/src/nigui/private/windows/platform_impl.nim index 28759ca..80368c6 100755 --- a/src/nigui/private/windows/platform_impl.nim +++ b/src/nigui/private/windows/platform_impl.nim @@ -892,18 +892,16 @@ method `y=`(window: WindowImpl, y: int) = window.pUpdatePosition() method centerOnScreen(window: WindowImpl) = - var rect: Rect - discard SystemParametersInfoW(SPI_GETWORKAREA, 0, rect.addr, 0) - window.fX = rect.left + (rect.right - window.width) div 2 - window.fY = rect.top + (rect.bottom - window.height) div 2 - window.pUpdatePosition() - - # TODO: regard multiple monitors - # var m = MonitorFromRect(rect, 0) - # var mi: MonitorInfo - # discard GetMonitorInfoA(m, mi) - # echo "GetMonitorInfoA: " & $mi.rcMonitor.left - # echo "GetMonitorInfoA: " & $mi.rcWork.left + # center on the screen which has the mouse cursor + var cursorPos: Point + discard GetCursorPos(cursorPos) + var monitorHandle = MonitorFromPoint(cursorPos, 0) + var mi: MonitorInfo + mi.cbSize = MonitorInfo.sizeOf.int32 + if GetMonitorInfoA(monitorHandle, mi): + window.fX = mi.rcWork.left + (mi.rcWork.right - mi.rcWork.left - window.width) div 2 + window.fY = mi.rcWork.top + (mi.rcWork.bottom - mi.rcWork.top - window.height) div 2 + window.pUpdatePosition() method `width=`*(window: WindowImpl, width: int) = procCall window.Window.`width=`(width) diff --git a/src/nigui/private/windows/windows.nim b/src/nigui/private/windows/windows.nim index cc0ad71..634af9c 100755 --- a/src/nigui/private/windows/windows.nim +++ b/src/nigui/private/windows/windows.nim @@ -429,7 +429,7 @@ proc GetSysColor*(nIndex: int32): RGB32 {.importc, libUser32.} proc InvalidateRect*(hWnd: pointer, lpRect: ref Rect, bErase: bool): bool {.importc, libUser32.} proc PostQuitMessage*(nExitCode: int32) {.importc, libUser32.} proc GetDesktopWindow*(): pointer {.importc, libUser32.} -proc SystemParametersInfoW*(uiAction, uiParam: int32, pvParam: pointer, fWinIni: int32): bool {.importc, libUser32.} +# proc SystemParametersInfoW*(uiAction, uiParam: int32, pvParam: pointer, fWinIni: int32): bool {.importc, libUser32.} proc ClientToScreen*(hWnd: pointer, lpPoint: var Point): bool {.importc, libUser32.} proc AdjustWindowRect*(lpRect: var Rect, dwStyle: int32, bMenu: bool): bool {.importc, libUser32.} proc LoadCursorA*(hInstance: pointer, lpCursorName: cstring): pointer {.importc, libUser32.} @@ -458,6 +458,8 @@ proc GetClipboardData*(uFormat: int32): pointer {.importc, libUser32.} proc SetClipboardData*(uFormat: int32, hMem: pointer): pointer {.importc, libUser32.} proc EmptyClipboard*(): bool {.importc, libUser32.} proc MapVirtualKeyW*(uCode, uMapType: int32): int32 {.importc, libUser32.} +proc GetCursorPos*(lpPoint: var Point): bool {.importc, libUser32.} +proc MonitorFromPoint*(pt: Point, dwFlags: int32): pointer {.importc, libUser32.} type GetDpiForWindowType* = proc(hWnd: pointer): int32 {.gcsafe, stdcall.} # not available on Windows 7 |
