grab.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:6k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1992 The Regents of the University of California.
  3. '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
  4. '"
  5. '" See the file "license.terms" for information on usage and redistribution
  6. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  7. '" 
  8. '" RCS: @(#) $Id: grab.n,v 1.2.26.1 2004/10/28 10:19:29 dkf Exp $
  9. '" 
  10. .so man.macros
  11. .TH grab n "" Tk "Tk Built-In Commands"
  12. .BS
  13. '" Note:  do not modify the .SH NAME line immediately below!
  14. .SH NAME
  15. grab - Confine pointer and keyboard events to a window sub-tree
  16. .SH SYNOPSIS
  17. fBgrab fR?fB-globalfR? fIwindowfR
  18. .sp
  19. fBgrab fIoption fR?fIarg arg fR...?
  20. .BE
  21. .SH DESCRIPTION
  22. .PP
  23. This command implements simple pointer and keyboard grabs for Tk.
  24. Tk's grabs are different than the grabs
  25. described in the Xlib documentation.
  26. When a grab is set for a particular window, Tk restricts all pointer
  27. events to the grab window and its descendants in Tk's window hierarchy.
  28. Whenever the pointer is within the grab window's subtree, the pointer
  29. will behave exactly the same as if there had been no grab at all
  30. and all events will be reported in the normal fashion.
  31. When the pointer is outside fIwindowfR's tree, button presses and
  32. releases and
  33. mouse motion events are reported to fIwindowfR, and window entry
  34. and window exit events are ignored.
  35. The grab subtree ``owns'' the pointer:
  36. windows outside the grab subtree will be visible on the screen
  37. but they will be insensitive until the grab is released.
  38. The tree of windows underneath the grab window can include top-level
  39. windows, in which case all of those top-level windows
  40. and their descendants will continue to receive mouse events
  41. during the grab.
  42. .PP
  43. Two forms of grabs are possible:  local and global.
  44. A local grab affects only the grabbing application:  events will
  45. be reported to other applications as if the grab had never occurred.
  46. Grabs are local by default.
  47. A global grab locks out all applications on the screen,
  48. so that only the given subtree of the grabbing application will be
  49. sensitive to pointer events (mouse button presses, mouse button releases,
  50. pointer motions, window entries, and window exits).
  51. During global grabs the window manager will not receive pointer
  52. events either.
  53. .PP
  54. During local grabs, keyboard events (key presses and key releases)
  55. are delivered as usual:  the window
  56. manager controls which application receives keyboard events, and
  57. if they are sent to any window in the grabbing application then they are
  58. redirected to the focus window.
  59. During a global grab Tk grabs the keyboard so that all keyboard events
  60. are always sent to the grabbing application.
  61. The fBfocusfR command is still used to determine which window in the
  62. application receives the keyboard events.
  63. The keyboard grab is released when the grab is released.
  64. .PP
  65. Grabs apply to particular displays.  If an application has windows
  66. on multiple displays then it can establish a separate grab on each
  67. display.
  68. The grab on a particular display affects only the windows on
  69. that display.
  70. It is possible for different applications on a single display to have
  71. simultaneous local grabs, but only one application can have a global
  72. grab on a given display at once.
  73. .PP
  74. The fBgrabfR command can take any of the following forms:
  75. .TP
  76. fBgrab fR?fB-globalfR? fIwindowfR
  77. Same as fBgrab setfR, described below.
  78. .TP
  79. fBgrab current fR?fIwindowfR?
  80. If fIwindowfR is specified, returns the name of the current grab
  81. window in this application for fIwindowfR's display, or an empty
  82. string if there is no such window.
  83. If fIwindowfR is omitted, the command returns a list whose elements
  84. are all of the windows grabbed by this application for all displays,
  85. or an empty string if the application has no grabs.
  86. .TP
  87. fBgrab release fIwindowfR
  88. Releases the grab on fIwindowfR if there is one, otherwise does
  89. nothing.  Returns an empty string.
  90. .TP
  91. fBgrab set fR?fB-globalfR? fIwindowfR
  92. Sets a grab on fIwindowfR.  If fB-globalfR is specified then the
  93. grab is global, otherwise it is local.
  94. If a grab was already in effect for this application on
  95. fIwindowfR's display then it is automatically released.
  96. If there is already a grab on fIwindowfR and it has the same
  97. global/local form as the requested grab, then the command
  98. does nothing.  Returns an empty string.
  99. .TP
  100. fBgrab status fIwindowfR
  101. Returns fBnonefR if no grab is currently set on fIwindowfR,
  102. fBlocalfR if a local grab is set on fIwindowfR, and
  103. fBglobalfR if a global grab is set.
  104. .SH WARNING
  105. It is very easy to use global grabs to render a display completely
  106. unusable (e.g. by setting a grab on a widget which does not respond to
  107. events and not providing any mechanism for releasing the grab).  Take
  108. fIextremefR care when using them!
  109. .SH BUGS
  110. .PP
  111. It took an incredibly complex and gross implementation to produce
  112. the simple grab effect described above.
  113. Given the current implementation, it isn't safe for applications
  114. to use the Xlib grab facilities at all except through the Tk grab
  115. procedures.
  116. If applications try to manipulate X's grab mechanisms directly,
  117. things will probably break.
  118. .PP
  119. If a single process is managing several different Tk applications,
  120. only one of those applications can have a local grab for a given
  121. display at any given time.  If the applications are in different
  122. processes, this restriction doesn't exist.
  123. .SH EXAMPLE
  124. Set a grab so that only one button may be clicked out of a group.  The
  125. other buttons are unresponsive to the mouse until the middle button is
  126. clicked.
  127. .CS
  128. pack [button .b1 -text "Click me! #1" -command {destroy .b1}]
  129. pack [button .b2 -text "Click me! #2" -command {destroy .b2}]
  130. pack [button .b3 -text "Click me! #3" -command {destroy .b3}]
  131. fBgrabfR .b2
  132. .CE
  133. .SH KEYWORDS
  134. grab, keyboard events, pointer events, window