2010-11-24 77 views
1

我正在使用ClipCursor在窗口中锁定鼠标。如何检测窗口标题栏和窗口边框的高度(因此只有鼠标不能点击标题栏和最小化,恢复和最大化按钮)?检测窗口标题栏的高度

  • 标题栏的高度取决于操作系统(我无法给出明确的值)。
  • 我不确定边界在不同的操作系统下是否有不同的宽度。
  • 我在经典模式下使用Windows XP。
  • 当我更改为主题模式时,标题栏的高度发生变化,因此无法使用。
  • 没有使用特定的语言。

回答

1

它会工作得到窗户的客户端矩形,而不是它的完整矩形?我相信这将返回窗口的客户区,这是窗口的矩形减去边框和标题栏。

如果你走这条路线,你需要在调用ClipCursor()之前将rect转换成屏幕坐标。

2

您可以使用AutoIt。

您不必处理该特定的标题栏高度和边框宽度。请尝试将MouseCoordMode设置为相对客户端位置,将鼠标移至顶部/左侧位置并获取窗口客户端大小。这是你想让你的鼠标陷入的确切区域。

这些值可以在_MouseTrap函数中使用。它应该类似于你的ClipCursor()

旧的鼠标位置可以保存和恢复,但它没有任何意义,因为您的鼠标可能会重新定位到陷阱字段,所以我评论这一点。

#include <GuiConstantsEx.au3> 
#include <Misc.au3> 

Opt("MustDeclareVars", 1) 

_Main() 

Func _Main() 
    Local $GUI, $oldMouseCoordMode, $topLeft, $size ;,$oldMousePos 

    $GUI = GUICreate("Example MouseTrap", 392, 323) 
    GUISetBkColor(0xff0000, $GUI) 

    GUISetState() 

;~ $oldMousePos = MouseGetPos() 
    $oldMouseCoordMode = Opt("MouseCoordMode", 2) 
    MouseMove(0, 0, 0) 
    Opt("MouseCoordMode", 1) 
    $topLeft = MouseGetPos() 
;~ MouseMove($oldMousePos[0], $oldMousePos[1], 0) 
    $size = WinGetClientSize($GUI) 
    Opt("MouseCoordMode", $oldMouseCoordMode) 
    _MouseTrap($topLeft[0], $topLeft[1], $topLeft[0] + $size[0], $topLeft[1] + $size[1]) 

    While 1 
     Switch GUIGetMsg() 
      Case $GUI_EVENT_CLOSE 
       ExitLoop 
      Case Else 
       ;;; 
     EndSwitch 
    WEnd 
    _MouseTrap() 
    Exit 
EndFunc ;==>_Main 
1

我在浏览AutoIt帮助时发现了一个更具体的问题答案。在功能的描述_WinAPI_CreateRectRgn()有以下方式来获得所希望的大小:

#include <WinAPI.au3> 

; get height of window title and width of window frame - may be different when 
; XP theme is ON/OFF 
Global $htit = _WinAPI_GetSystemMetrics($SM_CYCAPTION) 
Global $frame = _WinAPI_GetSystemMetrics($SM_CXDLGFRAME) 
0

看起来像

GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYSIZEFRAME) 

是标题栏的正确高度

在AutoHotkey的
0

一种解决方案是简单地删除吧!这仍然可以让人们使用捷径操纵窗户,尽管...

^F11:: ; Ctrl+F11 = Toggle show Window title bar 
WinSet, Style, ^0xC00000, A ; Toggle the active window's title bar (WS_CAPTION). 
If (TopbarHide := !TopbarHide) ; 
    ToolTip Topbar Ctrl F11,A_ScreenWidth/2-50,0 
else 
    Tooltip 
Return