home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pentlk11.zip / TLKTINFO.INF (.txt) < prev    next >
OS/2 Help File  |  1994-01-13  |  261KB  |  9,308 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Using the Online Reference ΓòÉΓòÉΓòÉ
  3.  
  4. Before you begin to use this reference, it would be helpful to understand how 
  5. you can: 
  6.  
  7. o Expand the Contents to see all available topics 
  8. o Obtain additional information for a highlighted word or phrase 
  9. o Use action bar choices. 
  10.  
  11. How To Use the Contents 
  12.  
  13. When the Contents window first appears, some topics have a plus (+) sign beside 
  14. them.  The plus sign indicates that additional topics are available. 
  15.  
  16. To expand the Contents if you are using a mouse, select the plus sign (+).  If 
  17. you are using a keyboard, use the Up or Down Arrow key to highlight the topic, 
  18. and press the plus key (+). 
  19.  
  20. To view a topic, double-click on the topic (or press the Up or Down Arrow key 
  21. to highlight the topic, and then press Enter). 
  22.  
  23. How To Obtain Additional Information 
  24.  
  25. After you select a topic, the information for that topic appears in a window. 
  26. Highlighted words or phrases indicate that additional information is available. 
  27. You will notice that certain words in the following paragraph are highlighted 
  28. in green letters, or in white letters on a black background. These are called 
  29. hypertext terms.  If you are using a mouse, double-click on the highlighted 
  30. word.  If you are using a keyboard, press the Tab key to move to the 
  31. highlighted word, and then press the Enter key.  Additional information will 
  32. appear in a window. 
  33.  
  34. How To Use Action Bar Choices 
  35.  
  36. Several choices are available for managing information presented in the Pen for 
  37. OS/2 Programming Guide and Reference.  There are three pull-down menus on the 
  38. action bar:  the Services menu, the Options menu, and the Help menu. 
  39.  
  40. The actions that are selectable from the Services menu operate on the active 
  41. window currently displayed on the screen.  These actions include the following: 
  42.  
  43. Bookmark 
  44.           Sets a place holder so you can retrieve information of interest to 
  45.           you. 
  46.  
  47. Search 
  48.           Finds occurrences of a word or phrase in the current topic, selected 
  49.           topics, or all topics. 
  50.  
  51. Print 
  52.           Prints one or more topics.  You can also print a set of topics by 
  53.           first marking the topics in the Contents list. 
  54.  
  55. Copy 
  56.           Copies a topic you are viewing to a file you can edit. 
  57.  
  58. Options 
  59.           Changes the way the Contents is displayed. 
  60.  
  61.  
  62. ΓòÉΓòÉΓòÉ 2. About This Book ΓòÉΓòÉΓòÉ
  63.  
  64. The Pen for OS/2 Programming Guide and Reference is a guide and reference for 
  65. developing applications that make use of the Pen for OS/2 system extension. 
  66.  
  67.  
  68. ΓòÉΓòÉΓòÉ 2.1. Who Should Use This Book ΓòÉΓòÉΓòÉ
  69.  
  70. This book is for developers who are creating Pen for OS/2 program applications, 
  71. or those developers who want their existing applications to make use of Pen for 
  72. OS/2 features. 
  73.  
  74.  
  75. ΓòÉΓòÉΓòÉ 2.2. How This Book Is Organized ΓòÉΓòÉΓòÉ
  76.  
  77. This book is organized in two parts: 
  78.  
  79. o A Pen for OS/2 programming guide 
  80. o A Pen for OS/2 application programming interface (API) reference 
  81.  
  82. Part 1: "Pen for OS/2 Programming Guide" provides an overview of Pen for OS/2 
  83. and describes how to create pen-aware applications. It also provides 
  84. information about how pen-unaware applications can be used with Pen for OS/2. 
  85. Part 1 contains the following chapters: 
  86.  
  87. o "Pen for OS/2 System Extension Overview" introduces Pen for OS/2, describes 
  88.   its components, and discusses the program from an application developer's 
  89.   point of view. "Pen for OS/2 System Extension Architecture" describes how Pen 
  90.   for OS/2 is structured.  This chapter also includes an introduction to 
  91.   programming with Pen for OS/2 and provides a discussion of design 
  92.   considerations. 
  93.  
  94. o "Using Ink" describes the different ways in which input strokes can be inked. 
  95.   It explains how you can use notification messages to do your own inking in an 
  96.   application, or let Pen for OS/2 do the inking for you. 
  97.  
  98. o "Using Gestures" explains what gestures are and how they can be used with Pen 
  99.   for OS/2. This chapter lists and describes the three types of predefined Pen 
  100.   for OS/2 gestures:  core gestures, noncore gestures, and letter gestures. 
  101.  
  102. o "Using the Sketch Control" describes the sketch input control. This control 
  103.   can be included in any Presentation Manager (PM) application to let users 
  104.   input strokes and then have the strokes copied to the clipboard or saved as a 
  105.   bit map. You can control the pointer shape, ink color, and ink width. 
  106.  
  107. o "Using the Handwriting Entry Control" describes the handwriting control that 
  108.   lets users input handwritten text. This control recognizes and converts 
  109.   handwritten text to characters and can be included in any PM application. The 
  110.   chapter explains how a handwriting input control can be used in a client 
  111.   window or as part of a dialog template. 
  112.  
  113. o "Using Virtual Keyboards and the Pop-Up Keyboard Tool" describes the Pen for 
  114.   OS/2 keyboards that can be displayed in an application. Keyboards let users 
  115.   create keystokes using a pointing device. The chapter also explains how to 
  116.   select and control keyboards. 
  117.  
  118. o "Using System Variables" explains how to use system variables to query system 
  119.   information and customize the operation of your system. 
  120.  
  121. o "Using Device Drivers" explains how to use Pen for OS/2 device drivers to 
  122.   control and manage pen hardware. 
  123.  
  124. Part 2:  "Pen for OS/2 Programming Reference" lists API functions, messages, 
  125. and data structures. Part 2 contains the following chapters: 
  126.  
  127. o "Pen for OS/2 Writing Subsystem API" lists the syntax, parameters, return 
  128.   codes, and remarks for the Pen for OS/2 API. 
  129.  
  130. o "Pen for OS/2 Writing Subsystem Messages" lists and describes the Pen for 
  131.   OS/2 writing subsystem messages. 
  132.  
  133. o "Pen for OS/2 Writing Subsystem Data Structures" lists the Pen for OS/2 
  134.   writing subsystem data structures. 
  135.  
  136. o "Recognition Event Delivery Subsystem API" lists the syntax, parameters, 
  137.   return codes, and remarks for the Recognition Event Delivery Subsystem APIs. 
  138.  
  139. o "Recognition Event Delivery Subsystem Messages" lists and describes the 
  140.   Recognition Event Delivery Subsystem messages. 
  141.  
  142. o "Recognition Event Delivery Subsystem Data Structure" lists the Recognition 
  143.   Event Delivery Subsystem data structures. 
  144.  
  145. o "Sketch Control Programming Interface" lists the sketch control style bits, 
  146.   control messages, and notification messages. 
  147.  
  148. o "Handwriting Input Control Programming Interface" lists and describes the 
  149.   handwriting input control style bits, notification messages, and display 
  150.   colors. 
  151.  
  152. o "Virtual Keyboard Playback API" lists and describes the Pop-Up Keyboard APIs. 
  153.  
  154. o "Pen for OS/2 Setup Objects" lists and describes the Workplace Shell that 
  155.   make up the Pen for OS/2 Setup Objects. 
  156.  
  157. o "Appendix A. Pen for OS/2 Libraries and Header Files" describes the Pen for 
  158.   OS/2 libraries and header files. 
  159.  
  160.  
  161. ΓòÉΓòÉΓòÉ 2.3. Related Publications ΓòÉΓòÉΓòÉ
  162.  
  163. The Pen for OS/2 library includes the following related publications: 
  164.  
  165. o Pen for OS/2 Developer's Toolkit:  Getting Started, 71G2123 
  166.  
  167. o Pen for OS/2 Device Driver Reference, 71G2125 
  168.  
  169. o Pen for OS/2 User's Guide, 71G2122 
  170.  
  171. The following books contain information you might need to reference when using 
  172. this book: 
  173.  
  174. o Developer's Toolkit for OS/2, Version 2.1, 61G1416 
  175.  
  176. o OS/2 System Object Model Guide and Reference, 10G6309 
  177.  
  178.  
  179. ΓòÉΓòÉΓòÉ 3. Part 1:  Pen for OS/2 Programming Guide ΓòÉΓòÉΓòÉ
  180.  
  181.  
  182. ΓòÉΓòÉΓòÉ 4. Pen for OS/2 System Extension Overview ΓòÉΓòÉΓòÉ
  183.  
  184. The Pen for OS/2 system extension is a series of software extensions to the IBM 
  185. OS/2 2.1 operating system and the Presentation Manager (PM) component that 
  186. provide for pen-based input and recognition. Pen for OS/2 supports a variety of 
  187. computers and peripherals that are designed for use with a pen as a primary 
  188. input device.  Pen for OS/2 encourages the design and development of new 
  189. pen-oriented application programs, provides a means for enhancing existing 
  190. applications with new features, and allows for the continued use of the 
  191. existing OS/2 operating system PM programs without change. 
  192.  
  193.  
  194. ΓòÉΓòÉΓòÉ 4.1. Introduction ΓòÉΓòÉΓòÉ
  195.  
  196. Pen for OS/2 provides support for the pen as a new input device for the OS/2 
  197. operating system in desktop and portable environments.  There are many 
  198. applications for the pen in the desktop environment, such as interactive 
  199. teleconferencing, the annotation of electronic mail or scanned forms, quick 
  200. notes taken and appended to a customer file by a service representative, and 
  201. even forms fill-in by customers sitting at a sales desk.  Presentations can now 
  202. include hand-drawn sketches previously impractical with the mouse, and 
  203. documents (letters, credit card slips, and so forth) can now be signed online 
  204. and stored without scanning. 
  205.  
  206. The pen is a natural writing and pointing device. By replacing the mouse for 
  207. navigating the Workplace Shell  and all application windows, the result is a 
  208. better user interface for OS/2 PM on the desktop. 
  209.  
  210. Pen for OS/2 supports all existing, unmodified applications through pen-based 
  211. pointing and selection techniques and hand-drawn gesture commands to invoke 
  212. actions. In essence, the pen looks like a mouse to most applications. However, 
  213. the user has access to a new series of tools to manipulate those "pen-unaware" 
  214. applications. 
  215.  
  216. The APIs described in this book allow you to access the new capabilities of 
  217. these pen-based computers.  These include the smooth tracking of a user's 
  218. handwriting for annotating text or images, and the use of special pen features, 
  219. such as pressure or height above the screen, or buttons on the pen barrel, to 
  220. enhance user-interface techniques.  Pen digitizers are generally packaged under 
  221. flat LCD displays to allow the easy placement of the writing surface on the 
  222. desk or on a person's lap. You will also have access to new display 
  223. capabilities, such as auxiliary buttons on the bezel and control of the LCD's 
  224. backlight. 
  225.  
  226. To capture and recognize printed characters, you will be able to include 
  227. handwriting fields in dialogs and forms. 
  228.  
  229. Pen for OS/2 provides pen-based facilities for writing new Presentation Manager 
  230. applications that take advantage of the pen/ink on paper metaphor. However, 
  231. although the emphasis is on Presentation Manager applications, a level of 
  232. compatibility is provided for unmodified applications running in the 
  233. full-screen sessions that OS/2 provides. The full-screen OS/2 and DOS sessions 
  234. are supported with mouse emulation and any other features that the device 
  235. support provides, such as hot key buttons on the bezel or mouse button 2 
  236. emulation on the pen's side button.  However, gesture recognition, handwriting 
  237. recognition, and the ink display is not provided for full-screen programs. The 
  238. Pen for OS/2 API is not available to full-screen sessions. 
  239.  
  240.  
  241. ΓòÉΓòÉΓòÉ 4.2. Developer's Perspective ΓòÉΓòÉΓòÉ
  242.  
  243. Pen for OS/2 is designed to provide multiple approaches for pen-based 
  244. functions. Pen for OS/2 primarily provides pen computing functions for the 
  245. Presentation Manager environment.  However, compatibility support is provided 
  246. for OS/2, DOS, and Windows programs when they are running in the PM 
  247. environment. 
  248.  
  249.  
  250. ΓòÉΓòÉΓòÉ 4.2.1. Pen for OS/2 Extensions to the OS/2 Toolkit ΓòÉΓòÉΓòÉ
  251.  
  252. Pen for OS/2 extensions to the OS/2 Toolkit provides a toolkit for software 
  253. developers. It extends the same programming environment already provided by the 
  254. OS/2 operating system and PM component, so the programming concepts in Pen for 
  255. OS/2 will not be new to developers. This enables developers to easily add Pen 
  256. for OS/2 features to their programs. Pen for OS/2 runs on a variety of pen 
  257. computers made by different manufacturers, and because Pen for OS/2 provides a 
  258. device-independent interface to programs, all developers are encouraged to 
  259. include Pen for OS/2 features. 
  260.  
  261. The Pen for OS/2 extensions to the OS/2 Toolkit provides files additional to 
  262. those received with the basic OS/2 2.1 Toolkit.  The OS/2 2.1 Toolkit is a 
  263. prerequisite, and the same compilers and debuggers used to develop OS/2 2.1 
  264. programs can be used to develop pen programs. The Pen for OS/2 extensions to 
  265. the OS/2 Toolkit contains all the header and import library files necessary to 
  266. write pen-aware programs and gesture-mapping tools. The runtime components of 
  267. Pen for OS/2 contain the DLLs necessary for executing these programs. 
  268.  
  269.  
  270. ΓòÉΓòÉΓòÉ 4.2.2. Categories of Pen Applications ΓòÉΓòÉΓòÉ
  271.  
  272. To aid in the description of pen computing, it is useful to define the 
  273. different categories of pen applications. They fall into two categories: 
  274. pen-unaware and pen-aware. 
  275.  
  276. o Pen-unaware applications are those that are written to use a keyboard and 
  277.   mouse; this category includes all current PM and Windows programs.  Pen for 
  278.   OS/2 supports these unmodified applications through a Compatibility Layer, 
  279.   which assigns pen usage to messages that these applications are already 
  280.   programmed to expect. 
  281.  
  282. o Pen-aware applications are those that have been modified through procedures 
  283.   from the Pen for OS/2 extensions to the OS/2 Toolkit. The degree to which a 
  284.   program is pen-aware spans a broad range. It usually depends on the level of 
  285.   integration of pen concepts by the developer of the program. The degree of 
  286.   pen-awareness has a direct effect on: 
  287.  
  288.    - The user interface, especially direct manipulation 
  289.    - The level of pen-specific functionality 
  290.    - The level of effort to integrate Pen for OS/2 facilities 
  291.  
  292. The following are the high and low ends of the range of pen-awareness: 
  293.  
  294. o At the low end of the range, applications make entry-level usage of the Pen 
  295.   for OS/2 extensions to the OS/2 Toolkit.  Capabilities such as detecting 
  296.   which gesture is drawn or detecting that the pen came near the screen are 
  297.   examples of functions in this category. 
  298.  
  299. o At the high end of the range, programs are designed with the pen in mind. 
  300.   Developers of these programs use many features of the Pen for OS/2 extensions 
  301.   to the OS/2 Toolkit and to a large degree control processing and 
  302.   interpretation of the pen input. These programs also can assist the system 
  303.   during handwriting recognition by specifying the context of the writing and 
  304.   constantly updating this information based on what the user is doing at any 
  305.   time. 
  306.  
  307. It is not necessary for programs to register themselves with the system as 
  308. "pen-aware". The amount of pen-awareness is up to the developer; the system 
  309. will detect the level of awareness through the responses to several new 
  310. messages and through the use of new function calls provided with Pen for OS/2. 
  311.  
  312.  
  313. ΓòÉΓòÉΓòÉ 4.2.3. Approaches to Writing Pen for OS/2 Applications ΓòÉΓòÉΓòÉ
  314.  
  315. There are three approaches which a developer can take to exploit the Pen for 
  316. OS/2 system extension. The approaches are: 
  317.  
  318. o Writing gesture-mapping tools 
  319. o Modifying existing application code 
  320. o Writing new pen-specific applications 
  321.  
  322. The first approach, writing gesture-mapping tools, requires the least effort. 
  323. The recommended gesture-mapping tools are included as part of the installation 
  324. utility. These tools convert gesture commands to actions understood by existing 
  325. programs. This approach requires no change to the application code. 
  326.  
  327. The second approach is to identify specific areas of your existing application 
  328. which would benefit from integrating some of the Pen for OS/2 tools at points 
  329. within the program code. An example is adding the ability to attach a freehand 
  330. note to a spreadsheet cell. In this approach, most of the application's code 
  331. remains unchanged. 
  332.  
  333. The third approach, which requires the most effort, is writing pen applications 
  334. from scratch. Generally, these applications include some of the following 
  335. traits: 
  336.  
  337. o Highly interactive freehand drawing which would be "unnatural" with a mouse 
  338. o Application participation in the recognition process 
  339. o Dynamic changes in gesture- and character-recognition modes 
  340.  
  341.  
  342. ΓòÉΓòÉΓòÉ 4.2.4. Application Considerations ΓòÉΓòÉΓòÉ
  343.  
  344. The following are considerations in using Pen for OS/2 applications: 
  345.  
  346. o Although the emphasis is on pen interfaces, many of the benefits of the pen 
  347.   can also be achieved through the use of finger touch on devices. Application 
  348.   developers can distinguish between pen and finger when input devices support 
  349.   such a distinction. 
  350.  
  351. o The primary hardware components of pen computing are the display and the 
  352.   digitizer. Because digitizer hardware is evolving, Pen for OS/2 is flexible 
  353.   in accommodating a wide range of features. Some manufacturers allow for 
  354.   finger as well as pen input, for example. 
  355.  
  356. o The pen allows the keyboard to be eliminated in many applications and 
  357.   therefore reduces the physical dimensions and weight of the system. The pen 
  358.   can scale down to smaller writing surfaces better than the keyboard can. 
  359.  
  360. o The most innovative feature of pen computing is the ability to recognize 
  361.   handwriting.  Pen for OS/2 has integrated features built around its ability 
  362.   to interpret the "ink" from the pen as commands and data. 
  363.  
  364. o Pen for OS/2 allows a user to more easily annotate spreadsheets and 
  365.   documents, because a pen is a more natural tool to make freehand drawings, 
  366.   legible writing, and signatures. 
  367.  
  368.  
  369. ΓòÉΓòÉΓòÉ 5. Pen for OS/2 System Extension Architecture ΓòÉΓòÉΓòÉ
  370.  
  371. This chapter highlights the primary hardware components of pen computing and 
  372. its 2-tier architecture. It describes how the Pen for OS/2 system extension is 
  373. structured in terms of its device-independent interface and writing subsystem. 
  374. Also included is a description of how Pen for OS/2 accommodates existing 
  375. pen-unaware programs. Some design considerations are discussed, and the 
  376. developer is introduced to APIs in the Pen for OS/2 extensions to the OS/2 
  377. Toolkit. 
  378.  
  379.  
  380. ΓòÉΓòÉΓòÉ 5.1. System Structure ΓòÉΓòÉΓòÉ
  381.  
  382. The following block diagram shows the various Pen for OS/2 subsystem components 
  383. and how they relate to each other. 
  384.  
  385.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  386.    Γöé                  Γöé   Pen
  387.    Γöé  Device Drivers  Γöé    Mouse
  388.    Γöé                  Γöé     Keyboard
  389.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  390.      Events 
  391.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  392.    Γöé  System Queues   Γöé Γöé               Γöé
  393.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé   OS/2 PM     Γöé
  394.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ               Γöé
  395.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  396.             Γöé                                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  397.             Γöé                                       Γöé   Handwriting    Γöé
  398.             Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé   Recognition    Γöé
  399.             Γöé    Γöé                                  Γöé                  Γöé
  400.                                                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  401.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  402.    Γöé  Pen Extensions  Γöé    Γöé  Compatibility   Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  403.    Γöé     and New      Γö£ΓöÇΓöÇΓöÇΓöé      Layer       ΓöéΓöÇΓöÇΓöÇΓöé   Gesture        Γöé
  404.    Γöé  Window Controls Γöé    Γöé                  Γöé     Γöé   Recognition    Γöé
  405.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé                  Γöé
  406.             Γöé                     Γöé     Γöé           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  407.             Γöé                     Γöé     Γöé
  408.             Γöé                     Γöé     Γöé        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  409.             Γöé                     Γöé     Γöé        Γöé   Recognition    Γöé
  410.             Γöé                     Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé   Event          Γöé
  411.             Γöé                     Γöé              Γöé   Delivery       Γöé
  412.             Γöé                     Γöé              ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  413.             Γöé                     Γöé              ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  414.             Γöé                     Γöé              Γöé        Γöé Γöé       Γöé
  415.             Γöé                     Γöé              ΓöéProfilesΓöé Γöé Tools Γöé
  416.             Γöé                     Γöé              Γöé        Γöé Γöé       Γöé
  417.             Γöé                     Γöé              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  418.                                                               Γöé
  419.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                 Γöé
  420.    Γöé                  Γöé    Γöé                  Γöé                 Γöé
  421.    Γöé     Pen-Aware    Γö£ΓöÉ   Γöé     Unaware      ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  422.    Γöé   Applications   ΓöéΓöé   Γöé   Applications   Γöé
  423.    ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  424.      ΓöéMini-ApplicationsΓöé
  425.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  426.                             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  427.                             Γöé     Pen for OS/2    Γöé   Γöé  Setup  Γöé
  428.                             Γöé     Installation    Γöé   Γöé Objects Γöé
  429.                             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  430. System Structure 
  431.  
  432.  
  433. ΓòÉΓòÉΓòÉ 5.2. Device-Independent Interface ΓòÉΓòÉΓòÉ
  434.  
  435. Pen for OS/2 has a device-independent interface that allows Pen for OS/2 to 
  436. provide a consistent programming model to developers. 
  437.  
  438. Pen for OS/2 achieves independence through the definition of an "input model", 
  439. which is the basis for the programming interfaces that developers will use. 
  440. This model isolates the programmer from the differences between the various 
  441. manufacturers and allows extensions to the model.  This allows original 
  442. equipment manufacturers (OEMs) to deliver some unique device data to programs 
  443. written specifically to expect them. 
  444.  
  445. Device independence is achieved through a 2-tier architecture.  Hardware 
  446. manufacturers supply a device-dependent pen device driver to handle the low 
  447. level device-specific requirements of their hardware device. This 
  448. device-dependent driver registers with the IBM-supplied device-independent pen 
  449. device driver services during initialization. They communicate all events and 
  450. device capabilities though a well-documented set of interfaces. The types of 
  451. information supplied include: 
  452.  
  453. o Mouse emulation 
  454. o Position (X,Y) 
  455. o Contact status 
  456. o Proximity status 
  457. o Time stamp 
  458. o Pressure value 
  459. o Height value 
  460. o Angle/rotation of the pen 
  461. o Status of buttons on the pen 
  462. o Status of buttons on the tablet or bezel 
  463. o Resolution and sampling rate information 
  464. o Smart pen features (memory, personal identification number (PIN)) 
  465.  
  466. The device-independent device driver services provide the following: 
  467.  
  468. o A common interface for all pointing devices. 
  469.  
  470. o A means to deliver the stroke event data to higher-level operating system 
  471.   components. Because these interfaces might change in future releases of the 
  472.   operating system, this module serves to isolate original equipment 
  473.   manufacturers from these details. 
  474.  
  475. o The ability to have several physical pointing devices active concurrently. It 
  476.   is reasonable to expect that users of mouse devices will eventually convert 
  477.   completely to a pen when available. In the interim, however, Pen for OS/2 
  478.   will support the use of the pen and the mouse on the same system. It will 
  479.   determine which device is being used and dynamically disable the other 
  480.   devices. 
  481.  
  482. o The registration of several logical subdevices so that unique device features 
  483.   such as bezel buttons or the use of finger or pen can be monitored and 
  484.   reported to the system independently. 
  485.  
  486. o The mapping of device information into a consistent model for delivery to 
  487.   higher-level components. 
  488.  
  489. o The emulation of standard mouse events for compatibility with existing 
  490.   programs and operating system components. This includes the translation from 
  491.   high resolution (digitizer) to low resolution (screen/mouse) coordinate 
  492.   systems and the simulation of mouse button clicks. 
  493.  
  494. o The buffering of high-speed data into an internal cache. 
  495.  
  496.  
  497. ΓòÉΓòÉΓòÉ 5.3. API Categories ΓòÉΓòÉΓòÉ
  498.  
  499. The application programming interfaces supplied with the Pen for OS/2 
  500. extensions to the OS/2 Toolkit fall into four categories: 
  501.  
  502. Pen Writing Subsystem (WRT) 
  503.      These are the main APIs that allow developers to see and control pen and 
  504.      stroke data and to interact with the general pen subsystem facilities. 
  505.      This category also includes new OS/2 messages which report the various 
  506.      asynchronous events and state changes associated with the pen extensions. 
  507.  
  508. Recognition Event Delivery (RED) 
  509.      This set of APIs aids developers in the interpretation of 
  510.      command-recognition events, such as gestures.  The purpose of RED is to 
  511.      deliver recognition results to aware and unaware programs. In the case of 
  512.      unaware programs, RED further handles the process of delivering the events 
  513.      to them by using a set of profiles to invoke special-purpose tools and 
  514.      command handlers.  The RED APIs let developers write and register these 
  515.      command handlers with the system. 
  516.  
  517. Virtual Keyboard Playback 
  518.      These APIs provide a level of control over the Pop-Up Keyboard tool. 
  519.  
  520. New Window Controls 
  521.      Two new window controls are provided:  the handwriting input control and 
  522.      the sketch control.  A set of APIs (messages) are defined for these 
  523.      controls to allow for the customization of their behavior and for the 
  524.      input and output data flows to and from the controls. The handwriting 
  525.      input pad and the sketch pad are tools provided in the Pen for OS/2 
  526.      extensions to the OS/2 Toolkit. These tools are clients of the two 
  527.      controls. 
  528.  
  529.  
  530. ΓòÉΓòÉΓòÉ 5.4. Writing Subsystem ΓòÉΓòÉΓòÉ
  531.  
  532. Pen for OS/2 provides a functional extension to the existing PM input 
  533. subsystem. Programs written to expect mouse-event messages will continue to see 
  534. these messages, but a new set of messages are also provided to applications. 
  535. The definition of new messages, APIs, and data structures are provided in this 
  536. book. 
  537.  
  538. The Pen for OS/2 writing subsystem is responsible for receiving stroke data 
  539. from the input queue and the internal cache, determining which window gets the 
  540. data, and sending PM messages to that window. 
  541.  
  542. A new set of messages comes with Pen for OS/2. The following briefly describes 
  543. a few of the key messages: 
  544.  
  545. WM_TOUCHDOWN 
  546.      This message is sent whenever the pen tip, mouse, or finger comes in 
  547.      contact with the surface. 
  548.  
  549.      For compatibility reasons, this message normally is followed by a 
  550.      WM_BUTTONxDOWN.  However, WM_TOUCHDOWN should not be confused with 
  551.      WM_BUTTONxDOWN, which might be delayed or suppressed by the user-interface 
  552.      components of Pen for OS/2. 
  553.  
  554.      This message also signals the start of a stroke.  The application should 
  555.      use this message to specify the processing options. 
  556.  
  557. WM_LIFTOFF 
  558.      This message is sent when the pen tip, mouse, or finger comes out of 
  559.      contact with the surface. This message also signals the ending of a 
  560.      stroke. 
  561.  
  562. WM_EXIT_PROXIMITY 
  563.      This message is sent whenever the pen leaves the proximity zone. Usually, 
  564.      this message is used to signal the end of a series of strokes for 
  565.      recognition. If the device does not support proximity detection, another 
  566.      detection method is necessary, such as position of the pen or a timeout. 
  567.  
  568. WM_STROKE 
  569.      This message signals that a stroke is available and the application can 
  570.      access a structure that represents that stroke. 
  571.  
  572. WM_SENSOR_MOVE 
  573.      This message is similar to WM_MOUSEMOVE, but it is generated whenever 
  574.      there is movement on the surface. The coordinates reported are in 
  575.      digitizer resolution, which is usually higher than the resolution of the 
  576.      display device. 
  577.  
  578. WM_PAUSE_TIMEOUT 
  579.      This message signals that after coming in contact with the surface, the 
  580.      user did not move the pen for a preset time interval (usually about 
  581.      200-300 milliseconds). This is sometimes known as the pause gesture.  By 
  582.      default, this gesture results in an emulated mouse-button event, which is 
  583.      used to signal the start of a selection or move. This message will not be 
  584.      sent after users start a move, even if they subsequently pause. 
  585.  
  586. WM_RECO 
  587.      This message informs an application that a recognition event, such as a 
  588.      gesture shape, is being delivered to its window.  It can interpret the 
  589.      event itself or it can have the system do it on its behalf. 
  590.  
  591. Pen for OS/2 maintains a stroke buffer to collect all the points in the 
  592. movement of the pen between the touch-down point and the lift-off point.  For 
  593. the majority of cases, this will eliminate the need for developers to have to 
  594. track the movement of the pen themselves. At the completion of a stroke, the 
  595. application receives a WM_STROKE message and it can access the stroke data 
  596. through an API.  Optionally, conversion options can be requested during the 
  597. retrieval of the stroke buffer.  This is useful if the application writer wants 
  598. to convert the high-resolution point stream to screen resolution or to have the 
  599. points translated to the origin of a specific window on the screen. 
  600.  
  601. As points are entered into the stroke buffer, they are connected to previous 
  602. points and displayed on the screen to give the appearance of ink flowing from 
  603. the point of the pen. The inking is performed in such a way as to not interfere 
  604. with the underlying graphical display data. 
  605.  
  606.  
  607. ΓòÉΓòÉΓòÉ 5.5. Compatibility Layer ΓòÉΓòÉΓòÉ
  608.  
  609. Pen for OS/2 accommodates existing pen-unaware applications. To accomplish 
  610. this, Pen for OS/2 provides a Compatibility Layer. In many cases, the Pen for 
  611. OS/2 extensions to the OS/2 Toolkit allows these applications to be augmented 
  612. by the user with pen features, such as handwriting recognition and 
  613. gesture-invoked shortcuts or editing. 
  614.  
  615. The basic function that the Compatibility Layer provides is the conversion of 
  616. pen events to mouse and keyboard events or the invocation of special-purpose 
  617. command handlers that can be registered with the system. Because all PM 
  618. applications are already designed to work with mouse and keyboard input, 
  619. compatibility is achieved at this level for all applications. The conversion of 
  620. pen events to mouse and keyboard events is accomplished either in the writing 
  621. subsystem or by tools invoked through gestures or other means that send mouse 
  622. and keyboard events to unaware applications. Although these tools are usually 
  623. pen-aware, there is no requirement that they be pen-aware. 
  624.  
  625. The following list shows how some pen operations are mapped to mouse events: 
  626.  
  627. Touch down and pause          Mouse button down 
  628.  
  629. Touch down, pause, move       Begin drag or selection 
  630.  
  631. Lift off                      Mouse button up 
  632.  
  633. Tap                           Mouse button click (down/up) 
  634.  
  635. Double-tap                    Mouse double-click (down/up/dblclk/up) 
  636.  
  637. Move pen                      Mouse move 
  638.  
  639. In certain cases, a touchdown will immediately be mapped to a mouse-button-down 
  640. event, without requiring the user to pause. This usually happens in an area of 
  641. the screen that has no function other than to select or start to drag. However, 
  642. this is not the standard behavior because most areas of the screen are capable 
  643. of having gesture commands drawn on them and, therefore, need the pause. 
  644.  
  645. The Pen for OS/2 mouse emulation for pen and finger devices allows for the 
  646. emulation of 2- and 3-button mice.  This emulation is usually set to On by 
  647. pressing an auxiliary button on the pen or a bezel button on the digitizer or 
  648. display. If these buttons do not exit, a mouse button 2 emulation can be set 
  649. using the Pen for OS/2 Tool Bar. 
  650.  
  651. An OS/2 system without Pen for OS/2 will often coalesce incremental movements 
  652. from the mouse, especially during periods of high-system or background 
  653. activity.  This usually results in "jumpy" selections or uneven curves in 
  654. drawing.  Pen for OS/2 solves this problem for handwriting tracking, it has the 
  655. ability to reinsert points that the PM component discarded.  This feature, the 
  656. high-frequency mouse move, is implemented as an option that the user can turn 
  657. on through the program object Settings notebook. It is provided especially for 
  658. existing unmodified applications. 
  659.  
  660.  
  661. ΓòÉΓòÉΓòÉ 5.6. Recognition Event Delivery ΓòÉΓòÉΓòÉ
  662.  
  663. For unaware applications, the Compatibility Layer will collect strokes and 
  664. build a doodle on behalf of the unaware application. When the "doodle" is 
  665. complete, an attempt will be made to recognize it as a gesture. If it matches 
  666. one of the shapes in the gesture library, the Compatibility Layer will send the 
  667. event on to the Recognition Event Delivery (RED) component to map the gesture 
  668. into a command, using a set of profiles the user has supplied. These mapping 
  669. profiles are associated with the program and program file objects.  The 
  670. profiles can be queried and set through the gestures-mapping page of the 
  671. Setting notebook for the program and program file objects. 
  672.  
  673. The result of gesture assignment is a command and optional parameters. the 
  674. command can take the form of a built-in function provided by Pen for OS/2 (such 
  675. as the playing back of keystrokes or minimizing a window), a built-in function 
  676. supplied by the user or an application, or simply the name of a program to be 
  677. invoked. 
  678.  
  679. The following is a description of the flow between the Pen for OS/2 Writing 
  680. Subsystem, the Pen for OS/2 Compatibility Layer, and the Recognition Event 
  681. Delivery Subsystem.  The following figure graphically shows this flow. 
  682.  
  683.    ΓöîΓöÇ Digitizer ΓöÇΓöÉ
  684.    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  685.    ΓöéOΓöé         ΓöéOΓöé    Γöé Pen    Γöé
  686.    Γöé Γöé         Γöé Γö£ΓöÇΓöÇΓöÇΓöé Device Γöé
  687.    ΓöéOΓöé         ΓöéOΓöé    Γöé Driver Γöé
  688.    Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé    ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  689.    ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ        Γöé             Γöé     Gesture     Γöé
  690.       ΓööΓöÇΓöÇΓöÇΓöÇ=====         Γöé             Γöé   Recognition   Γöé
  691.             Pen           Γöé             Γöé     Gesture     Γöé
  692.                           Γöé             ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  693.                           Γöé                         
  694.                           Γöé             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ
  695.                           Γöé             Γöé  Compatibility  Γöé
  696.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ              Γöé          ΓöîΓöÇΓöÇΓöñ      Layer      Γö£ΓöÇΓöÇΓöÉ o Gesture
  697.     ΓöéBufferΓöé              Γöé          Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé o Summation
  698.     Γöé      Γöé              Γöé          Γöé                       Γöé o Hot Spot
  699.     ΓöéStrokeΓöé                                               
  700.     ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ    ΓöîΓöÇPen for OS/2ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇREDΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  701.         Γöé       Γöé    Writing Subsystem     Γöé Γöé      Recognition Event    Γöé
  702.         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ       PM Extensions      Γöé Γöé          Delivery         Γöé
  703.                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  704.                           Γöé                               
  705.                           Γöé                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ o Source
  706.                           Γöé                       Γöé Recognition Γöé o Event
  707.                           Γöé                       Γöé    Event    Γöé o Target
  708.    o Pen Messages         Γöé          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ o Data
  709.    o Mouse Emulation      Γöé          Γöé Profile Γöé          Γöé
  710.    o Stroke Collection    Γöé         ΓöîΓöñ Default Γö£ΓöÇΓöÇΓöÉ       Γöé
  711.       for Gestures        Γöé         ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γö£ΓöÉ  ΓöÇΓöÇΓöÇΓöÿ
  712.    o Ink Tracing          Γöé         Γöé Application ΓöéΓö£ΓöÉ  ΓöÇΓöÇΓöÇΓöÉ
  713.    o Recognition Results  Γöé         Γöé Profiles    ΓöéΓöéΓöé     Γöé
  714.    o Pressure Data and    Γöé         ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöéΓöé     Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  715.       so forth            Γöé           ΓööΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé     ΓööΓöÇΓöÇΓöÇ ΓöéUser Γö£ΓöÉ
  716.    o Activity Detection   Γöé            ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ           ΓöéToolsΓöéΓö£ΓöÉ
  717.       for Backlight       Γöé              Set Through      ΓöîΓöÇΓöÇΓöÇΓöÇ ΓööΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿΓöéΓöé
  718.    o High/Low-Resolution  Γöé              Profile Editor   Γöé      ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿΓöé
  719.       Conversion          Γöé                               Γöé     ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓö¼ΓöÇΓöÿ
  720.                           Γöé                               Γöé     Γöé Pen Γö£ΓöÉ
  721.                           Γöé                               Γöé     ΓöéToolsΓöéΓö£ΓöÉ
  722.                           Γöé         Standard PM and       Γöé     ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿΓöéΓöé
  723.                           Γöé         Application Messages  Γöé       ΓööΓö¼ΓöÇΓöÇΓöÇΓöÿΓöé
  724.                                                                  ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ
  725.                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  726.                 Γöé            Aware and Unaware Applications          Γöé
  727.                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  728. Pen for OS/2 Compatibility and RED Flows 
  729.  
  730.  
  731. ΓòÉΓòÉΓòÉ 5.7. Program Design Considerations ΓòÉΓòÉΓòÉ
  732.  
  733. The following points should be used as guidelines when writing applications 
  734. that will run with Pen for OS/2. Because you cannot be sure when your program 
  735. will be running with the Pen for OS/2 system, you should take these guidelines 
  736. into account when writing any OS/2 Presentation Manager program: 
  737.  
  738. o Resist implementing features that can be reached through only one mechanism, 
  739.   such as the keyboard. Implement a tool bar, or at least a menu item, to 
  740.   ensure that a user can access a function even if a keyboard is not available. 
  741.  
  742. o Provide accelerator-key mappings for most menu and dialog functions so that 
  743.   they can readily be assigned to recognition-invoked (for example, 
  744.   gesture-invoked) keystroke macros. This will let a user bypass a series of 
  745.   menu taps and go directly to an action merely by drawing a gesture shape. 
  746.  
  747. o Provide list boxes or combination boxes as much as possible.  Pointing to a 
  748.   list is a simple operation and never results in a recognition error.  Entry 
  749.   fields, especially on a keyboardless machine, will require handwriting 
  750.   recognition or the request of a Pop-Up Keyboard; therefore, always try to 
  751.   provide a list of choices when possible. 
  752.  
  753. o Take into account that many pen-based displays are monochrome. This will 
  754.   affect the appearance of bit maps, foreground and background colors, and 
  755.   choices of ink color. 
  756.  
  757. o Keep internal and external resource requirements to a minimum for programs 
  758.   that expect to run on mobile computers. 
  759.  
  760. o Take advantage of the handwriting-recognition control provided with the Pen 
  761.   for OS/2 extensions.  You must use the control in dialogs or other writing 
  762.   areas in your windows or forms, or you can use the supplied 
  763.   handwriting-recognition pad when a pop-up tool is appropriate. 
  764.  
  765. o Design drawing and annotation facilities into your applications. The 
  766.   inability to draw with a mouse hindered the development of these features 
  767.   into programs, but the pen makes all of this a reality. 
  768.  
  769. o Supply recognition-mapping (for example, gesture-mapping) tools with your 
  770.   applications when possible. This is a simpler way to provide unique pen 
  771.   capabilities to your application without necessarily having to modify it. 
  772.  
  773.  
  774. ΓòÉΓòÉΓòÉ 6. Using Ink ΓòÉΓòÉΓòÉ
  775.  
  776. Pen for OS/2 provides functions and messages to enable your application to 
  777. process pointing-device movement to produce ink and other pen-aware 
  778. characteristics. 
  779.  
  780. You can design your application program to do its own inking of pointing-device 
  781. movement or let Pen for OS/2 do the inking.  Your application program can 
  782. collect and manage pointing-device movement, or let Pen for OS/2 build a stroke 
  783. buffer that contains all the pointing-device movement positions. 
  784. Device-specific data is available for each pointing-device movement and is also 
  785. maintained in the stroke buffer. 
  786.  
  787.  
  788. ΓòÉΓòÉΓòÉ 6.1. Receiving Notification Messages ΓòÉΓòÉΓòÉ
  789.  
  790. You can use the following messages to process ink in your application. 
  791.  
  792. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  793. Γöé MESSAGE                   Γöé DESCRIPTION                         Γöé
  794. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  795. Γöé WM_TOUCHDOWN              Γöé Makes contact with the surface      Γöé
  796. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  797. Γöé WM_LIFTOFF                Γöé Breaks contact with the surface     Γöé
  798. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  799. Γöé WM_MOUSEMOVE              Γöé Moves pointing device               Γöé
  800. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  801. Γöé WM_SENSOR_MOVE            Γöé Moves pointing device               Γöé
  802. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  803.  
  804.  
  805. ΓòÉΓòÉΓòÉ 6.2. Using Ink without a Stroke Buffer ΓòÉΓòÉΓòÉ
  806.  
  807. Pen for OS/2 can ink a stroke and collect in a stroke buffer all 
  808. pointing-device movements in that stroke for you. But, if you need to ink the 
  809. stroke, for example, because you want to manage the color or width of the ink 
  810. yourself, Pen for OS/2 will send you notification messages for each 
  811. pointing-device movement event. This will enable you to do your own inking. And 
  812. if you need your own format for a stroke buffer, or do not need the collection 
  813. of the pointing-device movements that composed a stroke, Pen for OS/2 can be 
  814. instructed not to build a stroke buffer. This will save time and the resources 
  815. that the stroke buffer would have required. 
  816.  
  817. You will receive the WM_TOUCHDOWN message when the pointing device makes 
  818. contact with the surface.  You inform Pen for OS/2 as to how the stroke is to 
  819. be processed through the return code from the WM_TOUCHDOWN message. 
  820.  
  821. To not have a stroke buffer built, your application returns TDN_NO_PAUSE and 
  822. TDN_NO_INK_STROKE to the WM_TOUCHDOWN message.  In order to receive all 
  823. pointing-device movements at the hardware sample rate, your application also 
  824. returns TDN_HIFREQ_MOUSEMOVE to receive the position in screen coordinates or 
  825. TDN_SENSOR_MOVE to receive the position in digitizer coordinates. The return 
  826. code for the WM_TOUCHDOWN message is the result of logically ORing all options 
  827. that your application selects. 
  828.  
  829. You must capture all pointing-device messages to be sure your application does 
  830. not miss the WM_LIFTOFF message that terminates the stroke. A call to the 
  831. WinSetCapture function while your application is processing the WM_TOUCHDOWN 
  832. message will allow your application to always obtain the WM_LIFTOFF message. 
  833.  
  834. Your application will receive movement messages while the pointing device is in 
  835. contact with the surface.  Your application will receive WM_SENSOR_MOVE 
  836. messages if your application returned TDN_SENSOR_MOVE on the WM_TOUCHDOWN 
  837. message; otherwise, your application will receive WM_MOUSEMOVE messages.  Your 
  838. application can ink the stroke or perform other operations, such as erasing, as 
  839. points are received.  Your application can use the WrtMapPointLong function to 
  840. scale the position coordinates to a different resolution or translate to the 
  841. origin of a different window. Your application can use this function to scale 
  842. digitizer coordinates to screen coordinates needed to ink in a given window. 
  843.  
  844. Due to the high rate of movement messages at the hardware sample rate, each 
  845. message must be processed in a short period of time.  Use a target time of 2 
  846. milliseconds per message, for example.  If your application falls behind, your 
  847. application will still receive all movement messages, but the processing of the 
  848. points will appear to slow the user's movement. Points are not coalesced as 
  849. with normal OS/2 mouse-event processing if you requested TDN_HIFREQ_MOUSEMOVE 
  850. or TDN_SENSOR_MOVE on the WM_TOUCHDOWN message. 
  851.  
  852. Your application receives the WM_LIFTOFF message at the end of the stroke. Call 
  853. WinSetCapture with NULLHANDLE to release the pointing-device capture. Your 
  854. application needs to pass back LO_STROKE_PROCESSED to indicate that your 
  855. application has handled the stroke. 
  856.  
  857.  
  858. ΓòÉΓòÉΓòÉ 6.3. Using Ink with a Stroke Buffer ΓòÉΓòÉΓòÉ
  859.  
  860. Your application can process the points of a stroke itself and have Pen for 
  861. OS/2 build a stroke buffer to collect the points for future processing.  Your 
  862. application returns TDN_INFINITE_PAUSE and TDN_NO_INK_STROKE to the 
  863. WM_TOUCHDOWN message.  Your application also can choose to receive all 
  864. pointing-device movement messages by returning TDN_HIFEQ_MOUSEMOVE or 
  865. TDN_SENSOR_MOVE. 
  866.  
  867. As with processing the stroke without a stroke buffer, your application will 
  868. receive WM_MOUSEMOVE or WM_SENSOR_MOVE messages while the pointing device is in 
  869. contact with the surface. 
  870.  
  871. At the end of the stroke, your application will receive the WM_LIFTOFF message. 
  872. The WRT_STROKE_AVAIL flag will be set in the flEventStatus field of the 
  873. WRTEVENTDATA structure pointed to by mp2.  Your application can obtain a copy 
  874. of the stroke buffer with WrtQueryStrokeData. Your application can manage the 
  875. collected stroke buffers to meet the needs of your application. 
  876.  
  877. Your application must capture the pointing-device messages with WinSetCapture 
  878. as previously discussed, to be sure your application receives the WM_LIFTOFF 
  879. message. 
  880.  
  881.  
  882. ΓòÉΓòÉΓòÉ 6.4. Letting Pen for OS/2 Do the Inking ΓòÉΓòÉΓòÉ
  883.  
  884. Your application can also let Pen for OS/2 do the inking of the stroke and 
  885. provide a stroke buffer.  You return TDN_INFINITE_PAUSE and TDN_LEAVE_INK to 
  886. the WM_TOUCHDOWN message.  This eliminates the need for your application to ink 
  887. and keep track of the movement, point by point, yourself.  As points are 
  888. entered into the stroke buffer, they are connected to the previous points and 
  889. displayed on the screen to give the appearance of ink flowing from the point of 
  890. the pointing device.  The inking is performed in such a way as to not interfere 
  891. with the underlying graphical display data. 
  892.  
  893. At the end of the stroke, your application will receive the WM_LIFTOFF message, 
  894. and a stroke buffer will be available for use in your application. 
  895.  
  896. Pen for OS/2 will not de-ink the stroke if the entire stroke is in the window 
  897. of your application. However, if the stroke does leave the window, Pen for OS/2 
  898. will de-ink the stroke after the return from the WM_LIFTOFF message. This is 
  899. because ink cannot be left in the window of another application. The WM_LIFTOFF 
  900. flags will indicate whether the stroke left the window and whether the ink was 
  901. left or removed. At the lift-off point, your application must request the 
  902. stroke buffer and re-ink it.  Your application can use the GpiPolyline function 
  903. for fast inking.  This will improve the appearance of the ink and avoid "stroke 
  904. flash", which occurs when a stroke is de-inked and then immediately re-inked. 
  905.  
  906. Your application must capture the pointing-device messages with WinSetCapture 
  907. as previously discussed, to be sure your application receives the WM_LIFTOFF 
  908. message. 
  909.  
  910.  
  911. ΓòÉΓòÉΓòÉ 6.5. Using Auxiliary Data ΓòÉΓòÉΓòÉ
  912.  
  913. Along with the pointing device position data supplied in the WRTEVENTDATA 
  914. structure, Pen for OS/2 also provides the following hardware-specific 
  915. information: 
  916.  
  917. o Additional flags 
  918. o High resolution device time stamp 
  919. o Z-coordinate value 
  920. o Device angle 
  921. o Device rotation 
  922. o Button status 
  923. o Original equipment manufacturer data 
  924. o A word for application use 
  925.  
  926. All of this data is provided in the AUXPOINTDATA structure and can be obtained 
  927. with the WrtQueryPointAuxData function during processing of a WM_MOUSEMOVE or 
  928. WM_SENSOR_MOVE message. 
  929.  
  930. You also can select auxiliary data items in the stroke buffer. You indicate 
  931. which items you need with the flAuxData parameter when you request the stroke 
  932. buffer with the WrtQueryStrokeData function. 
  933.  
  934.  
  935. ΓòÉΓòÉΓòÉ 6.6. Using Device Capabilities ΓòÉΓòÉΓòÉ
  936.  
  937. You can get the complete capabilities for the pointing device if you would like 
  938. to take advantage of specific device characteristics in your application. A 
  939. device ID for the pointing device is provided in field ulLocatorID in the 
  940. WRTEVENTDATA structure pointed to by mp2 for the WM_TOUCHDOWN and WM_LIFTOFF 
  941. message. You can get the device capabilities using this device ID with the 
  942. WrtQueryLocatorCaps function. The device capabilities are returned in structure 
  943. WRTLOCACTORDEVINFO. 
  944.  
  945.  
  946. ΓòÉΓòÉΓòÉ 7. Using Gestures ΓòÉΓòÉΓòÉ
  947.  
  948. Gestures are symbols that are drawn on the computer screen by the user, as a 
  949. shorthand method to direct an application to perform a particular action. 
  950. Gestures allow the user to specify both an action to be performed and an object 
  951. to perform the action on. Each gesture in the Pen for OS/2 system extension has 
  952. a hot spot.  The hot spot is a single point on the gesture or within the 
  953. bounding box of the gesture.  For most gestures, the hot spot is used to target 
  954. the object of the gesture. A few gestures use the bounding box of the gesture 
  955. to target the objects. 
  956.  
  957. Pen for OS/2 provides support to: 
  958.  
  959. o Capture the strokes that a user draws to form a gesture. 
  960. o Recognize the strokes to determine which gesture was drawn. 
  961. o Notify the application, through a WinSendMsg, which gesture was drawn. 
  962.  
  963. When Pen for OS/2 recognizes a gesture, it first builds a RECODATA structure 
  964. for the gesture.  The RECODATA structure contains information on which gesture 
  965. was drawn, where it was drawn, and which command and arguments have been mapped 
  966. to the gesture.  (The command and arguments are set in the Gesture page of the 
  967. Settings notebook for program and program-file objects.)  Pen for OS/2 then 
  968. sends a WM_RECO message to the window under the hot spot of the gesture.  You 
  969. have two ways to handle the gesture: 
  970.  
  971. o You can process the WM_RECO message inside your window and return TRUE.  If 
  972.   you return TRUE, Pen for OS/2 will do no further processing on this gesture. 
  973.  
  974. o Or, you can return FALSE to the WM_RECO message and use the Pen for OS/2 
  975.   Recognition Command Handler interface to handle the gesture.  This interface 
  976.   allows you to develop gesture-mapping tools that can be invoked with a 
  977.   gesture. 
  978.  
  979.  
  980. ΓòÉΓòÉΓòÉ 7.1. Recognition Command Handlers ΓòÉΓòÉΓòÉ
  981.  
  982. If the window procedure does not handle the WM_RECO message (that is, it 
  983. returns FALSE), then Pen for OS/2 maps the gesture to a recognition command. 
  984. Pen for OS/2 checks to see if the command in the RECODATA structure is one of 
  985. the Pen for OS/2 recognition commands. 
  986.  
  987. The following is a list of the built-in recognition commands and a short 
  988. description of the command is provided. (These commands are documented in 
  989. Appendix C, in the Pen for OS/2 User's Guide.) 
  990.  
  991. NULL              Does nothing 
  992. RESTMAX           Restores window if minimized, maximizes window if restored 
  993. RESTMIN           Restores window if maximized, minimizes window if restored 
  994. MAXIMIZE          Maximizes window 
  995. MINIMIZE          Minimizes window 
  996. WINCLOSE          Closes window 
  997. TASKLIST          Displays the task list 
  998. MENUSEL           Selects an item from a menu 
  999. KEYPLAY           Plays back keystrokes 
  1000. OPEN              Opens the object at the hot spot of the gesture 
  1001. SYSMENU           Selects an item from the system menu 
  1002. CONTEXT           Selects an item from the context menu 
  1003. GESTHELP          Displays gesture assignments for the window at the hot spot 
  1004.  
  1005. If the command is not identified as one of the Pen for OS/2 recognition 
  1006. commands, then Pen for OS/2 looks to see if there is a registered handler for 
  1007. the command.  If a registered handler is found, Pen for OS/2 sends the 
  1008. registered handler's window a WM_RECO_COMMAND message.  If no handler is found, 
  1009. then Pen for OS/2 searches the directories in the PATH environment for the 
  1010. executable file (that is, .EXE, .COM, .CMD, or .BAT) with the same name as the 
  1011. recognition command.  If it finds an executable file, it invokes the file.  The 
  1012. following RECODATA structure contains information about the gesture recognition 
  1013. event. 
  1014.  
  1015.  
  1016.    typedef struct _RECODATA
  1017.      {
  1018.      ULONG   cbSize;           /*  Size of structure                  */
  1019.      RECOID  id;               /*  Recognition event ID               */
  1020.      HRECO   hReco;            /*  Recognition subsystem handle       */
  1021.      ULONG   virtual_id;       /*  Virtual ID of event                */
  1022.      ULONG   char_code;        /*  Character code, if letter gesture  */
  1023.      RECTL   bound_box;        /*  Bounding box of gesture            */
  1024.      POINTL  ptlHotSpot;       /*  Hot spot, X/Y screen coordinates   */
  1025.      HWND    hwnd;             /*  Window under hot spot of gesture   */
  1026.      HWND    hwndActive;       /*  Active window                      */
  1027.      HWND    hwndFocus;        /*  Window that has the focus          */
  1028.      PSZ     pszCommand;       /*  Command assigned to gesture        */
  1029.      PSZ     pszCmdArgs;       /*  Argument of command                */
  1030.      PSZ     pszPrefixCmd      /*  Prefix assigned to gesture         */
  1031.      }  RECODATA;
  1032.    typedef RECODATA *PRECODATA;
  1033. RECODATA Data Format 
  1034.  
  1035. There are essentially two ways to package a recognition command handler. 
  1036.  
  1037. o You can package the handler as part of an application, as a .DLL or an .EXE. 
  1038.   In this case, the application will create a window to receive WM_RECO_COMMAND 
  1039.   messages, and then call RedRegisterRecoCommand, passing it the name of the 
  1040.   command and the window handle that is to receive WM_RECO_COMMAND messages. 
  1041.  
  1042. o You also can package a recognition command handler as a stand-alone program 
  1043.   file.  In this case, the first time the gesture mapped to the recognition 
  1044.   command is recognized, Pen for OS/2 invokes the program file.  The program 
  1045.   can then recover the RECODATA structure by using the RedQueryRecoDataFromEnv 
  1046.   API.  At this point, the program file would also create a window to receive 
  1047.   WM_RECO_COMMAND messages and call RedRegisterRecoCommand, passing it the name 
  1048.   of the program file and the hwnd of the created window.  The next time the 
  1049.   gesture is recognized, Pen for OS/2 will find the command as a registered 
  1050.   recognition handler and will send it a WM_RECO_COMMAND message directly 
  1051.   instead of starting the program again. 
  1052.  
  1053. The following APIs are used by registered recognition command handlers: 
  1054.  
  1055. RedRegisterRecoCommand 
  1056. RedQueryRecoCommand 
  1057. RedDeregisterRecoCommand 
  1058. RedRecoDataFromEnv 
  1059.  
  1060.  
  1061. ΓòÉΓòÉΓòÉ 7.2. Using the Virtual ID ΓòÉΓòÉΓòÉ
  1062.  
  1063. The preferred method for handling a gesture is to use the virtual_id field (see 
  1064. the previous RECODATE Date Format figure. to determine the intent of the 
  1065. gesture.  The virtual_id field isolates the application from having to know the 
  1066. actual shape of the gesture.  If for some reason a gesture shape needs to be 
  1067. changed for a particular action, using the virtual_id field allows the shape to 
  1068. be changed without affecting the application.  Each gesture in Pen for OS/2 has 
  1069. an intended action.  Use hwnd to determine the window where the gesture was 
  1070. drawn.  Use ptlHotSpot to target the object within the window that is under the 
  1071. hot spot of the gesture. 
  1072.  
  1073.  
  1074. ΓòÉΓòÉΓòÉ 7.3. Using the Event ID ΓòÉΓòÉΓòÉ
  1075.  
  1076. If your application needs to determine the actual shape of the gesture, use 
  1077. RedQueryEventName to determine the name of the gesture. RedQueryEventName takes 
  1078. as input a recognition event ID and a handle to a recognition subsystem.  These 
  1079. parameters are available in the id and hReco fields of the RECODATA structure. 
  1080. RedQueryEventName will return the name (EventName) of the gesture. 
  1081.  
  1082.  
  1083. ΓòÉΓòÉΓòÉ 7.4. Letter Gestures ΓòÉΓòÉΓòÉ
  1084.  
  1085. Letter gestures are formed by drawing any one of the capital letters and then 
  1086. tapping in the center of the letter.  An application can determine when and 
  1087. which letter gesture was drawn by looking at the virtual_id field in the 
  1088. RECODATA structure.  If virtual_id = VE_LETTERGESTURE, the char_code field 
  1089. contains the actual letter gesture that was drawn. 
  1090.  
  1091.  
  1092. ΓòÉΓòÉΓòÉ 7.5. The Pen for OS/2 Gesture Set ΓòÉΓòÉΓòÉ
  1093.  
  1094. The Pen for OS/2 gesture set has been divided into three types of gestures: 
  1095.  
  1096. o Core gestures 
  1097. o Noncore gestures 
  1098. o Letter gestures 
  1099.  
  1100. Both core gestures and noncore gestures have recommended actions.  In order to 
  1101. maintain gesture consistency across applications, applications should use the 
  1102. gestures to perform the actions that have been recommended for the gesture. 
  1103.  
  1104. Core gestures have been chosen to perform the most frequently used actions, 
  1105. such as single selection, scrolling, and editing. Each core gesture has a 
  1106. recommended action.  All applications should support the core gestures as they 
  1107. have been defined. 
  1108.  
  1109. The Noncore gestures have been defined to perform less frequently used actions 
  1110. or actions that might be more specific to a type of application, such as text 
  1111. application.  If an application provides the action defined for a noncore 
  1112. gesture, the application should support the gesture. 
  1113.  
  1114. Letter gestures are gestures that are available for use by end users.  Because 
  1115. these gestures are intended for use by the end user, an application that 
  1116. chooses to use a letter gesture should allow a user to reassign that letter 
  1117. gesture to a different action.  If the user assigns a command to a gesture, the 
  1118. pszCommand field in the RECODATA structure will contain the assigned command. 
  1119.  
  1120.  
  1121. ΓòÉΓòÉΓòÉ 7.5.1. Core Gestures ΓòÉΓòÉΓòÉ
  1122.  
  1123. Core gestures have been chosen to handle frequently used actions.  The 
  1124. following figures illustrate each core gesture, the EventName of the gesture, 
  1125. and the gesture's Virtual ID.  For each gesture, a recommended action is 
  1126. provided and a description of the difference between the recommended action and 
  1127. the Pen for OS/2 default gesture assignment. 
  1128.  
  1129. The default gesture assignment is provided by Pen for OS/2 primarily for 
  1130. pen-unaware applications.  Differences between the recommended action and the 
  1131. Pen for OS/2 default assignment are usually because Pen for OS/2 does not know 
  1132. the contents of a program's client window and therefore cannot target the 
  1133. object under the hot spot of the gesture. 
  1134.  
  1135. --------------------------------------------------------------------------------
  1136.  
  1137. Core Gestures:  FlickDown,FlickUp 
  1138.  
  1139. EventName:        FlickDown 
  1140.                   FlickUp 
  1141. Virtual ID:       VE_SCROLLDOWN 
  1142.                   VE_SCROLLUP 
  1143. Description: 
  1144.                   Recommended Action: 
  1145.                   Scroll.  Scroll towards the bottom one page (FlickDown) or 
  1146.                   towards the top one page (FlickUp). 
  1147.  
  1148.                   Hot spot:  Touch down point of gesture. 
  1149.  
  1150.                   Difference Between Recommended Action and Default Gesture 
  1151.                   Assignments: 
  1152.                   No difference. 
  1153.  
  1154. --------------------------------------------------------------------------------
  1155.  
  1156. Core Gesture:  Question 
  1157.  
  1158. EventName:        Question 
  1159. Virtual ID:       VE_HELP 
  1160. Description: 
  1161.                   Recommended Action: 
  1162.                   Help.  Display help information adapted to the current 
  1163.                   context.  Either help for an active window, an object, 
  1164.                   selected objects, or a selected menu choice. 
  1165.  
  1166.                   Hot spot:  Center of gesture. 
  1167.  
  1168.                   Difference Between Recommended Action and Default Gesture 
  1169.                   Assignments: 
  1170.                   No difference. 
  1171.  
  1172. --------------------------------------------------------------------------------
  1173.  
  1174. Core Gesture:  Checkmark 
  1175.  
  1176. EventName:        Checkmark 
  1177. Virtual ID:       VE_CONTEXTMENU 
  1178. Description: 
  1179.                   Recommended Action: 
  1180.                   Pop-Up Menu.  Display the pop-up menu of the object under the 
  1181.                   hot spot. 
  1182.  
  1183.                   Hot spot:  Bottom tip of gesture. 
  1184.  
  1185.                   Difference Between Recommended Action and Default Gesture 
  1186.                   Assignments: 
  1187.                   No difference. 
  1188.  
  1189. --------------------------------------------------------------------------------
  1190.  
  1191. Core Gesture:  Circle 
  1192.  
  1193. EventName:        Circle 
  1194. Virtual ID:       VE_EDIT 
  1195. Description: 
  1196.                   Recommended Action: 
  1197.                   Edit.  Edit the object or selected objects under the hot spot 
  1198.                   of the gesture. 
  1199.  
  1200.    o If no object is selected under the hot spot of the gesture, use the 
  1201.      bounding box of the gesture to determine which object(s) should be edited. 
  1202.    o For text, open a handwriting window in boxed mode. Initialize the window 
  1203.      with the text under the bounding box of the gesture.  Allow the user to 
  1204.      edit the text. When the user is complete, replace the original text with 
  1205.      the text in the handwriting window. 
  1206.    o Use this same editing model with any object(s) that can be selected with 
  1207.      the Circle gesture, edited and replaced. 
  1208.  
  1209.                   Hot spot:  Center of gesture. 
  1210.  
  1211.                   Difference Between Recommended Action and Default Gesture 
  1212.                   Assignments: 
  1213.                   No default gesture assignment is provided. 
  1214.  
  1215. --------------------------------------------------------------------------------
  1216.  
  1217. Core Gesture:  UpCaret 
  1218.  
  1219. EventName:        UpCaret 
  1220. Virtual ID:       VE_INSERT 
  1221. Description: 
  1222.                   Recommended Action: 
  1223.                   Insert.  Open a window that will allow the user to insert 
  1224.                   information into your program.  When the user has completed, 
  1225.                   insert the information at the hot spot of the gesture. 
  1226.  
  1227.                   For text, open a handwriting window in boxed mode.  Allow the 
  1228.                   user to input and edit text.  When the user has completed, 
  1229.                   insert the text from the handwriting window at the hot spot 
  1230.                   of the gesture. 
  1231.  
  1232.                   Hot spot:  Top tip of gesture. 
  1233.  
  1234.                   Difference Between Recommended Action and Default Gesture 
  1235.                   Assignments: 
  1236.                   No default gesture assignment is provided. 
  1237.  
  1238. --------------------------------------------------------------------------------
  1239.  
  1240. Core Gesture:  DownRight 
  1241.  
  1242. EventName:        DownRight 
  1243. Virtual ID:       VE_SPACE 
  1244. Description: 
  1245.                   Recommended Action: 
  1246.                   Insert space.  Insert at least one space at the hot spot of 
  1247.                   the gesture. 
  1248.  
  1249.    o The Pen for OS/2 handwriting control window inserts one or more spaces at 
  1250.      the hot spot of the gesture.  The number of spaces inserted is determined 
  1251.      by the length of the horizontal portion of the gesture. 
  1252.    o If the distance between objects such as text characters in the boxed 
  1253.      handwriting control or monospaced characters are fixed size, allows 
  1254.      multiple spaces to be inserted by using the length of the horizontal 
  1255.      portion of the gesture to determine the number of spaces. 
  1256.  
  1257.                   Hot spot:  Midpoint of the vertical segment of the gesture. 
  1258.  
  1259.                   Difference Between Recommended Action and Default Gesture 
  1260.                   Assignments: 
  1261.                   The default gesture assignment will attempt to set a text 
  1262.                   cursor by emulating a WM_BUTTON1CLICK at the hot spot of the 
  1263.                   gesture.  It will insert one space by sending a WM_CHAR to 
  1264.                   the window under the hot spot. 
  1265.  
  1266. --------------------------------------------------------------------------------
  1267.  
  1268. Core Gesture:  Xout 
  1269.  
  1270. EventName:        Xout 
  1271. Virtual ID:       VE_DELETE 
  1272. Description: 
  1273.                   Recommended Action: 
  1274.                   Delete.  Delete the objects or selected objects under the hot 
  1275.                   spot of the gesture. 
  1276.  
  1277.    o Delete a selection when drawn over selected text. 
  1278.    o Delete a word when drawn over unselected text. 
  1279.  
  1280.                   Hot spot:  Crossover point of the two strokes. 
  1281.  
  1282.                   Difference Between Recommended Action and Default Gesture 
  1283.                   Assignments: 
  1284.                   The default gesture assignment will send a delete keystroke, 
  1285.                   through WM_CHAR, to the window under the hot spot.  This 
  1286.                   gesture assignment does not use the hot spot of the gesture 
  1287.                   to target the object to be deleted. 
  1288.  
  1289. --------------------------------------------------------------------------------
  1290.  
  1291. Core Gesture:  PigTail 
  1292.  
  1293. EventName:        PigTail 
  1294. Virtual ID:       VE_DELETECHAR 
  1295. Description: 
  1296.                   Recommended Action: 
  1297.                   Delete character.  Delete the object or selected objects 
  1298.                   under the hot spot of  the gesture 
  1299.  
  1300.    o Delete selection when drawn over selected text. 
  1301.    o Delete a character when drawn over unselected text. 
  1302.  
  1303.                   Hot spot:  Touch down point of gesture. 
  1304.  
  1305.                   Difference Between Recommended Action and Default Gesture 
  1306.                   Assignments: 
  1307.                   No default gesture assignment is provided. 
  1308.  
  1309. --------------------------------------------------------------------------------
  1310.  
  1311. Core Gesture:  AlphaXout 
  1312.  
  1313. EventName:        AlphaXout 
  1314. Virtual ID:       VE_CUT 
  1315. Description: 
  1316.                   Recommended Action: 
  1317.                   Cut.  Cut the object or selected objects under the hot spot 
  1318.                   of the gesture to the clipboard. 
  1319.  
  1320.                   Note:  The target object or selection is removed and placed 
  1321.                          in the clipboard. 
  1322.  
  1323.                   Hot spot:  Center of the gesture. 
  1324.  
  1325.                   Difference Between Recommended Action and Default Gesture 
  1326.                   Assignments: 
  1327.                   The default gesture assignment will cut the current selection 
  1328.                   to the clipboard. It does not use the hot spot of the gesture 
  1329.                   to target the object. 
  1330.  
  1331. --------------------------------------------------------------------------------
  1332.  
  1333. Core Gesture:  Alpha 
  1334.  
  1335. EventName:        Alpha 
  1336. Virtual ID:       VE_COPY 
  1337. Description: 
  1338.                   Recommended Action: 
  1339.                   Copy.  Copy the object or selected objects under the hot spot 
  1340.                   of the gesture to the clipboard. 
  1341.  
  1342.                   Hot spot:  Center of the gesture. 
  1343.  
  1344.                   Difference Between Recommended Action and Default Gesture 
  1345.                   Assignments: 
  1346.                   The default gesture assignment will copy the current 
  1347.                   selection to the clipboard.  It does not use the hot spot of 
  1348.                   the gesture to target the object. 
  1349.  
  1350. --------------------------------------------------------------------------------
  1351.  
  1352. Core Gesture:  CaretTap 
  1353.  
  1354. EventName:        CaretTap 
  1355. Virtual ID:       VE_PASTE 
  1356. Description: 
  1357.                   Recommended Action: 
  1358.                   Paste.  Paste the contents of the clipboard at the hot spot 
  1359.                   of the gesture. 
  1360.  
  1361.    o If nothing is selected under the hot spot, inserts the contents of the 
  1362.      clipboard at the hot spot of the gesture. 
  1363.    o If a selection exists under the hot spot, replaces the selection with the 
  1364.      contents of the clipboard. 
  1365.  
  1366.                   Hot spot:  Top tip of caret. 
  1367.  
  1368.                   Difference Between Recommended Action and Default Gesture 
  1369.                   Assignments: 
  1370.                   The default assignment will insert the contents of the 
  1371.                   clipboard at the text insertion point or it will replace the 
  1372.                   current selection with the contents of the clipboard.  It 
  1373.                   does not use the hot spot of the gesture to determine the 
  1374.                   insertion point of the paste operation. 
  1375.  
  1376. --------------------------------------------------------------------------------
  1377.  
  1378. Core Gesture:  CircleXout 
  1379.  
  1380. EventName:        CircleXout 
  1381. Virtual ID:       VE_UNDO 
  1382. Description: 
  1383.                   Recommended Action: 
  1384.                   Undo.  Undo the previous action. 
  1385.  
  1386.                   Hot spot:  Center of gesture. 
  1387.  
  1388.                   Difference Between Recommended Action and Default Gesture 
  1389.                   Assignments: 
  1390.                   No difference. 
  1391.  
  1392.  
  1393. ΓòÉΓòÉΓòÉ 7.5.2. Noncore Gestures ΓòÉΓòÉΓòÉ
  1394.  
  1395. Noncore gestures also have recommended actions.  These actions tend to be less 
  1396. frequently used actions or actions that might be more specific to a type of 
  1397. application, such as text applications.  If an application supports the 
  1398. recommended action, it should use the recommended gesture. 
  1399.  
  1400. The following figures illustrate each noncore gesture, the EventName of the 
  1401. gesture, and the gesture's Virtual ID.  For each gesture, a recommended action 
  1402. is provided and a description of the difference between the recommended action 
  1403. and the Pen for OS/2 default gesture assignment. 
  1404.  
  1405. The default gesture assignment is provided by Pen for OS/2 primarily for 
  1406. pen-unaware applications.  Differences between the recommended action and the 
  1407. Pen for OS/2 default assignment are usually because Pen for OS/2 does not know 
  1408. the contents of a program's client window and therefore cannot target the 
  1409. object under the hot spot of the gesture. 
  1410.  
  1411. --------------------------------------------------------------------------------
  1412.  
  1413. Noncore Gesture:  Tilde 
  1414.  
  1415. EventName:        Tilde 
  1416. Virtual ID:       VE_TOGGLESELECTION 
  1417. Description: 
  1418.                   Recommended Action: 
  1419.                   Toggle selection.  Toggle the selection state of the object 
  1420.                   under the hot spot of the gesture.  If the object is 
  1421.                   selected, deselect it.  If the object is not selected, select 
  1422.                   it. 
  1423.  
  1424.                   Hot spot:  Center of gesture. 
  1425.  
  1426.                   Difference Between Recommended Action and Default Gesture 
  1427.                   Assignments: 
  1428.                   No difference. 
  1429.  
  1430. --------------------------------------------------------------------------------
  1431.  
  1432. Noncore Gesture:  FlickDownUp 
  1433.  
  1434. EventName:        FlickDownUp 
  1435. Virtual ID:       VE_EXTENDSELECTION 
  1436. Description: 
  1437.                   Recommended Action: 
  1438.                   Extend selection.  Extend the current selection from the 
  1439.                   cursor (or anchor point) to the hot spot of the gesture. 
  1440.  
  1441.                   Hot spot:  Center of gesture. 
  1442.  
  1443.                   Difference Between Recommended Action and Default Gesture 
  1444.                   Assignments: 
  1445.                   No difference. 
  1446.  
  1447. --------------------------------------------------------------------------------
  1448.  
  1449. Noncore Gesture:  Leftbracket 
  1450.  
  1451. EventName:        Leftbracket 
  1452. Virtual ID:       VE_BOUNDSELECTIONLEFT 
  1453. Description: 
  1454.                   Recommended Action: 
  1455.                   Bound selection.  Set the left boundary of the selection at 
  1456.                   the hot spot of the gesture. 
  1457.  
  1458.    o If a selection exists to the right of the bracket, extend the selection to 
  1459.      the bracket. 
  1460.    o If no selection exists to the right of the bracket, select the first 
  1461.      object to the right of the bracket (for text, this is a word). 
  1462.    o If the bracket is drawn over a selection, deselect all contiguous selected 
  1463.      objects to the left of the bracket. 
  1464.  
  1465.                   Hot spot:  Midpoint of vertical segment of gesture. 
  1466.  
  1467.                   Difference Between Recommended Action and Default Gesture 
  1468.                   Assignments: 
  1469.                   No default gesture assignment is provided. 
  1470.  
  1471. --------------------------------------------------------------------------------
  1472.  
  1473. Noncore Gesture:  RightBrackt 
  1474.  
  1475. EventName:        RightBrackt 
  1476. Virtual ID:       VE_BOUNDSELECTIONRIGHT 
  1477. Description: 
  1478.                   Recommended Action: 
  1479.                   Bound selection.  Set the right boundary of the selection at 
  1480.                   the hot spot of the gesture. 
  1481.  
  1482.    o If a selection exists to the left of the bracket, extend the current 
  1483.      selection to the bracket. 
  1484.    o If no selection exists to the left of the bracket, select the first object 
  1485.      to the left of the bracket (for text, this is a word) 
  1486.    o If the bracket is drawn over a selection, deselect all contiguous selected 
  1487.      objects to the right of the bracket. 
  1488.  
  1489.                   Hot spot:  Midpoint of vertical segment of gesture. 
  1490.  
  1491.                   Difference Between Recommended Action and Default Gesture 
  1492.                   Assignments: 
  1493.                   No default gesture assignment is provided. 
  1494.  
  1495. --------------------------------------------------------------------------------
  1496.  
  1497. Noncore Editing Gesture:  ScratchOut 
  1498.  
  1499. EventName:        ScratchOut 
  1500. Virtual ID:       VE_SCRATCHOUT 
  1501. Description: 
  1502.                   Recommended Action: 
  1503.                   Scratch out.  Delete the object or selected objects under the 
  1504.                   hot spot of the gesture. 
  1505.  
  1506.    o If a selection exists under the hot spot of the gesture, delete the 
  1507.      selection. 
  1508.    o If no selection exists under the hot spot of the gesture, use the bounding 
  1509.      box of the gesture to determine the object(s) to delete. 
  1510.    o The handwriting control window deletes the characters in any box that is 
  1511.      at least 50% covered by the bounding box of the gesture. 
  1512.  
  1513.                   Hot spot:  Center of gesture. 
  1514.  
  1515.                   Difference Between Recommended Action and Default Gesture 
  1516.                   Assignments: 
  1517.                   No default gesture assignment is provided. 
  1518.  
  1519. --------------------------------------------------------------------------------
  1520.  
  1521. Noncore Editing Gesture:  DownLeft 
  1522.  
  1523. EventName:        DownLeft 
  1524. Virtual ID:       VE_ENTER 
  1525. Description: 
  1526.                   Recommended Action: 
  1527.                   Enter.  Insert a line break at the hot spot of the gesture. 
  1528.  
  1529.                   Hot spot:  Midpoint of vertical segment of gesture. 
  1530.  
  1531.                   Difference Between Recommended Action and Default Gesture 
  1532.                   Assignments: 
  1533.                   The default gesture assignment will perform a WM_BUTTON1CLICK 
  1534.                   at the hot spot of the gesture and a WM_CHAR with the enter 
  1535.                   keystroke. 
  1536.  
  1537. --------------------------------------------------------------------------------
  1538.  
  1539. Noncore Editing Gesture:  UpRight 
  1540.  
  1541. EventName:        UpRight 
  1542. Virtual ID:       VE_TAB 
  1543. Description: 
  1544.                   Recommended Action: 
  1545.                   Tab.  Insert a tab at the hot spot of the gesture. 
  1546.  
  1547.                   Hot spot:  Midpoint of vertical segment of gesture. 
  1548.  
  1549.                   Difference Between Recommended Action and Default Gesture 
  1550.                   Assignments: 
  1551.                   The default gesture assignment will perform a WM_BUTTON1CLICK 
  1552.                   at the hot spot of the gesture and a WM_CHAR with the tab 
  1553.                   keystroke. 
  1554.  
  1555. --------------------------------------------------------------------------------
  1556.  
  1557. Noncore Editing Gesture:  UpLeft 
  1558.  
  1559. EventName:        UpLeft 
  1560. Virtual ID:       VE_BACKSPACE 
  1561. Description: 
  1562.                   Recommended Action: 
  1563.                   Backspace.  Set the text cursor at the hot spot of the 
  1564.                   gesture.  Delete the character to the left of the text 
  1565.                   cursor. 
  1566.  
  1567.                   Hot spot:  Midpoint of vertical segment of gesture. 
  1568.  
  1569.                   Difference Between Recommended Action and Default Gesture 
  1570.                   Assignments: 
  1571.                   The default gesture assignment will perform a WM_BUTTON1CLICK 
  1572.                   at the hot spot of the gesture and a WM_CHAR with the 
  1573.                   backspace keystroke. 
  1574.  
  1575. --------------------------------------------------------------------------------
  1576.  
  1577. Noncore Scrolling Gestures:  FlickLeft, FlickRight 
  1578.  
  1579. EventName:        FlickLeft 
  1580.                   FlickRight 
  1581. Virtual ID:       VE_SCROLLLEFT 
  1582.                   VE_SCROLLRIGHT 
  1583. Description: 
  1584.                   Recommended Action: 
  1585.                   Scrolls towards the left (FlickLeft) or right (FlickRight) 
  1586.                   one page. 
  1587.  
  1588.                   Hot spot:  Touch down point of gesture. 
  1589.  
  1590.                   Difference Between Recommended Action and Default Gesture 
  1591.                   Assignments: 
  1592.                   No default gesture assignment is provided. 
  1593.  
  1594. --------------------------------------------------------------------------------
  1595.  
  1596. Noncore Scrolling Gestures:  DFlickDown, DFlickUp 
  1597.  
  1598. EventName:        DFlickDown 
  1599.                   DFlickUp 
  1600. Virtual ID:       VE_SCROLLDOWNMORE 
  1601.                   VE_SCROLLUPMORE 
  1602. Description: 
  1603.                   Recommended Action: 
  1604.                   Scrolls towards the bottom (DFlickDown) or top (DFlickUp). 
  1605.  
  1606.                   Typically, these gestures should scroll to the bottom or top 
  1607.                   of the document. However, if your application provides an 
  1608.                   intermediate level of scrolling, use these gestures to scroll 
  1609.                   to the intermediate level. If your application supports only 
  1610.                   two lengths of scrolling, then assign both the 
  1611.                   DFlickUp/DFlickDown and TFlickUp/TFlickDown gesture to the 
  1612.                   same action. 
  1613.  
  1614.                   Hot spot:  Top center of the bounding box (DFlickDown). 
  1615.  
  1616.                                           Bottom center of the bounding box (DFlickUp).
  1617.  
  1618.                   Difference Between Recommended Action and Default Gesture 
  1619.                   Assignments: 
  1620.                   The default gesture assignment will always scroll to the 
  1621.                   bottom or the top. 
  1622.  
  1623. --------------------------------------------------------------------------------
  1624.  
  1625. Noncore Scrolling Gestures:  DFlickLeft, DFlickRight 
  1626.  
  1627. EventName:        DFlickLeft 
  1628.                   DFlickRight 
  1629. Virtual ID:       VE_SCROLLLEFTMORE 
  1630.                   VE_SCROLLRIGHTMORE 
  1631. Description: 
  1632.                   Recommended Action: 
  1633.                   Scrolls towards the left (DFlickLeft) or right (DFlickRight). 
  1634.  
  1635.                   Typically, these gestures should scroll to the leftmost 
  1636.                   (DFlickLeft) or rightmost (DFlickRight) position.  However, 
  1637.                   if your application provides an intermediate level of 
  1638.                   left/right scrolling, use these gestures to scroll to the 
  1639.                   intermediate level. If your application supports only two 
  1640.                   lengths of scrolling, then assign both the 
  1641.                   DFlickLeft/DFlickRight and TFlickLeft/TFlickRight gesture to 
  1642.                   the same action. 
  1643.  
  1644.                   Hot spot:  Right center of bounding box (DFlickLeft). 
  1645.  
  1646.                                           Left center of bounding box (DFlickRight).
  1647.  
  1648.                   Difference Between Recommended Action and Default Gesture 
  1649.                   Assignments: 
  1650.                   No default gesture assignment is provided. 
  1651.  
  1652. --------------------------------------------------------------------------------
  1653.  
  1654. Noncore Scrolling Gestures:  TFlickUp, TFlickDown 
  1655.  
  1656. EventName:        TFlickUp 
  1657.                   TFlickDown 
  1658. Virtual ID:       VE_SCROLLUPMAX 
  1659.                   VE_SCROLLDOWNMAX 
  1660. Description: 
  1661.                   Recommended Action: 
  1662.                   Scrolls to the top (TFlickUp) or bottom (TFlickDown). 
  1663.  
  1664.                   Hot spot:  Bottom center of bounding box (TFlickUp). 
  1665.  
  1666.                                           Top center of bounding box (TFlickDown).
  1667.  
  1668.                   Difference Between Recommended Action and Default Gesture 
  1669.                   Assignments: 
  1670.                   No difference. 
  1671.  
  1672. --------------------------------------------------------------------------------
  1673.  
  1674. Noncore Scrolling Gestures:  TFlickLeft, TFlickRight 
  1675.  
  1676. EventName:        TFlickLeft 
  1677.                   TFlickRight 
  1678. Virtual ID:       VE_SCROLLLEFTMAX 
  1679.                   VE_SCROLLRIGHTMAX 
  1680. Description: 
  1681.                   Recommended Action: 
  1682.                   Scrolls to the far left (TFlickLeft) or far right 
  1683.                   (TFlickRight). 
  1684.  
  1685.                   Hot spot:  Right center of bounding box (TFlickLeft). 
  1686.  
  1687.                                           Left center of bounding box (TFlickRight).
  1688.  
  1689.                   Difference Between Recommended Action and Default Gesture 
  1690.                   Assignments: 
  1691.                   No default gesture assignment is provided. 
  1692.  
  1693. --------------------------------------------------------------------------------
  1694.  
  1695. Noncore Settings Gesture:  CheckmrkTap 
  1696.  
  1697. EventName:        CheckmrkTap 
  1698. Virtual ID:       VE_ASSIGNMENTS 
  1699. Description: 
  1700.                   Recommended Action: 
  1701.                   Display the gesture assignments for the program file or 
  1702.                   program object associated with the window under the hot spot. 
  1703.  
  1704.                   Hot spot:  Bottom tip of check mark. 
  1705.  
  1706.                   Difference Between Recommended Action and Default Gesture 
  1707.                   Assignments: 
  1708.                   No difference. 
  1709.  
  1710.  
  1711. ΓòÉΓòÉΓòÉ 7.5.3. Letter Gestures ΓòÉΓòÉΓòÉ
  1712.  
  1713. Letter gestures are made by drawing any of the capital letters and augmenting 
  1714. the letter with a tap in the center of the letter. The tap must be the last 
  1715. stroke of the gesture and must be on top of the letter. 
  1716.  
  1717. --------------------------------------------------------------------------------
  1718.  
  1719. Letter Gestures:  UppercaseA-UppercaseZ 
  1720.  
  1721. EventName:        UppercaseA-UppercaseZ 
  1722. Virtual ID:       VE_LETTERGESTURE 
  1723. Description: 
  1724.                   Recommended Action: 
  1725.                   These gestures are reserved for end user assignments. 
  1726.                   Applications that use any of the gestures should allow the 
  1727.                   end user to reassign the gesture to a different action. 
  1728.  
  1729.                   Hot spot:  Center of gesture. 
  1730.  
  1731.  
  1732. ΓòÉΓòÉΓòÉ 8. Using the Sketch Control ΓòÉΓòÉΓòÉ
  1733.  
  1734. The sketch input control (WC_SKETCH window class) is a pen-aware PM control 
  1735. that provides ink capture and rendering.  The control can be included in any PM 
  1736. application through window creation or by inclusion into a standard PM dialog. 
  1737.  
  1738. The sketch control has defaults of 1 pel for the ink width and blue for the ink 
  1739. color.  The sketch control allows users to input strokes and have the strokes 
  1740. captured into a sketch database.  The strokes can then be rendered into the 
  1741. clipboard or returned to the application as a bit map. 
  1742.  
  1743.  
  1744. ΓòÉΓòÉΓòÉ 8.1. How the Sketch Control Operates ΓòÉΓòÉΓòÉ
  1745.  
  1746. The appearance of the sketch control can be specified in the dialog template or 
  1747. when the control is created as a window.  You can specify the color and width 
  1748. of the ink used to input strokes and set the shape of the pointer used to input 
  1749. strokes.  The sketch controls use a default of 1 pel for the ink width, blue 
  1750. ink color, and a pen cursor for the drawing pointer. 
  1751.  
  1752. Operation of the control begins when the pen enters the proximity area of the 
  1753. control.  While the pen is in proximity, but before the touch-down point, a pen 
  1754. mouse pointer is displayed.  After the pen touches down on the control window, 
  1755. the pen cursor is displayed. The user then enters strokes within the bounding 
  1756. area of the client window. After a stroke has been completed, the user lifts 
  1757. the pen off the display surface. 
  1758.  
  1759. When the pen has made contact with the surface, the control captures all 
  1760. pointing-device messages and paints the points in the control-display window. 
  1761. At the lift-off point, the control adds the stroke to the sketch database. 
  1762.  
  1763. You can use the sketch control in your application to make a bit map or an 
  1764. addition to the clipboard. It is not necessary to deal with the details of 
  1765. managing individual point events. You can use the sketch control as a 
  1766. transparent overlay, for example, to capture a signature over a bit map of a 
  1767. signature line annotated with "Sign here". 
  1768.  
  1769.  
  1770. ΓòÉΓòÉΓòÉ 8.2. Defining Sketch Controls in a Dialog Window ΓòÉΓòÉΓòÉ
  1771.  
  1772. The following example shows how sketch controls can be defined as part of a 
  1773. dialog template in a resource definition file. 
  1774.  
  1775.  
  1776.   DLGTEMPLATE IDD_DIALOG
  1777.   BEGIN
  1778.     DIALOG "", ID_DLG1, 10, 10, 100, 100, WS_VISIBLE, FCF_DLGBORDER
  1779.     BEGIN
  1780.       LTEXT "Enter your Name:", -1, 10, 20, 80, 10
  1781.       CONTROL "", ID_NAME, 10, 40, 80, 20, WC_SKETCH, WS_VISIBLE | SKS_B
  1782. ORDER
  1783.       DEFPUSHBUTTON "OK", DID_OK, 35, 85, 30, 10, WS_GROUP
  1784.     END
  1785.   END
  1786.  
  1787. The procedure for a dialog window that contains sketch controls must respond to 
  1788. WM_CONTROL messages. 
  1789.  
  1790.  
  1791. ΓòÉΓòÉΓòÉ 8.3. Defining Sketch Controls in a Client Window ΓòÉΓòÉΓòÉ
  1792.  
  1793. You can define a sketch control using an application client window as the 
  1794. owner. The following example shows how. 
  1795.  
  1796.  
  1797. #define ID_SKETCH1  110
  1798. HWND hWndClient, hWndEntryControl;
  1799.  
  1800.  
  1801. hWndEntryControl = WinCreateWindow( hWndClient,   /* Parent Window  */
  1802.                                     WC_SKETCH,    /* Class Name     */
  1803.                                     "",           /* Control Text   */
  1804.                                     WS_VISIBLE,   /* Style Bits     */
  1805.                                     10, 10,       /* x, y           */
  1806.                                     50, 20,       /* cx, cy         */
  1807.                                     hWndClient,   /* Owner          */
  1808.                                     HWND_TOP,     /* Top of Z-Order */
  1809.                                     ID_SKETCH1,   /* ID             */
  1810.                                     NULL,         /* Control Data   */
  1811.                                     NULL );       /* Parameters     */
  1812.  
  1813. When defined in a client window, the sketch control sends WM_CONTROL messages 
  1814. to its parent client window procedure. An application that has sketch controls 
  1815. in its client area can move and size the controls when the client window 
  1816. receives a WM_SIZE message. 
  1817.  
  1818.  
  1819. ΓòÉΓòÉΓòÉ 8.4. Using Control Style Bits ΓòÉΓòÉΓòÉ
  1820.  
  1821. The control style bits let you specify the display attributes of a sketch 
  1822. control. The following table lists the sketch control style bit. 
  1823.  
  1824. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1825. Γöé SKETCH CONTROL STYLE BIT       Γöé ACTION                         Γöé
  1826. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1827. Γöé SKS_BORDER                     Γöé Displays a border around its   Γöé
  1828. Γöé                                Γöé input area.                    Γöé
  1829. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1830. Γöé SKS_3DBORDER                   Γöé Displays a 3-dimensional       Γöé
  1831. Γöé                                Γöé border around its input area.  Γöé
  1832. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1833.  
  1834.  
  1835. ΓòÉΓòÉΓòÉ 8.5. Sending Control Messages ΓòÉΓòÉΓòÉ
  1836.  
  1837. You can send control messages to the sketch entry control to query, set, or 
  1838. change the state of the window containing the sketch control. Messages are sent 
  1839. in the following manner: 
  1840.  
  1841.  
  1842. WinSendMsg(hWndSiCtl,
  1843.            MessageID,
  1844.            mp1,
  1845.            mp2);
  1846.  
  1847. Where: 
  1848.  
  1849.  
  1850. hWndSiCtl = The handle of the sketch entry control window
  1851. MessageID = The ID of the control message
  1852. mp1       = Message data as defined by the control message
  1853. mp2       = Message data as defined by the control message
  1854.  
  1855. See "Sketch Control Programming Interface" for more information on these 
  1856. control messages and the format of the message to the sketch entry control. 
  1857.  
  1858. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1859. Γöé CONTROL MESSAGE                Γöé ACTION                         Γöé
  1860. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1861. Γöé SKM_DELETE_ALL_STROKES         Γöé Tells the sketch control to    Γöé
  1862. Γöé                                Γöé delete all strokes in the      Γöé
  1863. Γöé                                Γöé stroke database.               Γöé
  1864. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1865. Γöé SKM_GET_BITMAP                 Γöé Creates a screen resolution    Γöé
  1866. Γöé                                Γöé bit-map image from the sketch  Γöé
  1867. Γöé                                Γöé control and returns its        Γöé
  1868. Γöé                                Γöé handle.                        Γöé
  1869. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1870. Γöé SKM_UNDO_LAST_STROKE           Γöé Tells the sketch control to    Γöé
  1871. Γöé                                Γöé clear the ink of the last      Γöé
  1872. Γöé                                Γöé stroke and to delete it from   Γöé
  1873. Γöé                                Γöé the control.                   Γöé
  1874. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1875. Γöé SKM_QUERY_BITMAP_SIZE          Γöé Returns the size of the bit    Γöé
  1876. Γöé                                Γöé map that could be returned.    Γöé
  1877. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1878. Γöé SKM_RENDER_TO_CLIPBOARD        Γöé Renders the screen resolution  Γöé
  1879. Γöé                                Γöé bit-map image from the sketch  Γöé
  1880. Γöé                                Γöé control to the clipboard.      Γöé
  1881. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1882. Γöé SKM_QUERY_CTL_DRAW_POINTER     Γöé Returns the drawing pointer    Γöé
  1883. Γöé                                Γöé handle.                        Γöé
  1884. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1885. Γöé SKM_QUERY_CTL_INK_COLOR        Γöé Returns the control's current  Γöé
  1886. Γöé                                Γöé ink color.                     Γöé
  1887. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1888. Γöé SKM_QUERY_CTL_INK_WIDTH        Γöé Returns the control's current  Γöé
  1889. Γöé                                Γöé ink width.                     Γöé
  1890. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1891. Γöé SKM_QUERY_CTL_INVISIBLE_MODE   Γöé Returns the value of the       Γöé
  1892. Γöé                                Γöé invisible mode flag.           Γöé
  1893. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1894. Γöé SKM_QUERY_CTL_STROKE_COUNT     Γöé Gets the count of strokes in   Γöé
  1895. Γöé                                Γöé the stroke control.            Γöé
  1896. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1897. Γöé SKM_QUERY_STROKE_DATA          Γöé Retrieves stroke from the      Γöé
  1898. Γöé                                Γöé stroke control.                Γöé
  1899. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1900. Γöé SKM_QUERY_STROKE_INK_COLOR     Γöé Queries the color of stroke.   Γöé
  1901. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1902. Γöé SKM_QUERY_STROKE_INK_WIDTH     Γöé Queries the ink width of       Γöé
  1903. Γöé                                Γöé stroke.                        Γöé
  1904. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1905. Γöé SKM_QUERY_STROKE_LENGTH        Γöé Retrieves the size in bytes of Γöé
  1906. Γöé                                Γöé stroke.                        Γöé
  1907. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1908. Γöé SKM_SET_CTL_AUXDATA_MODE       Γöé Informs the control that sub-  Γöé
  1909. Γöé                                Γöé sequent strokes will retrieve  Γöé
  1910. Γöé                                Γöé the specified pen stroke aux-  Γöé
  1911. Γöé                                Γöé iliary data.                   Γöé
  1912. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1913. Γöé SKM_SET_CTL_DRAW_POINTER       Γöé Sets the drawing point handle  Γöé
  1914. Γöé                                Γöé and returns the previous       Γöé
  1915. Γöé                                Γöé pointer.                       Γöé
  1916. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1917. Γöé SKM_SET_CTL_INK_COLOR          Γöé Sets the control's current ink Γöé
  1918. Γöé                                Γöé color.                         Γöé
  1919. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1920. Γöé SKM_SET_CTL_INK_WIDTH          Γöé Sets the control's ink width.  Γöé
  1921. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1922. Γöé SKM_SET_CTL_INVISIBLE_MODE     Γöé Turns on or off the invisible  Γöé
  1923. Γöé                                Γöé mode of the control.           Γöé
  1924. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1925. Γöé SKM_SET_STROKE_INK_COLOR       Γöé Resets the color attribute of  Γöé
  1926. Γöé                                Γöé stroke in the stroke database. Γöé
  1927. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1928. Γöé SKM_SET_STROKE_INK_WIDTH       Γöé Resets the ink width attribute Γöé
  1929. Γöé                                Γöé of stroke(i) in the stroke     Γöé
  1930. Γöé                                Γöé database.                      Γöé
  1931. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1932. Γöé SKM_ADD_STROKE                 Γöé Adds a stroke to the control.  Γöé
  1933. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1934.  
  1935.  
  1936. ΓòÉΓòÉΓòÉ 8.6. Receiving Notification Messages ΓòÉΓòÉΓòÉ
  1937.  
  1938. Notification messages are sent by the sketch control to notify its owner of 
  1939. significant events. Messages are received as follows: 
  1940.  
  1941.  
  1942. WinSendMsg(hWndOwner,
  1943.            WM_CONTROL,
  1944.            MPFROM2SHORT(ID, NotifyCode)
  1945.            mp2);
  1946.  
  1947. Where: 
  1948.  
  1949.  
  1950. hWndOwner  = The owner of the sketch control window
  1951. ID         = The ID assigned to the control at creation
  1952. NotifyCode = An event notification code
  1953. mp2        = Notify code-specific information
  1954.  
  1955. The following notification messages are defined for sketch control. See "Sketch 
  1956. Control Programming Interface" for more information on these notification 
  1957. messages for sketch control. 
  1958.  
  1959. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1960. Γöé MESSAGE                   Γöé PURPOSE                        Γöé
  1961. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1962. Γöé SKN_FOCUS_ACTIVATE        Γöé Informs the parent that the    Γöé
  1963. Γöé                           Γöé control has been given input   Γöé
  1964. Γöé                           Γöé focus.                         Γöé
  1965. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1966. Γöé SKN_FOCUS_DEACTIVATE      Γöé Informs the parent that the    Γöé
  1967. Γöé                           Γöé control has lost input focus.  Γöé
  1968. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1969. Γöé SKN_STROKE_ADD            Γöé Sent to the parent when a      Γöé
  1970. Γöé                           Γöé stroke is about to be added to Γöé
  1971. Γöé                           Γöé the stroke database.           Γöé
  1972. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1973. Γöé SKN_STROKE_UNDO           Γöé Sent to the parent when a      Γöé
  1974. Γöé                           Γöé stroke is about to be deleted  Γöé
  1975. Γöé                           Γöé from the stroke database.      Γöé
  1976. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1977. Γöé SKN_CONTROL_CLEARED       Γöé Sent to the parent when the    Γöé
  1978. Γöé                           Γöé stroke database is about to be Γöé
  1979. Γöé                           Γöé cleared of all strokes.        Γöé
  1980. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1981. Γöé SKN_INK_COLOR_CHANGE      Γöé Sent to the parent when the    Γöé
  1982. Γöé                           Γöé ink color for the drawing      Γöé
  1983. Γöé                           Γöé stroke has been changed.       Γöé
  1984. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1985. Γöé SKN_INK_WIDTH_CHANGE      Γöé Sent to the parent when the    Γöé
  1986. Γöé                           Γöé width for the ink has been     Γöé
  1987. Γöé                           Γöé changed.                       Γöé
  1988. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1989.  
  1990.  
  1991. ΓòÉΓòÉΓòÉ 9. Using the Handwriting Entry Control ΓòÉΓòÉΓòÉ
  1992.  
  1993. The handwriting entry control is a standard PM control that can be included in 
  1994. any PM application through window creation or inclusion into a standard PM 
  1995. dialog. The handwriting control lets a Pen for OS/2 program user input 
  1996. handwritten text and have the text recognized and converted to characters. 
  1997.  
  1998.  
  1999. ΓòÉΓòÉΓòÉ 9.1. How the Handwriting Entry Control Operates ΓòÉΓòÉΓòÉ
  2000.  
  2001. The input area is a grid of cells arranged in rows and columns. After entering 
  2002. text, a user can edit the text by using gestures to erase a single character, 
  2003. erase multiple characters, or insert space in a line of text. The window 
  2004. containing the handwriting control can be resized like a normal PM window; the 
  2005. text is reflowed when the window is sized. 
  2006.  
  2007. As the size of a handwriting control is increased, more input cells become 
  2008. available. If a user subsequently reduces the size of the handwriting control, 
  2009. the text will still exist but might not be displayed. Users can enter up to 
  2010. 1024 characters into a handwriting control. Text strings longer than 1024 
  2011. characters are truncated. 
  2012.  
  2013.  
  2014. ΓòÉΓòÉΓòÉ 9.2. Supported Gestures ΓòÉΓòÉΓòÉ
  2015.  
  2016. The following figure illustrates the gestures supported by the handwriting 
  2017. control.  The Virtual ID is shown below each gesture illustration.  A 
  2018. description of the result is included in the table. 
  2019.  
  2020. --------------------------------------------------------------------------------
  2021.  
  2022. DELETECHAR Gesture, Handwriting Entry Control 
  2023.  
  2024. Virtual ID:       VE_DELETECHAR 
  2025. Description:      Deletes the character in the box that is under the hot spot 
  2026.                   of the gesture. 
  2027.  
  2028.                   Hot spot:  Touch down point of gesture. 
  2029.  
  2030. --------------------------------------------------------------------------------
  2031.  
  2032. SCRATCHOUT Gesture, Handwriting Entry Control 
  2033.  
  2034. Virtual ID:       VE_SCRATCHOUT 
  2035. Description:      Deletes the character in any box that is at least 50% covered 
  2036.                   by the bounding box of the gesture. 
  2037.  
  2038.                   Hot spot:  Center point of gesture. 
  2039.  
  2040. --------------------------------------------------------------------------------
  2041.  
  2042. SPACE Gesture, Handwriting Entry Control 
  2043.  
  2044. Virtual ID:       VE_SPACE 
  2045. Description:      One space is inserted for each character cell boundary that 
  2046.                   is crossed by the horizontal segment of the gesture. 
  2047.  
  2048.                   Hot spot:  Midpoint of the vertical segment of the gesture. 
  2049.  
  2050. --------------------------------------------------------------------------------
  2051.  
  2052.  
  2053. ΓòÉΓòÉΓòÉ 9.3. Using Handwriting Controls in a Dialog Window ΓòÉΓòÉΓòÉ
  2054.  
  2055. Handwriting controls can be defined as part of a dialog template in a resource 
  2056. definition file, as shown in the following example: 
  2057.  
  2058.   DLGTEMPLATE IDD_DIALOG
  2059.   BEGIN
  2060.     DIALOG "", ID_DLG1, 10, 10, 100, 100, WS_VISIBLE, FCF_DLGBORDER
  2061.     BEGIN
  2062.       LTEXT "Enter your Name:", -1, 10, 20, 80, 10
  2063.       CONTROL "", ID_NAME, 10, 40, 80, 20, WC_HWXENTRY, WS_VISIBLE | HX_BORDER
  2064.       DEFPUSHBUTTON "OK", DID_OK, 35, 85, 30, 10, WS_GROUP
  2065.     END
  2066.   END
  2067.  
  2068. The dialog window procedure for a dialog window that contains handwriting 
  2069. controls must respond to WM_CONTROL messages. See Part 2:  Pen for OS/2 
  2070. Programming Reference "Handwriting Input Control Programming Interface" for a 
  2071. complete description of the handwriting control notification and control 
  2072. messages. 
  2073.  
  2074.  
  2075. ΓòÉΓòÉΓòÉ 9.4. Using Handwriting Controls in a Client Window ΓòÉΓòÉΓòÉ
  2076.  
  2077. An application can create a handwriting control using an application client 
  2078. window as the owner, as shown in the following example: 
  2079.  
  2080.  
  2081. #define ID_ENTRY1  110
  2082. HWND hWndClient, hWndEntryControl;
  2083.  
  2084.  
  2085. hWndEntryControl = WinCreateWindow( hWndClient,  /* Parent Window  */
  2086.                                     WC_HWXENTRY, /* Class Name     */
  2087.                                     "",          /* Control Text   */
  2088.                          WS_VISIBLE | HX_BORDER, /* Style Bits     */
  2089.                                     10, 10,      /* x, y           */
  2090.                                     50, 20,      /* cx, cy         */
  2091.                                     hWndClient,  /* Owner          */
  2092.                                     HWND_TOP,    /* Top of Z-Order */
  2093.                                     ID_ENTRY1,   /* ID             */
  2094.                                     NULL,        /* Control Data   */
  2095.                                     NULL );      /* Parameters     */
  2096.  
  2097.  
  2098. After it is created in the client window, the handwriting control sends 
  2099. WM_CONTROL messages its parent client window procedure. An application that has 
  2100. created handwriting controls in its client area can move and size the controls 
  2101. when the client window receives a WM_SIZE message. 
  2102.  
  2103.  
  2104. ΓòÉΓòÉΓòÉ 9.5. Using Control Style Bits ΓòÉΓòÉΓòÉ
  2105.  
  2106. Control Style bits let you specify the display attributes of a handwriting 
  2107. control. The following table lists the handwriting control style bits. 
  2108.  
  2109. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2110. Γöé HANDWRITING CONTROL STYLE BITS Γöé ACTION                         Γöé
  2111. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2112. Γöé HX_3DBORDER                    Γöé Displays a three-dimensional   Γöé
  2113. Γöé                                Γöé border around the edge of the  Γöé
  2114. Γöé                                Γöé control's client area.         Γöé
  2115. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2116. Γöé HX_BORDER                      Γöé Displays a black border around Γöé
  2117. Γöé                                Γöé the edge of the control's      Γöé
  2118. Γöé                                Γöé client area.                   Γöé
  2119. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2120.  
  2121.  
  2122. ΓòÉΓòÉΓòÉ 9.6. Receiving Notification Messages ΓòÉΓòÉΓòÉ
  2123.  
  2124. Notification messages are sent by the handwriting control to notify its owner 
  2125. of significant events. Messages are received as follows: 
  2126.  
  2127.  
  2128. WinSendMsg(hOwnerWnd,
  2129.            WM_CONTROL,
  2130.            MPFROM2SHORT(ID, NotifyCode)
  2131.            mp2);
  2132.  
  2133. Where: 
  2134.  
  2135.  
  2136. hOwnerWnd   = The owner window of the handwriting control window
  2137. ID          = The ID assigned to the control at creation
  2138. NotifyCode  = The notification message ID
  2139. mp2         = Notify code specific information
  2140.  
  2141. The following notification messages are defined for handwriting control. 
  2142.  
  2143. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2144. Γöé MESSAGE                   Γöé PURPOSE                             Γöé
  2145. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2146. Γöé HXN_OVERFLOW              Γöé Informs the owner of the control    Γöé
  2147. Γöé                           Γöé that the current operation has      Γöé
  2148. Γöé                           Γöé caused the text area of the control Γöé
  2149. Γöé                           Γöé to overflow.  The text limit for a  Γöé
  2150. Γöé                           Γöé handwriting control is 300 charac-  Γöé
  2151. Γöé                           Γöé ters.  Overflow text is lost.       Γöé
  2152. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2153. Γöé HXN_SETFOCUS              Γöé Informs the owner of the control    Γöé
  2154. Γöé                           Γöé that the control has gained the     Γöé
  2155. Γöé                           Γöé focus.                              Γöé
  2156. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2157. Γöé HXN_KILLFOCUS             Γöé Informs the owner of the control    Γöé
  2158. Γöé                           Γöé that the control has lost focus.    Γöé
  2159. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2160. Γöé HXN_CONTENTS_CHANGED      Γöé Sent to the control when the text   Γöé
  2161. Γöé                           Γöé contents of the control has         Γöé
  2162. Γöé                           Γöé changed.                            Γöé
  2163. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2164. Γöé HXN_STROKE_ADDED          Γöé Informs the owner that the control  Γöé
  2165. Γöé                           Γöé has received a pen stroke that is   Γöé
  2166. Γöé                           Γöé destined to be sent to the recogni- Γöé
  2167. Γöé                           Γöé tion system.  If the owner returns  Γöé
  2168. Γöé                           Γöé TRUE to the message, the control    Γöé
  2169. Γöé                           Γöé takes no further action.  If the    Γöé
  2170. Γöé                           Γöé owner returns FALSE, the control    Γöé
  2171. Γöé                           Γöé sends the pen stroke to the recog-  Γöé
  2172. Γöé                           Γöé nition system.                      Γöé
  2173. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2174. Γöé HXN_DELETE_PENDING        Γöé Informs the owner the control       Γöé
  2175. Γöé                           Γöé intends to delete a range of char-  Γöé
  2176. Γöé                           Γöé acters due to a user gesture.  If   Γöé
  2177. Γöé                           Γöé the owner returns TRUE to the       Γöé
  2178. Γöé                           Γöé message, the control takes no       Γöé
  2179. Γöé                           Γöé further action.  If the owner       Γöé
  2180. Γöé                           Γöé returns FALSE to the message, the   Γöé
  2181. Γöé                           Γöé control deletes the characters in   Γöé
  2182. Γöé                           Γöé the range.                          Γöé
  2183. Γöé                           Γöé                                     Γöé
  2184. Γöé                           Γöé Message parameter 2 (mp2) contains  Γöé
  2185. Γöé                           Γöé two 16-byte fields to denote the    Γöé
  2186. Γöé                           Γöé range as follows:                   Γöé
  2187. Γöé                           Γöé                                     Γöé
  2188. Γöé                           Γöé o   HIUSHORT (mp2) - Start of range Γöé
  2189. Γöé                           Γöé     of deleted characters.          Γöé
  2190. Γöé                           Γöé o   LOUSHORT (mp2) - End of range   Γöé
  2191. Γöé                           Γöé     of deleted characters.          Γöé
  2192. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2193. Γöé HXN_INSERT_PENDING        Γöé Informs the owner the control       Γöé
  2194. Γöé                           Γöé intends to insert spaces into the   Γöé
  2195. Γöé                           Γöé control.  If the owner returns TRUE Γöé
  2196. Γöé                           Γöé to the message, the spaces are not  Γöé
  2197. Γöé                           Γöé inserted.  If the owner returns     Γöé
  2198. Γöé                           Γöé FALSE to the message, the spaces    Γöé
  2199. Γöé                           Γöé are inserted.                       Γöé
  2200. Γöé                           Γöé                                     Γöé
  2201. Γöé                           Γöé Message parameter 2 (mp2) contains  Γöé
  2202. Γöé                           Γöé the following values:               Γöé
  2203. Γöé                           Γöé                                     Γöé
  2204. Γöé                           Γöé o   usPosition (USHORT) - Position  Γöé
  2205. Γöé                           Γöé     in the current text where       Γöé
  2206. Γöé                           Γöé     spaces will be inserted.        Γöé
  2207. Γöé                           Γöé o   usCount (USHORT) - Number of    Γöé
  2208. Γöé                           Γöé     spaces that will be inserted.   Γöé
  2209. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2210. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2211. Γöé MESSAGE                   Γöé PURPOSE                             Γöé
  2212. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2213. Γöé HXN_GESTURE_PENDING       Γöé Informs the owner of the control    Γöé
  2214. Γöé                           Γöé that the user has just entered a    Γöé
  2215. Γöé                           Γöé gesture in the control.  If the     Γöé
  2216. Γöé                           Γöé owner returns TRUE to the message,  Γöé
  2217. Γöé                           Γöé the gesture is not executed.  If    Γöé
  2218. Γöé                           Γöé the owner returns FALSE to the      Γöé
  2219. Γöé                           Γöé message, the gesture is executed.   Γöé
  2220. Γöé                           Γöé                                     Γöé
  2221. Γöé                           Γöé Message parameter 2 (mp2) contains  Γöé
  2222. Γöé                           Γöé the gesture ID.  Possible values    Γöé
  2223. Γöé                           Γöé for mp2 are:                        Γöé
  2224. Γöé                           Γöé                                     Γöé
  2225. Γöé                           Γöé o   VE_SPACE                        Γöé
  2226. Γöé                           Γöé o   VE_SCRATCHOUT                   Γöé
  2227. Γöé                           Γöé o   VE_DELETECHAR                   Γöé
  2228. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2229.  
  2230.  
  2231. ΓòÉΓòÉΓòÉ 9.7. Sizing a Handwriting Control ΓòÉΓòÉΓòÉ
  2232.  
  2233. A handwriting control can be sized with the OS/2 PM WinSetWindowPos function. 
  2234.  
  2235. When the handwriting control is sized larger, more rows and columns are added, 
  2236. as many as will fit into the current control size, allowing borders on each 
  2237. side of the character input area.  When sizing the control for a given number 
  2238. of rows and columns, the border areas must be added to the sizing. For example, 
  2239. to size a control to 5 rows with 12 columns the following calculation is 
  2240. performed: 
  2241.  
  2242. Rows        = 5 
  2243.  
  2244. Columns     = 12 
  2245.  
  2246. CharBoxDX   = WrtQuerySysValue(HWND_DESKTOP, PPMSV_CHARACTER_BOX_DX) 
  2247.  
  2248. CharBoxDY   = WrtQuerySysValue(HWND_DESKTOP, PPMSV_CHARACTER_BOX_DY) 
  2249.  
  2250. BaseLineDY  = CharBoxDY / 3 
  2251.  
  2252. ControlDY   = ( Rows * (CharBoxDY + BaseLineDY) ) + BaseLineDY 
  2253.  
  2254. ControlDX   = ( Columns * CharBoxDX) + (CharBoxDX / 2) 
  2255.  
  2256. Using these calculations gives an optimal size control with even-centering 
  2257. borders on top, bottom, left, and right. 
  2258.  
  2259.  
  2260. ΓòÉΓòÉΓòÉ 10. Using Virtual Keyboards and the Pop-Up Keyboard Tool ΓòÉΓòÉΓòÉ
  2261.  
  2262. The Pen for OS/2 program displays virtual keyboards that resemble physical 
  2263. keyboards using the Pop-Up Keyboard Tool. Keystrokes are sent to an application 
  2264. as the user selects keys using a pointing device, such as a pen or finger. This 
  2265. is particularly useful for systems that do not include a physical keyboard, or 
  2266. for applications that require specialized keyboards. 
  2267.  
  2268. You can load a keyboard and have it associated with your application. 
  2269. Keystrokes entered on the keyboard are sent to your application. Your 
  2270. application can hide and control the location of the Pop-Up Keyboard Tool. 
  2271.  
  2272.  
  2273. ΓòÉΓòÉΓòÉ 10.1. Selecting a Keyboard ΓòÉΓòÉΓòÉ
  2274.  
  2275. Keyboard data files are loaded from the disk and kept in memory to provide 
  2276. faster access.  The following keyboard data files are currently shipped with 
  2277. the Pen for OS/2 program.  Each keyboard data file represents one keyboard. 
  2278.  
  2279. Default                Always in memory 
  2280.  
  2281. TRAINER.KB1            Keyboard used in training 
  2282.  
  2283. FULLSIZE.KB1           Full keyboard 
  2284.  
  2285. 3270PFK.KB1            3270 emulation PF keys 
  2286.  
  2287. NUMKEY.KB1             Number pad 
  2288.  
  2289. NUMBER.KBL             Number pad 
  2290.  
  2291.  
  2292. ΓòÉΓòÉΓòÉ 10.2. Key Actions ΓòÉΓòÉΓòÉ
  2293.  
  2294. Each key might have one action or a set of actions. These actions can be any 
  2295. one of the following: 
  2296.  
  2297. o A character or character string 
  2298.  
  2299. o A virtual keystroke (Insert, Delete, Up Arrow, Down Arrow, and so forth) 
  2300.  
  2301. o A defined function (Current Date, Current Time, and so forth) 
  2302.  
  2303. o The setting of a state variable (Shift, Ctrl, Alt, and so forth) 
  2304.  
  2305. Generated character strings and virtual keys are directed to the application as 
  2306. WM_CHARs, as if entered from a physical keyboard. 
  2307.  
  2308.  
  2309. ΓòÉΓòÉΓòÉ 10.3. Controlling the Pop-Up Keyboard Tool ΓòÉΓòÉΓòÉ
  2310.  
  2311. Several APIs are provided for you to control the Pop-Up Keyboard Tool. For 
  2312. example, you can load, delete, position, and hide a keyboard. The following 
  2313. table shows the APIs you can use and the functions they provide. 
  2314.  
  2315. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2316. Γöé API                  Γöé FUNCTION                                 Γöé
  2317. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2318. Γöé VkpDeleteKeyboard    Γöé Deletes a keyboard from memory.          Γöé
  2319. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2320. Γöé VkpHideKeyboard      Γöé Hides a keyboard if it is currently      Γöé
  2321. Γöé                      Γöé visible.                                 Γöé
  2322. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2323. Γöé VkpIsKbHidden        Γöé Determines if the Pop-Up Keyboard Tool   Γöé
  2324. Γöé                      Γöé is currently hidden.                     Γöé
  2325. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2326. Γöé VkpIsKbRunning       Γöé Determines if the Pop-Up Keyboard Tool   Γöé
  2327. Γöé                      Γöé is currently running.                    Γöé
  2328. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2329. Γöé VkpLoadKeyboard      Γöé Loads a new keyboard into memory and     Γöé
  2330. Γöé                      Γöé displays it.                             Γöé
  2331. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2332. Γöé VkpCloseKb           Γöé Enables an application to close the      Γöé
  2333. Γöé                      Γöé Pop-Up Keyboard Tool.                    Γöé
  2334. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2335. Γöé VkpQueryKbPos        Γöé Returns the current position of the      Γöé
  2336. Γöé                      Γöé Pop-Up Keyboard Tool in desktop coordi-  Γöé
  2337. Γöé                      Γöé nates.                                   Γöé
  2338. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2339. Γöé VkpSetKbPos          Γöé Sets the Pop-Up Keyboard Tool position   Γöé
  2340. Γöé                      Γöé on the desktop.                          Γöé
  2341. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2342.  
  2343.  
  2344. ΓòÉΓòÉΓòÉ 10.4. Changing Keyboard Views ΓòÉΓòÉΓòÉ
  2345.  
  2346. Although multiple keyboards might be loaded in memory at one time, only one 
  2347. keyboard is displayed at a time. When a new keyboard is displayed, the current 
  2348. keyboard display is destroyed, but the keyboard data is kept in memory for 
  2349. later use, until deleted. 
  2350.  
  2351. Your application must ensure that its keyboard is displayed.  When your 
  2352. application regains focus, you should reload the keyboard. If your keyboard has 
  2353. moved, you can reposition it. 
  2354.  
  2355.  
  2356. ΓòÉΓòÉΓòÉ 11. Using System Variables ΓòÉΓòÉΓòÉ
  2357.  
  2358. The Pen for OS/2 program provides system variables that let your application 
  2359. query system information and customize the Pen for OS/2 system. The following 
  2360. system variables are provided. 
  2361.  
  2362. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2363. Γöé SYSTEM VARIABLE                Γöé DESCRIPTION          Γöé CONFIGURED BY   Γöé
  2364. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2365. Γöé PPMSV_VERSION                  Γöé Pen for OS/2 version Γöé Pen for OS/2    Γöé
  2366. Γöé                                Γöé                      Γöé system          Γöé
  2367. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2368. Γöé PPMSV_SUSPEND                  Γöé Pen for OS/2 sus-    Γöé Pen for OS/2    Γöé
  2369. Γöé                                Γöé pended               Γöé system          Γöé
  2370. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2371. Γöé PPMSV_PEN_PAUSE                Γöé Pen pause variable   Γöé User            Γöé
  2372. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2373. Γöé PPMSV_TOUCH_PAUSE              Γöé Touch pause          Γöé User            Γöé
  2374. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2375. Γöé PPMSV_MOUSE_PAUSE              Γöé Mouse pause          Γöé User            Γöé
  2376. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2377. Γöé PPMSV_OTHER_PAUSE              Γöé Other device pause   Γöé User            Γöé
  2378. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2379. Γöé PPMSV_PEN_PAUSE_ENABLE         Γöé Enable pen pause     Γöé User            Γöé
  2380. Γöé                                Γöé variable             Γöé                 Γöé
  2381. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2382. Γöé PPMSV_TOUCH_PAUSE_ENABLE       Γöé Enable touch pause   Γöé User            Γöé
  2383. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2384. Γöé PPMSV_MOUSE_PAUSE_ENABLE       Γöé Enable mouse pause   Γöé User            Γöé
  2385. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2386. Γöé PPMSV_OTHER_PAUSE_ENABLE       Γöé Enable other device  Γöé User            Γöé
  2387. Γöé                                Γöé pause                Γöé                 Γöé
  2388. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2389. Γöé PPMSV_PAUSEBEEPFREQ            Γöé Pause beep frequency Γöé User            Γöé
  2390. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2391. Γöé PPMSV_RECO_BEEP_ENABLE         Γöé Enable recognition   Γöé User            Γöé
  2392. Γöé                                Γöé beep                 Γöé                 Γöé
  2393. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2394. Γöé PPMSV_MINGESTUREPOINTS         Γöé Minimum number of    Γöé OEM or          Γöé
  2395. Γöé                                Γöé points               Γöé Recognition     Γöé
  2396. Γöé                                Γöé                      Γöé Provider        Γöé
  2397. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2398. Γöé PPMSV_GESTURE_TIMEOUT          Γöé Gesture interstroke  Γöé User            Γöé
  2399. Γöé                                Γöé timeout              Γöé                 Γöé
  2400. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2401. Γöé PPMSV_GESTURE_CANCEL_TIMEOUT   Γöé Cancel gesture timer Γöé User            Γöé
  2402. Γöé                                Γöé value                Γöé                 Γöé
  2403. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2404. Γöé PPMSV_RECOPTRTIMER             Γöé Recognition pointer  Γöé User            Γöé
  2405. Γöé                                Γöé change time          Γöé                 Γöé
  2406. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2407. Γöé PPMSV_STANDARDIZED_RESOLUTION  Γöé Standardized resol-  Γöé Pen for OS/2    Γöé
  2408. Γöé                                Γöé ution                Γöé system          Γöé
  2409. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2410. Γöé PPMSV_CHARACTER_BOX_DX         Γöé Size of character    Γöé Pen for OS/2    Γöé
  2411. Γöé                                Γöé input box (x)        Γöé system          Γöé
  2412. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2413. Γöé PPMSV_CHARACTER_BOX_DY         Γöé Size of character    Γöé Pen for OS/2    Γöé
  2414. Γöé                                Γöé input box (y)        Γöé system          Γöé
  2415. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2416.  
  2417. System variables are kept in memory and maintained persistently so that the 
  2418. values do not need to be set on each system startup. 
  2419.  
  2420.  
  2421. ΓòÉΓòÉΓòÉ 11.1. Controlling System Variables ΓòÉΓòÉΓòÉ
  2422.  
  2423. You can query the value of a system variable kept in memory with the 
  2424. WrtQuerySysValue function. WrtReadSysValue retrieves the value of the system 
  2425. variable from the Pen for OS/2 profile maintained on disk and updates the 
  2426. memory copy. You can set a value for a system variable in memory with the 
  2427. WrtSetSysValue function. The persistent value on disk is not changed. You can 
  2428. change the persistent value with the WrtWriteSysValue function. 
  2429.  
  2430. Note:  You must send the notification message WM_WRT_SYSVALUECHANGED with 
  2431.        WinBroadcastMsg after changing the value of a system variable. 
  2432.  
  2433. For example, if you have changed the PPMSV_RECO_BEEP_ENABLE system variable, 
  2434. then you must do the following broadcast: 
  2435.  
  2436.  
  2437.   WinBroadcastMsg (HWND_DESKTOP, WM_WRT_SYSVALUECHANGED, (MPARAM) VT_PPMSV,
  2438.                (MPARAM) PPMSV_RECO_BEEP_ENABLE, BMSG_DESCENDANTS|BMSG_POST);
  2439.  
  2440. Most of the system variables will need to be set only once.  If the system 
  2441. variables are set incorrectly, the user can render the user interface unusable. 
  2442. The following table provides the minimum and maximum settings, the default 
  2443. setting, and if the setting can be disabled. 
  2444.  
  2445. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2446. Γöé                               Γöé          Γöé          Γöé  DEFAULT Γöé   DISABLE   Γöé
  2447. Γöé SYSTEM VARIABLE               Γöé  MINIMUM Γöé  MAXIMUM Γöé  SETTING Γöé   SETTING   Γöé
  2448. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2449. Γöé PPMSV_PEN_PAUSE               Γöé      150 Γöé     2000 Γöé      400 Γöé      No     Γöé
  2450. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2451. Γöé PPMSV_TOUCH_PAUSE             Γöé      150 Γöé     2000 Γöé      300 Γöé      No     Γöé
  2452. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2453. Γöé PPMSV_MOUSE_PAUSE             Γöé      150 Γöé     2000 Γöé        0 Γöé      No     Γöé
  2454. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2455. Γöé PPMSV_OTHER_PAUSE             Γöé      150 Γöé     3500 Γöé      200 Γöé      No     Γöé
  2456. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2457. Γöé PPMSV_PEN_PAUSE_ENABLE        Γöé        0 Γöé        1 Γöé        1 Γöé      No     Γöé
  2458. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2459. Γöé PPMSV_TOUCH_PAUSE_ENABLE      Γöé        0 Γöé        1 Γöé        1 Γöé      No     Γöé
  2460. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2461. Γöé PPMSV_MOUSE_PAUSE_ENABLE      Γöé        0 Γöé        1 Γöé        0 Γöé      No     Γöé
  2462. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2463. Γöé PPMSV_OTHER_PAUSE_ENABLE      Γöé        0 Γöé        1 Γöé        1 Γöé      No     Γöé
  2464. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2465. Γöé PPMSV_PAUSEBEEPFREQ           Γöé      100 Γöé     4000 Γöé      100 Γöé     Yes     Γöé
  2466. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2467. Γöé PPMSV_RECO_BEEP_ENABLE        Γöé        0 Γöé        1 Γöé        1 Γöé     Yes     Γöé
  2468. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2469. Γöé PPMSV_MINGESTUREPOINTS        Γöé        1 Γöé       20 Γöé        5 Γöé      No     Γöé
  2470. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2471. Γöé PPMSV_GESTURE_TIMEOUT         Γöé      100 Γöé     2000 Γöé      900 Γöé      No     Γöé
  2472. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2473. Γöé PPMSV_GESTURE_CANCEL_TIMEOUT  Γöé      500 Γöé     3000 Γöé     1200 Γöé      No     Γöé
  2474. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2475. Γöé PPMSV_RECOPTRTIMER            Γöé      200 Γöé     1250 Γöé      350 Γöé     Yes     Γöé
  2476. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2477. Γöé PPMSV_STANDARDIZED_RESOLUTION Γöé     1000 Γöé     1000 Γöé     1000 Γöé      No     Γöé
  2478. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2479. Γöé PPMSV_CHARACTER_BOX_DX        Γöé        - Γöé        - Γöé  Dynamic Γöé      No     Γöé
  2480. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2481. Γöé PPMSV_CHARACTER_BOX_DY        Γöé        - Γöé        - Γöé  Dynamic Γöé      No     Γöé
  2482. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2483.  
  2484.  
  2485. ΓòÉΓòÉΓòÉ 11.2. Receiving Notification Messages ΓòÉΓòÉΓòÉ
  2486.  
  2487. You will receive a WM_WRT_SYSVALUECHANGED notification message whenever any of 
  2488. the system variables are changed by any application. Your application would 
  2489. obtain the new values of the system variables that your application is using. 
  2490.  
  2491.  
  2492. ΓòÉΓòÉΓòÉ 12. Using Device Drivers ΓòÉΓòÉΓòÉ
  2493.  
  2494. The Pen for OS/2 program uses pen device drivers to generate hardware-specific 
  2495. information such as: 
  2496.  
  2497. o Position (x,y) 
  2498. o Contact status 
  2499. o Proximity status 
  2500. o High precision device time stamp 
  2501. o Pressure value 
  2502. o Height value (proximity) 
  2503. o Angle and rotation 
  2504. o Status of buttons 
  2505. o Resolution and sampling rate 
  2506. o Smart pen features 
  2507.  
  2508.  
  2509. ΓòÉΓòÉΓòÉ 12.1. Logical Devices ΓòÉΓòÉΓòÉ
  2510.  
  2511. Each physical pen device driver contains logical devices which manage the pen 
  2512. hardware. There are three types of logical devices: 
  2513.  
  2514. o Locator devices 
  2515. o Buttons 
  2516. o The backlight of an LCD display 
  2517.  
  2518. Your application can enumerate, or make a list of, the driver name for each pen 
  2519. device driver present in your system with the pen device driver functions 
  2520. described in this chapter. Your application can obtain the capabilities of each 
  2521. logical device using the driver name obtained from the enumeration. 
  2522.  
  2523. The Pen for OS/2 program has a set of device variables which provide low-level 
  2524. control over the device characteristics. Your application can query and set 
  2525. these device variables. Some of these variables are managed through the user 
  2526. interface by Workplace Shell objects provided with the physical pen device 
  2527. driver. Your application can choose to manage the device variables that are not 
  2528. managed from the user interface in your application. 
  2529.  
  2530. The Pen for OS/2 program manages the backlight of your display to save power 
  2531. and extend the life of the display. Your application can control this automatic 
  2532. support through the functions described in this chapter. Your application also 
  2533. can turn the backlight on and off to provide security in "sensitivity" 
  2534. environments or to directly manage the power and life of your display. 
  2535.  
  2536. With the functions described in this chapter, your application can take 
  2537. advantage of hardware-specific capabilities of your system's pen device drivers 
  2538. in your application. 
  2539.  
  2540.  
  2541. ΓòÉΓòÉΓòÉ 12.2. Determining Device Configuration and Capabilities. ΓòÉΓòÉΓòÉ
  2542.  
  2543. Each pen device driver has a unique driver name.  Your application can 
  2544. enumerate the driver names present in your system with the WrtEnumInputDrivers 
  2545. function.  WrtEnumInputDrivers returns an array of null-terminated driver 
  2546. names.  Each driver name is a 32 character array. For example: 
  2547.  
  2548.    "ABC Color Tablet\0     WACOM SD-510C\0     MOUSE\0 "
  2549.  
  2550.  
  2551. Your application can find out the logical devices in each physical pen device 
  2552. driver using the driver name and the WrtQueryInputDeviceNames function. 
  2553. WrtQueryInputDeviceNames returns three arrays per driver name:  a 
  2554. null-terminated logical device-name array, a device-type array, and a device-ID 
  2555. array. There are three logical device types:  locator devices, buttons, and the 
  2556. backlight of an LCD display.  Each logical device is assigned a unique ID 
  2557. within its device type. Your application uses this ID to select a logical 
  2558. device in the device capability functions that will be described next.  The 
  2559. locator device ID is passed on every point of a stroke.  The ID can be found in 
  2560. the point's event data structure. 
  2561.  
  2562. Note:  On a WM_MOUSEMOVE, your application can obtain the current event data 
  2563.        structure by calling WRT_QUERYEVENTDATA. 
  2564.  
  2565. To continue our example, the results of three WrtQueryInputDeviceNames (one for 
  2566. each Driver Name), could be: 
  2567.  
  2568. Driver Name  -  "ABC Color Tablet"
  2569. Device Name  -  "Pen"        "Touch"        "BezelButton"   "ColorLCD"
  2570. Device Type  -  DT_LOCATOR    DT_LOCATOR     DT_BUTTON       DT_DISPLAY
  2571. Device ID    -  1             2              1               1
  2572.  
  2573. Driver Name  -  "WACOM SD-510C"
  2574. Device Name  -  "Pen"        "BarrelButton"
  2575. Device Type  -  DT_LOCATOR    DT_BUTTON
  2576. Device ID    -  3             2
  2577.  
  2578. Driver Name  -  "MOUSE"
  2579. Device Name  -  "StockMouse"
  2580. Device Type  -  DT_LOCATOR
  2581. Device ID    -  4
  2582.  
  2583. Your application can obtain the device capabilities of your logical devices 
  2584. using the device ID obtained from WrtQueryInputDeviceNames with the 
  2585. WrtQueryLocatorCaps, WrtQueryButtonCaps, and WrtQueryDisplayCaps functions. 
  2586. WrtQuerySystemCaps returns the capabilities of the system.  The following table 
  2587. shows the function and the structure returned for capabilities information. 
  2588.  
  2589. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2590. Γöé FUNCTION             Γöé STRUCTURE RETURNED Γöé DESCRIPTION       Γöé
  2591. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2592. Γöé WrtQueryLocatorCaps  Γöé WRTLOCATORDEVINFO  Γöé Locator device    Γöé
  2593. Γöé                      Γöé                    Γöé capabilities      Γöé
  2594. Γöé                      Γöé                    Γöé information       Γöé
  2595. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2596. Γöé WrtQueryButtonCaps   Γöé WRTBUTTONDEVINFO   Γöé Button device     Γöé
  2597. Γöé                      Γöé                    Γöé capabilities      Γöé
  2598. Γöé                      Γöé                    Γöé information       Γöé
  2599. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2600. Γöé WrtQueryDisplayCaps  Γöé WRTDISPLAYDEVINFO  Γöé Display device    Γöé
  2601. Γöé                      Γöé                    Γöé capabilities      Γöé
  2602. Γöé                      Γöé                    Γöé information       Γöé
  2603. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2604. Γöé WrtQuerySystemCaps   Γöé WRTSYSTEMINFO      Γöé System capabili-  Γöé
  2605. Γöé                      Γöé                    Γöé ties information  Γöé
  2606. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2607.  
  2608.  
  2609. ΓòÉΓòÉΓòÉ 12.3. Controlling Device Variables ΓòÉΓòÉΓòÉ
  2610.  
  2611. The Pen for OS/2 program maintains the following variables for each individual 
  2612. logical device. 
  2613.  
  2614. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2615. Γöé                          Γöé                      Γöé              Γöé CONFIGURED Γöé
  2616. Γöé INPUT DEVICE VARIABLE    Γöé DESCRIPTION          Γöé DEVICE TYPE  Γöé BY         Γöé
  2617. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2618. Γöé PPMID_MOTION_STOP        Γöé Stops motion filter  Γöé DT_LOCATOR   Γöé OEM        Γöé
  2619. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2620. Γöé PPMID_MOTION_START       Γöé Starts motion filter Γöé DT_LOCATOR   Γöé OEM        Γöé
  2621. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2622. Γöé PPMID_MINGESTURELENGTH   Γöé Minimum gesture size Γöé DT_LOCATOR   Γöé OEM or     Γöé
  2623. Γöé                          Γöé                      Γöé              Γöé Recogni-   Γöé
  2624. Γöé                          Γöé                      Γöé              Γöé tion       Γöé
  2625. Γöé                          Γöé                      Γöé              Γöé Provider   Γöé
  2626. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2627. Γöé PPMID_DISABLE_PROXIMITY  Γöé Disables proximity   Γöé DT_LOCATOR   Γöé User       Γöé
  2628. Γöé                          Γöé events               Γöé              Γöé            Γöé
  2629. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2630. Γöé PPMID_POINT_RATE         Γöé Maximum point rate   Γöé DT_LOCATOR   Γöé User       Γöé
  2631. Γöé                          Γöé                      Γöé              Γöé Pen for    Γöé
  2632. Γöé                          Γöé                      Γöé              Γöé OS/2       Γöé
  2633. Γöé                          Γöé                      Γöé              Γöé recommen-  Γöé
  2634. Γöé                          Γöé                      Γöé              Γöé dation     Γöé
  2635. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2636. Γöé PPMID_DIVIDE_RATE        Γöé Divide rate          Γöé DT_LOCATOR   Γöé Pen for    Γöé
  2637. Γöé                          Γöé                      Γöé              Γöé OS/2       Γöé
  2638. Γöé                          Γöé                      Γöé              Γöé recommen-  Γöé
  2639. Γöé                          Γöé                      Γöé              Γöé dation     Γöé
  2640. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2641. Γöé PPMID_BACKLIGHTBLANK     Γöé Blanking enable      Γöé DT_DISPLAY   Γöé User       Γöé
  2642. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2643. Γöé PPMID_BACKLIGHTBLANK_INT Γöé Blanking timer       Γöé DT_DISPLAY   Γöé User       Γöé
  2644. Γöé                          Γöé interval in seconds  Γöé              Γöé            Γöé
  2645. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2646. Γöé PPMID_TOUCHOFFSET_X      Γöé Displays offset      Γöé DT_LOCATOR   Γöé User       Γöé
  2647. Γöé                          Γöé between fingertip    Γöé              Γöé            Γöé
  2648. Γöé                          Γöé and the screen's     Γöé              Γöé            Γöé
  2649. Γöé                          Γöé pointer icon (X).    Γöé              Γöé            Γöé
  2650. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2651. Γöé PPMID_TOUCHOFFSET_Y      Γöé Displays offset      Γöé DT_LOCATOR   Γöé User       Γöé
  2652. Γöé                          Γöé between fingertip    Γöé              Γöé            Γöé
  2653. Γöé                          Γöé and the screen's     Γöé              Γöé            Γöé
  2654. Γöé                          Γöé pointer icon (Y).    Γöé              Γöé            Γöé
  2655. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2656. Γöé PPMID_DEVICE_PARMS       Γöé Device-specific data Γöé ALL          Γöé OEM        Γöé
  2657. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2658.  
  2659. Your application can query, set, and manage these device variables. However, 
  2660. these variables have a global and persistent effect. They are not intended to 
  2661. be changed frequently or to be set for a particular application's needs.  Most 
  2662. of the input device variables will need to be set only once.  If the input 
  2663. device variables are set incorrectly, the user can render the user interface 
  2664. unusable. The following table provides the minimum and maximum settings, the 
  2665. default setting, and if the setting can be disabled. 
  2666.  
  2667. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2668. Γöé                           Γöé           Γöé           Γöé   DEFAULT Γöé  DISABLE  Γöé
  2669. Γöé INPUT DEVICE VARIABLE     Γöé   MINIMUM Γöé   MAXIMUM Γöé   SETTING Γöé  SETTING  Γöé
  2670. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2671. Γöé PPMID_MOTION_STOP         Γöé        28 Γöé       300 Γöé     28-56 Γöé     No    Γöé
  2672. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2673. Γöé PPMID_MOTION_START        Γöé         1 Γöé      1000 Γöé    25-104 Γöé     No    Γöé
  2674. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2675. Γöé PPMID_MINGESTURELENGTH    Γöé         1 Γöé    1-8000 Γöé   156-233 Γöé     No    Γöé
  2676. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2677. Γöé PPMID_DISABLE_PROXIMITY   Γöé         0 Γöé         1 Γöé         0 Γöé     No    Γöé
  2678. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2679. Γöé PPMID_POINT_RATE          Γöé        40 Γöé       200 Γöé       100 Γöé    Yes    Γöé
  2680. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2681. Γöé PPMID_DIVIDE_RATE         Γöé         1 Γöé         8 Γöé         2 Γöé     No    Γöé
  2682. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2683. Γöé PPMID_BACKLIGHTBLANK      Γöé         0 Γöé         1 Γöé         1 Γöé     No    Γöé
  2684. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2685. Γöé PPMID_BACKLIGHTBLANK_INT  Γöé        10 Γöé    500000 Γöé      1200 Γöé     No    Γöé
  2686. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2687. Γöé PPMID_TOUCHOFFSET_X       Γöé     -1000 Γöé      1000 Γöé         0 Γöé     No    Γöé
  2688. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2689. Γöé PPMID_TOUCHOFFSET_Y       Γöé     -1000 Γöé      1000 Γöé         0 Γöé     No    Γöé
  2690. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2691.  
  2692. o Your application can query the current value of these variables with the 
  2693.   WrtQueryInputDeviceVariable function and your application can set the values 
  2694.   with the WrtSetInputDeviceVariable function. 
  2695.  
  2696. o Your application can use PPMID_MOTION_STOP, PPMID_MOTION_START, 
  2697.   PPMID_MINGESTURELENGTH, and PPMID_DISABLE_PROXIMITY to configure the system's 
  2698.   response for special cases. 
  2699.  
  2700. o Your application can use PPMID_POINT_RATE to control the interrupt rate of 
  2701.   the pen device driver. PPMID_DIVID_RATE controls the number of high-frequency 
  2702.   locator events that update the OS/2 mouse-pointer position. All locator 
  2703.   events are available to the application program. If your application set 
  2704.   PPMID_DIVID_RATE to the value 2, all locator events are available for your 
  2705.   application, but only every other point will be used to update the OS/2 mouse 
  2706.   pointer for applications that do not request to process all locator events. 
  2707.  
  2708. o The hardware original equipment manufacturer provides Workplace Shell 
  2709.   configuration objects to control PPMID_BACKLIGHTBLANK and 
  2710.   PPMID_BACKLIGHTBLANK_INT through the user interface, but your application 
  2711.   might want to control these yourself. This procedure is described later in 
  2712.   this chapter. The hardware original equipment manufacturer uses 
  2713.   PPMID_DEVICE_PARMS to control the device and it must be used only for this 
  2714.   purpose. It is listed here only for completeness. 
  2715.  
  2716. Note:  Your application must send the notification message 
  2717.        WM_WRT_SYSVALUECHANGED with WinBroadcastMsg after using 
  2718.        WrtSetInputDeviceVariables. 
  2719.  
  2720. For example, if your application has changed the PPMID_BACKLIGHT device 
  2721. variable, then your application must do the following broadcast: 
  2722.  
  2723.  
  2724.   WinBroadcastMsg (HWND_DESKTOP, WM_WRT_SYSVALUECHANGED, (MPARAM) VT_PPMID,
  2725.                    (MPARAM) (PPMID_BACKLIGHT, BMSG_DESCENDANTS|BMSG_POST);
  2726.  
  2727.  
  2728. ΓòÉΓòÉΓòÉ 12.4. Receiving Notification Messages ΓòÉΓòÉΓòÉ
  2729.  
  2730. Your application will receive a WM_WRT_SYSVALUECHANGED notification message 
  2731. whenever any of the device variables are changed by any application. 
  2732.  
  2733. Your application will receive a WM_WRT_DEV_CAPS_CHANGE notification message 
  2734. whenever the device capabilities for any device is updated. Your application 
  2735. would obtain the new device configuration and capabilities after receiving the 
  2736. WM_WRT_DEV_CAPS_CHANGE message. 
  2737.  
  2738.  
  2739. ΓòÉΓòÉΓòÉ 12.5. Controlling the Display Backlight ΓòÉΓòÉΓòÉ
  2740.  
  2741. Your application can control the LCD backlight with the 
  2742. WrtControlDisplayBacklight function and device variables PPMID_BACKLIGHT and 
  2743. PPMID_BACKLIGHT_INT. Your application can turn the display backlight on and off 
  2744. with the WrtControlDisplayBacklight function. 
  2745.  
  2746. Your application can use the PPMID_BACKLIGHT device variable to enable 
  2747. automatic display backlight control. The Pen for OS/2 program will 
  2748. automatically turn off the backlight when there has been no activity for a 
  2749. specific time period. This time period (in seconds) can be set with the 
  2750. PPMID_BACKLIGHT_INT device variable. The Pen for OS/2 program automatically 
  2751. turns the backlight back on again when the system is next used. 
  2752.  
  2753.  
  2754. ΓòÉΓòÉΓòÉ 12.6. Using Buttons ΓòÉΓòÉΓòÉ
  2755.  
  2756. Your application can use the button device capabilities to determine the number 
  2757. of buttons present in a pen device driver. Your application can also determine 
  2758. if the buttons are on a locator device or on a display device. The state of all 
  2759. buttons is reported on each locator event. A hardware original equipment 
  2760. manufacturer would provide Workplace Shell configuration objects that assign 
  2761. actions to the buttons. 
  2762.  
  2763.  
  2764. ΓòÉΓòÉΓòÉ 13. Part 2:  Pen for OS/2 Programming Reference ΓòÉΓòÉΓòÉ
  2765.  
  2766.  
  2767. ΓòÉΓòÉΓòÉ 14. Pen for OS/2 Writing Subsystem API ΓòÉΓòÉΓòÉ
  2768.  
  2769. The APIs in this chapter let developer's view and control stroke data and 
  2770. interact with the Pen for OS/2 system extension writing subsystem. 
  2771.  
  2772.  
  2773. ΓòÉΓòÉΓòÉ 14.1. WrtQuerySysValue ΓòÉΓòÉΓòÉ
  2774.  
  2775.  Syntax   value = WrtQuerySysValue (HWND deskTop, ULONG valueid); 
  2776.  
  2777.  Purpose 
  2778.  
  2779.           This function queries the Pen for OS/2 writing input subsystem system 
  2780.           value from memory. 
  2781.  
  2782.  Parameters 
  2783.  
  2784.           deskTop (HWND) - input 
  2785.                     The window handle of the PM deskTop. 
  2786.  
  2787.           valueid (ULONG) - input 
  2788.                     Pen for OS/2 system value identity.  (See description of 
  2789.                     values in "Using System Variables" .) 
  2790.  
  2791.                                         PPMSV_PEN_PAUSE                  Pen pause variable
  2792.                                         PPMSV_TOUCH_PAUSE                Touch pause
  2793.                                         PPMSV_MOUSE_PAUSE                Mouse pause
  2794.                                         PPMSV_OTHER_PAUSE                Other pause
  2795.  
  2796.                                         PPMSV_PEN_PAUSE_ENABLE           Pen pause timeout enable
  2797.                                         PPMSV_TOUCH_PAUSE_ENABLE         Touch pause timeout enable
  2798.                                         PPMSV_MOUSE_PAUSE_ENABLE         Mouse pause timeout enable
  2799.                                         PPMSV_OTHER_PAUSE_ENABLE         Other pause timeout enable
  2800.  
  2801.                                         PPMSV_PAUSEBEEPFREQ              Pause beep frequency
  2802.                                         PPMSV_RECO_BEEP_ENABLE           Enable beep for no recognition mapping
  2803.  
  2804.                                         PPMSV_MINGESTUREPOINTS           Minimum number of gesture points
  2805.                                         PPMSV_RECOPTRTIMER               Recognition pointer change time
  2806.                                         PPMSV_GESTURE_CANCEL_TIMEOUT     Cancel gesture timeout value
  2807.                                         PPMSV_GESTURE_TIMEOUT            Inter-stroke gesture timeout
  2808.                                         PPMSV_STANDARDIZED_RESOLUTION    Standardized resolution (.001")
  2809.  
  2810.                                         PPMSV_CHARACTER_BOX_DX           Character box cell width and height for
  2811.                                         PPMSV_CHARACTER_BOX_DY           the handwriting pop-up window
  2812.                                                                          Character box dx and dy are
  2813.                                                                          read-only variables
  2814.  
  2815.           value (LONG) - return 
  2816.                     Pen for OS/2 system value. 
  2817.  
  2818.  Returns 
  2819.  
  2820.           Return codes indicating success or type of failure: 
  2821.  
  2822.           WRTERR_INVALID_PARM           Invalid parameter. 
  2823.  
  2824.           Other                         System value. 
  2825.  
  2826.  Remarks 
  2827.  
  2828.           The valueid must be one of the PPMSV_* constants.  If valueid is not 
  2829.           valid, the value returned is WRTERR_INVALID_PARM. 
  2830.  
  2831.           DeskTop is for future expansion.  For the current version of the Pen 
  2832.           for OS/2 program, it must be HWND_DESKTOP. 
  2833.  
  2834.  
  2835. ΓòÉΓòÉΓòÉ 14.2. WrtSetSysValue ΓòÉΓòÉΓòÉ
  2836.  
  2837.  Syntax   rc = WrtSetSysValue (HWND deskTop, ULONG valueid, LONG value); 
  2838.  
  2839.  Purpose 
  2840.  
  2841.           This function sets the Pen for OS/2 system value in memory. 
  2842.  
  2843.  Parameters 
  2844.  
  2845.           deskTop (HWND) - input 
  2846.                     The window handle of the PM deskTop. 
  2847.  
  2848.           valueid (ULONG) - input 
  2849.                     Pen for OS/2 system value identity.  See PPMSV_* values. 
  2850.  
  2851.           value (LONG) - input 
  2852.                     Pen for OS/2 system value. 
  2853.  
  2854.           rc (APIRET) - return 
  2855.  
  2856.  Returns 
  2857.  
  2858.           Return codes indicating success or type of failure: 
  2859.  
  2860.           WRT_NO_ERROR                       Successful. 
  2861.  
  2862.           WRTERR_INVALID_HWND                deskTop is invalid. 
  2863.  
  2864.           WRTERR_INVALID_ID                  The valueid is invalid. 
  2865.  
  2866.           WRTERR_INVALID_PARM                Invalid parameter. 
  2867.  
  2868.           WRTERR_NOT_ACTIVE                  Pen for OS/2 subsystem is not 
  2869.                                              active. 
  2870.  
  2871.           WRTERR_PARM_OUT_OF_RANGE           Parameter out of range. 
  2872.  
  2873.  Remarks 
  2874.  
  2875.           The valueid must be one of the PPMSV_* constants.  If valueid is not 
  2876.           valid, the value returned is WRTERR_INVALID_PARM. 
  2877.  
  2878.           DeskTop is for future expansion.  For the current version of the Pen 
  2879.           for OS/2 program, it must be HWND_DESKTOP. 
  2880.  
  2881.  
  2882. ΓòÉΓòÉΓòÉ 14.3. WrtWriteSysValue ΓòÉΓòÉΓòÉ
  2883.  
  2884.  Syntax   rc = WrtWriteSysValue (HWND deskTop, ULONG valueid); 
  2885.  
  2886.  Purpose 
  2887.  
  2888.           This function writes the Pen for OS/2 system value from memory to the 
  2889.           Pen for OS/2 profile. 
  2890.  
  2891.  Parameters 
  2892.  
  2893.           deskTop (HWND) - input 
  2894.                     The window handle of the PM deskTop. 
  2895.  
  2896.           valueid (ULONG) - input 
  2897.                     Pen for OS/2 system value identity.  See PPMSV_* values. 
  2898.  
  2899.           rc (APIRET) - return 
  2900.  
  2901.  Returns 
  2902.  
  2903.           Return codes indicating success or type of failure: 
  2904.  
  2905.           WRT_NO_ERROR                       Successful. 
  2906.  
  2907.           WRTERR_INVALID_HWND                deskTop is invalid. 
  2908.  
  2909.           WRTERR_INVALID_ID                  Invalid valueid for profile. 
  2910.  
  2911.           WRTERR_INVALID_PARM                Invalid parameter. 
  2912.  
  2913.           WRTERR_WRITE_FAILED                Error return from 
  2914.                                              WinWriteProfileString. 
  2915.  
  2916.           WRTERR_NOT_ACTIVE                  Pen for OS/2 subsystem is not 
  2917.                                              active. 
  2918.  
  2919.  Remarks 
  2920.  
  2921.           The valueid must be one of the PPMSV_* constants.  If valueid is not 
  2922.           valid, the value returned is WRTERR_INVALID_PARM. 
  2923.  
  2924.           DeskTop is for future expansion.  For the current version of the Pen 
  2925.           for OS/2 program, it must be HWND_DESKTOP. 
  2926.  
  2927.           WrtWriteSysValue writes the desired Pen for OS/2 system value from 
  2928.           memory to the Pen for OS/2 profile. 
  2929.  
  2930.  
  2931. ΓòÉΓòÉΓòÉ 14.4. WrtReadSysValue ΓòÉΓòÉΓòÉ
  2932.  
  2933.  Syntax   rc = WrtReadSysValue (HWND deskTop, ULONG valueid); 
  2934.  
  2935.  Purpose 
  2936.  
  2937.           This function reads the Pen for OS/2 system value for the Pen for 
  2938.           OS/2 profile and sets the value in memory. 
  2939.  
  2940.  Parameters 
  2941.  
  2942.           deskTop (HWND) - input 
  2943.                     The window handle of the PM deskTop. 
  2944.  
  2945.           valueid (ULONG) - input 
  2946.                     Pen for OS/2 system value identity.  See PPMSV_* values. 
  2947.  
  2948.           rc (APIRET) - return 
  2949.  
  2950.  Returns 
  2951.  
  2952.           Return codes indicating success or type of failure: 
  2953.  
  2954.           WRT_NO_ERROR                       Successful. 
  2955.  
  2956.           WRTERR_INVALID_HWND                deskTop is invalid. 
  2957.  
  2958.           WRTERR_INVALID_ID                  Invalid valueid for profile. 
  2959.  
  2960.           WRTERR_INVALID_PARM                Invalid parameter. 
  2961.  
  2962.           WRTERR_NOT_ACTIVE                  Pen for OS/2 subsystem is not 
  2963.                                              active. 
  2964.  
  2965.  Remarks 
  2966.  
  2967.           The valueid must be one of the PPMSV_* constants.  If valueid is not 
  2968.           valid, the value returned is WRTERR_INVALID_PARM. 
  2969.  
  2970.           DeskTop is for future expansion.  For the current version of the Pen 
  2971.           for OS/2 system extension, it must be HWND_DESKTOP. 
  2972.  
  2973.           WrtReadSysValue reads the desired Pen for OS/2 system value from the 
  2974.           Pen for OS/2 profile and sets it in memory. Pen for OS/2 system 
  2975.           values are not written to the Pen for OS/2 profile unless they have 
  2976.           been changed through WrtWriteSysValue. When reading a value that has 
  2977.           not been changed, a WRT_NO_ERROR return code will be returned, even 
  2978.           though there was no entry for it in the Pen for OS/2 profile. 
  2979.  
  2980.  
  2981. ΓòÉΓòÉΓòÉ 14.5. WrtWaitActive ΓòÉΓòÉΓòÉ
  2982.  
  2983.  Syntax   rc = WrtWaitActive (ULONG timeout); 
  2984.  
  2985.  Purpose 
  2986.  
  2987.           This function causes applications to wait until the pen subsystem has 
  2988.           completed initialization. It is provided to prevent an application 
  2989.           from making pen subsystem calls before the subsystem is ready to 
  2990.           process them. 
  2991.  
  2992.  Parameters 
  2993.  
  2994.           timeout (ULONG) - input 
  2995.                     The number of milliseconds to wait for the pen subsystem to 
  2996.                     become active.  A value of SEM_INDEFINITE_WAIT or 
  2997.                     SEM_IMMEDIATE_RETURN can also be specified. 
  2998.  
  2999.           rc (APIRET) - return 
  3000.  
  3001.  Returns 
  3002.  
  3003.           Return codes indicating success or type of failure: 
  3004.  
  3005.           WRT_NO_ERROR                       Successful. 
  3006.  
  3007.           WRTERR_INVALID_PARM                Invalid parameter. 
  3008.  
  3009.           WRTERR_PEN_NOT_STARTING            The pen subsystem is not being 
  3010.                                              started. 
  3011.  
  3012.           WRTERR_WAIT_TIMEOUT                Pen subsystem did not complete 
  3013.                                              initialization. 
  3014.  
  3015.  Remarks 
  3016.  
  3017.           Typically, this function would be called during WM_CREATE message 
  3018.           processing.  If a faulty return code is returned and the application 
  3019.           is reliant upon the pen subsystem, the window procedure would display 
  3020.           an error message box to the user and post a WM_QUIT to itself to 
  3021.           terminate the application. 
  3022.  
  3023.  
  3024. ΓòÉΓòÉΓòÉ 14.6. WrtQueryStrokeData ΓòÉΓòÉΓòÉ
  3025.  
  3026.  Syntax   rc = WrtQueryStrokeData (PBYTE pStrokeBuf, PULONG pBufLen, 
  3027.  
  3028.                             HWND hwnd, ULONG flConvopt, ULONG ulXOutput,
  3029.                             ULONG ulYOutput, ULONG flAuxData);
  3030.  
  3031.  Purpose 
  3032.  
  3033.           This function is used to retrieve the current stroke buffer. 
  3034.  
  3035.  Parameters 
  3036.  
  3037.           pStrokeBuf (PBYTE) - output 
  3038.                     Address of the buffer in which the current stroke data is 
  3039.                     copied.  If pBufLen is nonzero, pStrokeBuf must be a valid 
  3040.                     pointer. 
  3041.  
  3042.           pBufLen (PULONG) - input/output 
  3043.                     Size of the buffer specified by the pStrokeBuf parameter. 
  3044.                     Overwritten with the number of bytes copied into the 
  3045.                     buffer. If the buffer size is insufficient, no stroke data 
  3046.                     is returned. If the ULONG pointed to by this parameter 
  3047.                     equals 0, the amount of storage required to buffer the 
  3048.                     stroke data is calculated and returned to the application 
  3049.                     in this field. 
  3050.  
  3051.           hwnd (HWND) - input 
  3052.                     Handle of window for relative coordinates. 
  3053.  
  3054.              NULL      Coordinates are relative to DESKTOP window origin. 
  3055.  
  3056.              Other     Coordinates are made relative to specified window. 
  3057.  
  3058.           flConvopt (ULONG) - input 
  3059.                     Conversion option for the X/Y coordinate array. 
  3060.  
  3061.              QSD_NO_CNV                    No conversion from stroke device. 
  3062.  
  3063.              QSD_SCALE                     Return in screen or specified 
  3064.                                            resolution. 
  3065.  
  3066.              QSD_STANDARDIZED_RES          Return in standardized resolution. 
  3067.  
  3068.              QSD_RESOLUTION                If QSD_SCALE is specified, ulXOutput 
  3069.                                            and ulYOutput are specified as X- 
  3070.                                            and Y-axis resolution expressed in 
  3071.                                            dots per inch.  When QSD_RESOLUTION 
  3072.                                            is not set, ulXOutput and ulYOutput 
  3073.                                            are specified as X- and Y-axis 
  3074.                                            extents. 
  3075.  
  3076.           ulXOutput (ULONG) - input 
  3077.                     This parameter is only valid if QSD_SCALE was set in the 
  3078.                     flConvopt parameter. If QSD_RESOLUTION option is set, this 
  3079.                     value is the X-axis resolution to which to scale the X 
  3080.                     values in the POINTL structure array. If QSD_RESOLUTION 
  3081.                     option is not set, this value is the maximum X extent to 
  3082.                     which scale the X coordinates. If this value is NULL, the 
  3083.                     coordinate array will be converted to display resolution. 
  3084.  
  3085.              NULL      Coordinates are scaled to screen resolution. 
  3086.  
  3087.              Other     Coordinates are scaled to the specified resolution. 
  3088.  
  3089.           ulYOutput (ULONG) - input 
  3090.                     This parameter is only valid if QSD_SCALE was set in the 
  3091.                     flConvopt parameter. If QSD_RESOLUTION option is set, this 
  3092.                     value is the X-axis resolution to which to scale the X 
  3093.                     values in the POINTL structure array. If QSD_RESOLUTION 
  3094.                     option is not set, this value is the maximum X extent to 
  3095.                     which scale the X coordinates. If this value is NULL, the 
  3096.                     coordinate array will be converted to display resolution. 
  3097.  
  3098.              NULL      Coordinates are scaled to screen resolution. 
  3099.  
  3100.              Other     Coordinates are scaled to the specified resolution. 
  3101.  
  3102.           flAuxData (ULONG) - input 
  3103.                     Auxiliary data fields to be retrieved. A value of 0 will 
  3104.                     result in no auxiliary data being returned. 
  3105.  
  3106.                     One or more of the following flags may be specified: 
  3107.  
  3108.              ADF_TIMESTAMP       Point time stamp. 
  3109.  
  3110.              ADF_FLAGS           Point flags. 
  3111.  
  3112.              ADF_USER            For program use. 
  3113.  
  3114.              ADF_SCREENZ         Display Z-axis value. 
  3115.  
  3116.              ADF_DEVZ            Device Z-axis value. 
  3117.  
  3118.              ADF_ANGLE           Device angle. 
  3119.  
  3120.              ADF_ROTATION        Device rotation. 
  3121.  
  3122.              ADF_BUTTON          Button status. 
  3123.  
  3124.              ADF_OEM             Original equipment manufacturer specific data. 
  3125.  
  3126.              ADF_ALL             All fields. 
  3127.  
  3128.           rc (APIRET) - return 
  3129.  
  3130.  Returns 
  3131.  
  3132.           Return codes indicating success or type of failure: 
  3133.  
  3134.           WRT_NO_ERROR                       Successful. 
  3135.  
  3136.           WRTERR_INVALID_HWND                Invalid window handle specified. 
  3137.  
  3138.           WRTERR_INVALID_OPTION              Invalid option bits specified. 
  3139.  
  3140.           WRTERR_INVALID_PARM                Invalid parameter. 
  3141.  
  3142.           WRTERR_INVALID_POINTER             Invalid buffer pointer. 
  3143.  
  3144.           WRTERR_STROKE_INVALID              No stroke available or invalid. 
  3145.  
  3146.           WRTERR_BUFFER_TOO_SMALL            Too small.  No data copied. 
  3147.  
  3148.           WRTERR_STRUCT_NOT_INIT             cbStructSize was not initialized. 
  3149.  
  3150.           WRTERR_NOT_ACTIVE                  Pen for OS/2 subsystem is not 
  3151.                                              active. 
  3152.  
  3153.  Remarks 
  3154.  
  3155.           WRTERR_STROKE_INVALID is returned if no stroke is available. Strokes 
  3156.           are only available for retrieval during WM_LIFTOFF or WM_STROKE 
  3157.           message processing. 
  3158.  
  3159.           The X/Y points are passed back as an array of POINTLs structures. 
  3160.  
  3161.           Some pointing devices have a digitizer resolution equal to the 
  3162.           display resolution (for example, a mouse). 
  3163.  
  3164.           The cbStructSize field of the StrokeData structure must be 
  3165.           initialized before calling WrtQueryStrokeData to actually retrieve 
  3166.           the stroke data. 
  3167.  
  3168.                       /*  Query amount of storage needed to buffer stroke data */
  3169.                       buflen = 0;
  3170.                       option = ADF_TIMESTAMP | ADF_FLAGS;
  3171.                       rc = WrtQueryStrokeData(NULL, &buflen, hwnd, QSD_SCALE, 0,0, option);
  3172.                       if (!rc)
  3173.                         {
  3174.                         /* Allocate memory */
  3175.                         DosAllocMem((VOID *)pStrokeData, buflen, PAG_COMMIT | PAG_READ | PAG_WRITE);
  3176.                         /* Initialize structure size */
  3177.                         pStrokeData->cbStructSize = sizeof (STROKEDATA);
  3178.                         rc = WrtQueryStrokeData(pStrokeData, &buflen, hwnd, QSD_SCALE, 0,0, option);
  3179.                         }
  3180.  
  3181.           If QSD_NORMALIZED_RES is specified, the ulXOutput and ulYOutput 
  3182.           parameters are ignored and the coordinates are scaled up to a 
  3183.           standardized resolution used by the installed handwriting and gesture 
  3184.           recognition processors.  Typically, this is 1000 points per inch 
  3185.           resolution. 
  3186.  
  3187.           Some auxiliary point data might not be supported by the configured 
  3188.           hardware.  Applications might query device capabilities to determine 
  3189.           which auxiliary data is supported by the devices.  When unsupported 
  3190.           auxiliary data is retrieved, the value will be zero.  No error is 
  3191.           returned informing the application of the lack of hardware support. 
  3192.  
  3193.  Examples 
  3194.  
  3195.          /*   Example   -  Handling auxiliary stroke data             */
  3196.          /*                                                           */
  3197.          /*   Get stroke data at display resolution and have the      */
  3198.          /*   points mapped to the client window to ink and           */
  3199.          /*   get point time stamps and flags.  The time stamps and   */
  3200.          /*   flags are moved into separate buffers for post          */
  3201.          /*   processing.                                             */
  3202.  
  3203.        ULONG              i;
  3204.        APIRET             apirc;
  3205.        ULONG              sdata_size;         /* Size of stroke data        */
  3206.        PSTROKEDATA        strokep;            /* Ptr to stroke data         */
  3207.        PAUXDATAINFO       pdi;                /* Ptr to aux data description*/
  3208.        PAUXSTROKEDATA     psd;                /* Ptr to aux stroke data     */
  3209.        ULONG              ts_array[1000];     /* Buffer to hold time stamps */
  3210.        USHORT             fl_array[1000];     /* Buffer to hold flags       */
  3211.        ULONG              fieldcnt, ts_ent, fl_ent;  /* workers             */
  3212.        PULONG             pul;
  3213.        PUSHORT            pus;
  3214.  
  3215.        case WM_LIFTOFF:
  3216.  
  3217.          sdata_size = 0;
  3218.          apirc = WrtQueryStrokeData(NULL,
  3219.                                     &sdata_size,            /* stroke size  */
  3220.                                     hwnd,                   /* hwnd         */
  3221.                                     QSD_SCALE,              /* flConvt      */
  3222.                                     0,                      /* ulXExtent    */
  3223.                                     0,                      /* ulYExtent    */
  3224.                                     ADF_TIMESTAMP |         /* flAuxData    */
  3225.                                     ADF_FLAGS     |
  3226.                                     ADF_USER);
  3227.  
  3228.          if (apirc) return (MRESULT) LO_STROKE_PROCESSED; /* Quit if error  */
  3229.                                                           /*   occurred     */
  3230.       DosAllocMem((VOID *) &strokep, sdata_size,
  3231.                   PAG_COMMIT | PAG_READ | PAG_WRITE);
  3232.          strokep->cbStructSize = sizeof (STROKEDATA);
  3233.          apirc = WrtQueryStrokeData(strokep,
  3234.                                     &sdata_size,            /* stroke size  */
  3235.                                     hwnd,                   /* hwnd         */
  3236.                                     QSD_SCALE,              /* flConvt      */
  3237.                                     0,                      /* ulXExtent    */
  3238.                                     0,                      /* ulYExtent    */
  3239.                                     ADF_TIMESTAMP |         /* flAuxData    */
  3240.                                     ADF_FLAGS     |
  3241.                                     ADF_USER);
  3242.          if (apirc) {
  3243.            DosFreeMem(strokep);                  /* Return memory           */
  3244.            return (MRESULT) LO_STROKE_PROCESSED; /* Quit if error occurred  */
  3245.          }
  3246.  
  3247.          /* Establish pointer to the time stamps */
  3248.  
  3249.          pdi = strokep->pAuxInfo;               /* Address desc block       */
  3250.          psd = strokep->pAuxData;               /* Set aux data pointer     */
  3251.  
  3252.       /* Loop through each data item to find the entry for time stamps and flags */
  3253.          for (i=0 ; i < pdi->ulNumElements ; i++ )
  3254.            {
  3255.            if (pdi->addAuxDesc[i].id == ADT_TIMESTAMP)
  3256.              ts_ent = i;
  3257.  
  3258.            if (pdi->addAuxDesc[i].id == ADT_FLAGS)
  3259.              fl_ent = i;
  3260.  
  3261.            }
  3262.           /* Copy time stamps and flags to separate arrays  */
  3263.  
  3264.           for (i=0, k=0 ; i < strokep->ulNumPoints ; i++, k = i * pdi->ulAuxSize)
  3265.             {
  3266.             pul = (PULONG) &psd->bAuxData[k][pdi->addAuxDesc[ts_ent].offset];
  3267.             ts_array[i] = *pul;
  3268.  
  3269.             pus = (PUSHORT) &psd->bAuxData[k][pdi->addAuxDesc[fl_ent].offset];
  3270.             fl_array[i] = *pus;
  3271.             }
  3272.  
  3273.          return (MRESULT) LO_STROKE_PROCESSED;
  3274.  
  3275.  
  3276. ΓòÉΓòÉΓòÉ 14.7. WrtMapPointLong ΓòÉΓòÉΓòÉ
  3277.  
  3278.  Syntax   rc = WrtMapPointLong (HWND hwnd, PPOINTL pXY, ULONG flParms, 
  3279.  
  3280.                             ULONG ulXInput, ULONG ulYInput, ULONG ulXOutput,
  3281.                             ULONG ulYOutput, ULONG ulCount);
  3282.  
  3283.  Purpose 
  3284.  
  3285.           This function is used to scale an array of coordinates from a given 
  3286.           resolution to a specified resolution with an option of mapping the 
  3287.           points to a window. 
  3288.  
  3289.  Parameters 
  3290.  
  3291.           hwnd (HWND) - input 
  3292.                     Handle of window for relative coordinates. 
  3293.  
  3294.              NULL      Coordinates are relative to DESKTOP window origin. 
  3295.  
  3296.              Other     Coordinates are made relative to specified window. 
  3297.  
  3298.           pXY (PPOINTL) - input/output 
  3299.                     Address of POINTL structure containing the X/Y coordinate 
  3300.                     to map. 
  3301.  
  3302.           flParms (ULONG) - input 
  3303.                     Indicates whether the ulXInput, ulYInput, ulXOutput, and 
  3304.                     ulYOutput parameters are specified as resolution or as 
  3305.                     maximum extents. 
  3306.  
  3307.                     Contains none or some of the following flags: 
  3308.  
  3309.              MP_RESOLUTION       Parameters are specified as X-and Y-axis 
  3310.                                  resolution expressed in dots per inch. If 
  3311.                                  MP_RESOLUTION is not set, the parameters are 
  3312.                                  expressed as maximum extents. 
  3313.  
  3314.              MP_NO_SCALE         Do not scale coordinates. 
  3315.  
  3316.              MP_SCALE            (Default) Scale points. 
  3317.  
  3318.           ulXInput (ULONG) - input 
  3319.                     Extent or resolution of the X-axis for the input 
  3320.                     coordinates. If MP_RESOLUTION is not set, this value is 
  3321.                     X-axis extent of the input X coordinates.  If MP_RESOLUTION 
  3322.                     is set, this value is the resolution of the X-axis in dots 
  3323.                     per inch.  This parameter must be nonzero. 
  3324.  
  3325.           ulYInput (ULONG) - input 
  3326.                     Extent or resolution of the Y-axis for the input 
  3327.                     coordinates. If MP_RESOLUTION is not set, this value is the 
  3328.                     Y-axis extent of the input Y coordinates.  If MP_RESOLUTION 
  3329.                     is set, this value is the resolution of the Y-axis in dots 
  3330.                     per inch.  This parameter must be nonzero. 
  3331.  
  3332.           ulXOutput (ULONG) - input 
  3333.                     Extent or resolution of the X-axis for the output 
  3334.                     coordinates.  If MP_RESOLUTION is not set, this value is 
  3335.                     the X-axis extent to which to scale the X coordinates in 
  3336.                     the POINTL structure array. If MP_RESOLUTION is set, this 
  3337.                     value is the X-axis resolution in dots per inch.  This 
  3338.                     parameter is ignored if MP_NO_SCALE is specified. 
  3339.  
  3340.              0         Coordinates are scaled to screen resolution. 
  3341.  
  3342.              Other     Coordinates are scaled to the specified resolution. 
  3343.  
  3344.           ulYOutput (ULONG) - input 
  3345.                     Extent or resolution of the Y-axis for the output 
  3346.                     coordinates.  If MP_RESOLUTION is not set, this value is 
  3347.                     the Y-axis extent to which to scale the X coordinates in 
  3348.                     the POINTL structure array. If MP_RESOLUTION is set, this 
  3349.                     value is the Y-axis resolution in dots per inch.  This 
  3350.                     parameter is ignored if MP_NO_SCALE is specified. 
  3351.  
  3352.              0         Coordinates are scaled to screen resolution. 
  3353.  
  3354.              Other     Coordinates are scaled to the specified resolution. 
  3355.  
  3356.           ulCount (ULONG) - input 
  3357.                     The number of POINTLs in the array pointed to by pXY. Must 
  3358.                     be nonzero. 
  3359.  
  3360.           rc (APIRET) - return 
  3361.  
  3362.  Returns 
  3363.  
  3364.           Return codes indicating success or type of failure: 
  3365.  
  3366.           WRT_NO_ERROR                     Successful. 
  3367.  
  3368.           WRTERR_INVALID_INPUT             Invalid input resolution. 
  3369.  
  3370.           WRTERR_INVALID_HWND              Invalid window handle specified. 
  3371.  
  3372.           WRTERR_NOT_ACTIVE                Pen for OS/2 subsystem is not 
  3373.                                            active. 
  3374.  
  3375.           WRTERR_INVALID_PARM              Invalid parameter. 
  3376.  
  3377.           WRTERR_INVALID_POINTER           Invalid POINTL pointer. 
  3378.  
  3379.           WRTERR_INVALID_COUNT             Invalid POINTL count. 
  3380.  
  3381.           WRTERR_INVALID_OPTION            No hwnd and no scaling specified. 
  3382.  
  3383.  Remarks 
  3384.  
  3385.           When scaling coordinates, it always is more accurate to specify 
  3386.           extents than resolution. 
  3387.  
  3388.           The most common use of this function is to convert coordinates from 
  3389.           either standardized or digitizer resolution to screen resolution to 
  3390.           facilitate inking the stroke to the display. Both the resolution and 
  3391.           the extents of a stroke can be found in the stroke data structure 
  3392.           fields ulResolution, ulXExtent, and ulYExtent. When converting to 
  3393.           display resolution, specify ulXOutput and ulYOutput as NULL. 
  3394.  
  3395.           An error will be returned if no scaling (MP_NO_SCALE) is specified 
  3396.           and no hwnd is provided to which to map the input coordinates. 
  3397.  
  3398.           This function might be called either on a point-by-point basis to 
  3399.           rescale each point or, at the lift-off point, to rescale all the 
  3400.           points in the stroke. To optimize execution for calling the function 
  3401.           as each point is received, no exception handling is performed if the 
  3402.           count of coordinates is equal to 1.  Programs will therefore take 
  3403.           Trap D addressing exceptions if the POINTL array address is a 
  3404.           nonzero, invalid address. 
  3405.  
  3406.           For any given pointing device, WrtQueryLocatorCaps will provide: 
  3407.  
  3408.           o Digitizer resolution 
  3409.  
  3410.           o Digitizer X/Y extents 
  3411.  
  3412.           o Standardized resolution X/Y extents 
  3413.  
  3414.           The system standardized resolution can be determined by querying 
  3415.           system value PPMSV_STANDARDIZED_RESOLUTION through the 
  3416.           WrtQuerySysValue function. Typically, standardized resolution is 1000 
  3417.           points per inch resolution. 
  3418.  
  3419.           For the display, WrtQuerySystemCaps will provide: 
  3420.  
  3421.           o Display resolution 
  3422.  
  3423.           o Display X/Y extents 
  3424.  
  3425.           Due to rounding errors, scaling coordinates back and forth between 
  3426.           high and low resolution will produce a set of coordinates slightly 
  3427.           different from the original input.  Generally, the coordinates will 
  3428.           be off by a value of 1. 
  3429.  
  3430.           Any time high resolution coordinates are scaled down to a lower 
  3431.           resolution, information is lost.  If accuracy is important, maintain 
  3432.           high resolution and display-resolution stroke buffers instead of 
  3433.           scaling the coordinates to display resolution and then rescaling back 
  3434.           to high resolution. 
  3435.  
  3436.  
  3437.                       /*  Query amount of storage needed to buffer stroke data */
  3438.                       buflen = 0;
  3439.                       option = ADF_TIMESTAMP | ADF_FLAGS;
  3440.                       rc = WrtQueryStrokeData(NULL, &buflen, NULL, 0, 0, 0, option);
  3441.                       if (!rc)
  3442.                         {
  3443.                         /* Allocate memory */
  3444.                         DosAllocMem((VOID *)pStrokeData, buflen, PAG_COMMIT | PAG_READ | PAG_WRITE);
  3445.                         /* Initialize structure size */
  3446.                         pStrokeData->cbStructSize = sizeof (STROKEDATA);
  3447.                         /* Retrieve coordinates at digitizer resolution */
  3448.                         rc = WrtQueryStrokeData(pStrokeData, &buflen, NULL, 0, 0, 0, option);
  3449.  
  3450.                         /* Scale coordinates to display resolution and map */
  3451.                         /*   them to the client window.                    */
  3452.                         WrtMapPointLong(hwnd,
  3453.                                         pStrokeData->pXY,
  3454.                                         MP_SCALE,
  3455.                                         pStrokeData->ulYExtents,
  3456.                                         pStrokeData->ulYExtents,
  3457.                                         0,
  3458.                                         0,
  3459.                                         pStrokeData->ulNumPoints);
  3460.                         }
  3461.  
  3462.  
  3463. ΓòÉΓòÉΓòÉ 14.8. WrtQueryPointAuxData ΓòÉΓòÉΓòÉ
  3464.  
  3465.  Syntax   rc = WrtQueryPointAuxData (PAUXPOINTDATA papdExtra); 
  3466.  
  3467.  Purpose 
  3468.  
  3469.           This function returns the auxiliary data associated with current 
  3470.           point. A call to WrtQueryLocatorCaps will determine which fields in 
  3471.           the structure are supported by the device and are valid. 
  3472.  
  3473.  Parameters 
  3474.  
  3475.           papdExtra (PAUXPOINTDATA) - output 
  3476.                     Pointer to an auxiliary point data structure. 
  3477.  
  3478.           rc (APIRET) - return 
  3479.  
  3480.  Returns 
  3481.  
  3482.           Return codes indicating success or type of failure: 
  3483.  
  3484.           WRT_NO_ERROR                     Successful. 
  3485.  
  3486.           WRTERR_NOT_ACTIVE                Pen for OS/2 subsystem is not 
  3487.                                            active. 
  3488.  
  3489.           WRTERR_INVALID_PARM              Invalid parameter. 
  3490.  
  3491.           WRTERR_INVALID_POINTER           Invalid structure pointer. 
  3492.  
  3493.           WRTERR_STRUCT_NOT_INIT           cbStructSize field not initialized. 
  3494.  
  3495.  Remarks 
  3496.  
  3497.           The structure returned is the device-specific data associated with 
  3498.           the current point and, as such, this routine would only be called 
  3499.           during WM_MOUSEMOVE or WM_SENSOR_MOVE processing. Calling this 
  3500.           function when processing other messages will retrieve the auxiliary 
  3501.           data from the last WM_MOUSEMOVE or WM_SENSOR_MOVE received. Before 
  3502.           querying auxiliary point data, the cbStructSize field must be 
  3503.           initialized. 
  3504.  
  3505.           Because this function may be called up to 200 times per second, no 
  3506.           exception handling is performed to keep execution time to a minimum. 
  3507.           Therefore a nonzero, invalid address will result in a Trap D 
  3508.           addressing exception. 
  3509.  
  3510.  
  3511. ΓòÉΓòÉΓòÉ 14.9. WrtQueryEventData ΓòÉΓòÉΓòÉ
  3512.  
  3513.  Syntax   rc = WrtQueryEventData (PWRTEVENTDATA pedInfo); 
  3514.  
  3515.  Purpose 
  3516.  
  3517.           This function returns the event data associated with current point. A 
  3518.           call to WrtQueryLocatorCaps will determine which fields in the 
  3519.           structure are supported by the device and are valid. 
  3520.  
  3521.  Parameters 
  3522.  
  3523.           pedInfo (PWRTEVENTDATA) - output 
  3524.                     Pointer to an event data structure. 
  3525.  
  3526.           rc (APIRET) - return 
  3527.  
  3528.  Returns 
  3529.  
  3530.           Return codes indicating success or type of failure: 
  3531.  
  3532.           WRT_NO_ERROR                          Successful. 
  3533.  
  3534.           WRTERR_NOT_ACTIVE                     Pen for OS/2 subsystem is not 
  3535.                                                 active. 
  3536.  
  3537.           WRTERR_INVALID_PARM                   Invalid parameter. 
  3538.  
  3539.           WRTERR_INVALID_POINTER                Invalid structure pointer. 
  3540.  
  3541.           WRTERR_STRUCT_NOT_INIT                cbStructSize field not 
  3542.                                                 initialized. 
  3543.  
  3544.           WRTERR_INVALID_MOUSE_EVENT            Mouse event not generated by 
  3545.                                                 pointing device. 
  3546.  
  3547.  Remarks 
  3548.  
  3549.           The structure returned contains data pertinent to the current mouse 
  3550.           event.  This function would be called only during the processing of a 
  3551.           PM mouse message (such as messages between WM_MOUSEFIRST and 
  3552.           WM_MOUSELAST). After returning from a mouse message, the event data 
  3553.           is invalid. 
  3554.  
  3555.           Before querying event data, the cbStructSize field must be 
  3556.           initialized. 
  3557.  
  3558.           Mouse messages that are generated by PM will not have associated 
  3559.           event data because the message was not generated by the pointing 
  3560.           device.  A WRTERR_INVALID_MOUSE_EVENT error is returned in this case. 
  3561.  
  3562.           Because this function may be called up to 200 times per second, no 
  3563.           exception handling is performed to keep execution time to a minimum. 
  3564.           Therefore a nonzero, invalid address will result in a Trap D 
  3565.           addressing exception. 
  3566.  
  3567.  
  3568. ΓòÉΓòÉΓòÉ 14.10. WrtSetStrictEmulation ΓòÉΓòÉΓòÉ
  3569.  
  3570.  Syntax   rc = WrtSetStrictEmulation (HWND hwnd, ULONG option); 
  3571.  
  3572.  Purpose 
  3573.  
  3574.           This function sets the calling application in a mouse emulation mode. 
  3575.  
  3576.  Parameters 
  3577.  
  3578.           hwnd (HWND) - input 
  3579.                     Handle of the frame window. 
  3580.  
  3581.           option (ULONG) - input 
  3582.                     Contains one of the following values: 
  3583.  
  3584.              SSE_RESET           Reset strict mouse emulation. 
  3585.  
  3586.              SSE_SET             Set strict mouse emulation. 
  3587.  
  3588.           rc (APIRET) - return 
  3589.  
  3590.  Returns 
  3591.  
  3592.           Return codes indicating success or type of failure: 
  3593.  
  3594.           WRT_NO_ERROR                  Successful. 
  3595.  
  3596.           WRTERR_INVALID_HWND           Invalid window handle. 
  3597.  
  3598.           WRTERR_INVALID_OPTION         Invalid option. 
  3599.  
  3600.           WRTERR_INVALID_PARM           Invalid parameter. 
  3601.  
  3602.  Remarks 
  3603.  
  3604.           This API effectively removes all Pen for OS/2 system extension 
  3605.           functionality and only mouse emulation is performed.  This function 
  3606.           is applied to all windows on a program or object (or both) basis. 
  3607.  
  3608.           The intended purpose of this interface is to provide a very fast 
  3609.           interface with minimum delay.  The application trades off unneeded 
  3610.           Pen for OS/2 functionality, such as gestures, for quick response 
  3611.           time.  An example application would be a Pop-Up Keyboard Tool that 
  3612.           wants to maximize keystrokes per second processing. 
  3613.  
  3614.  
  3615. ΓòÉΓòÉΓòÉ 14.11. WrtControlDisplayBacklight ΓòÉΓòÉΓòÉ
  3616.  
  3617.  Syntax   rc = WrtControlDisplayBacklight (ULONG option, ULONG displayID); 
  3618.  
  3619.  Purpose 
  3620.  
  3621.           This function is called by an application to control the state of the 
  3622.           display backlight. 
  3623.  
  3624.  Parameters 
  3625.  
  3626.           option (ULONG) - input 
  3627.                     Controls display backlight. 
  3628.  
  3629.              CDB_LIGHT_ON        Turn backlight on. This option will also 
  3630.                                  restart the blanking timer period if blanking 
  3631.                                  is enabled. 
  3632.  
  3633.              CDB_LIGHT_OFF       Turn backlight off. 
  3634.  
  3635.           displayID (ULONG) - input 
  3636.                     ID of the target display. If 0, the command will be sent to 
  3637.                     all configured displays that support backlight blanking. If 
  3638.                     there are no configured displays, an 
  3639.                     WRTERR_NO_DEVICE_CAPABILITY error is returned. 
  3640.  
  3641.           rc (APIRET) - return 
  3642.  
  3643.  Returns 
  3644.  
  3645.           Return codes indicating success or type of failure: 
  3646.  
  3647.           WRT_NO_ERROR                            Successful. 
  3648.  
  3649.           WRTERR_NOT_ACTIVE                       Pen for OS/2 subsystem is not 
  3650.                                                   active. 
  3651.  
  3652.           WRTERR_INVALID_PARM                     CDB_RESET_TIMER and 
  3653.                                                   CDB_LIGHT_OFF are mutually 
  3654.                                                   exclusive. 
  3655.  
  3656.           WRTERR_INVALID_DISPLAY_ID               Invalid display ID. 
  3657.  
  3658.           WRTERR_NO_DEVICE_CAPABILITY             Device does not support 
  3659.                                                   option. 
  3660.  
  3661.  Remarks 
  3662.  
  3663.           This routine is called by an application to control the state of the 
  3664.           display backlight. 
  3665.  
  3666.           If the CDB_LIGHT_ON option is specified, the backlight will be turned 
  3667.           on if it is off.  If backlight blanking is enabled, the blanking 
  3668.           timer will also be reset. If the CDB_LIGHT_ON option is specified and 
  3669.           the backlight is already on and backlight blanking is disabled, the 
  3670.           command has no effect. 
  3671.  
  3672.           If the CDB_LIGHT_OFF option is specified and the backlight is already 
  3673.           off, the command has no effect. 
  3674.  
  3675.  
  3676. ΓòÉΓòÉΓòÉ 14.12. WrtEnumInputDrivers ΓòÉΓòÉΓòÉ
  3677.  
  3678.  Syntax   rc = WrtEnumInputDrivers (PULONG pulNumDrivers, 
  3679.  
  3680.                             PSTR_32 aDriverNames);
  3681.  
  3682.  Purpose 
  3683.  
  3684.           This function lists all the configured Pen for OS/2 input drivers. 
  3685.  
  3686.  Parameters 
  3687.  
  3688.           pulNumDrivers (PULONG) - input/output 
  3689.                     Maximum number of driver names that can be returned.  If 
  3690.                     the ULONG pointed to by pulNumDrivers is: 
  3691.  
  3692.              Zero      The number of drivers will be calculated and returned in 
  3693.                        the ULONG. aDriverNames will not be updated. 
  3694.  
  3695.              Nonzero   The ULONG is updated to reflect the actual number of 
  3696.                        driver names returned in aDriverNames. 
  3697.  
  3698.           aDRiverNames (PSTR_32) - output 
  3699.                     Array of null-terminated strings, each of which identifies 
  3700.                     an input driver. 
  3701.  
  3702.           rc (APIRET) - return 
  3703.  
  3704.  Returns 
  3705.  
  3706.           Return codes indicating success or type of failure: 
  3707.  
  3708.           WRT_NO_ERROR                       Successful. 
  3709.  
  3710.           WRTERR_NOT_ACTIVE                  Pen for OS/2 subsystem is not 
  3711.                                              active. 
  3712.  
  3713.           WRTERR_MORE_NAMES_AVAIL            More names are available. 
  3714.  
  3715.           WRTERR_INVALID_PARM                Invalid parameter. 
  3716.  
  3717.           WRTERR_INVALID_POINTER             Invalid buffer pointer. 
  3718.  
  3719.  Remarks 
  3720.  
  3721.           On the first call, if the ULONG pointed to by pulNumDrivers is set to 
  3722.           0, the number of drivers will be calculated and returned in the 
  3723.           ULONG. 
  3724.  
  3725.           The output buffer will contain an array of structures in the 
  3726.           following format. 
  3727.  
  3728.                       (example - "ABC Color Tablet\0     WACOM SD-510C\0     MOUSE\0     ")
  3729.  
  3730.  
  3731. ΓòÉΓòÉΓòÉ 14.13. WrtQueryInputDeviceNames ΓòÉΓòÉΓòÉ
  3732.  
  3733.  Syntax   rc = WrtQueryInputDeviceNames (PSZ pszDriverName, 
  3734.  
  3735.                             PULONG pulNumDevices, PSTR_32 aDeviceName,
  3736.                             PULONG aDeviceType, PULONG aDeviceID);
  3737.  
  3738.  Purpose 
  3739.  
  3740.           This function lists all the devices registered by an input driver. 
  3741.  
  3742.  Parameters 
  3743.  
  3744.           pszDriverName (PSZ) - input 
  3745.                     Pointer to a null-terminated string containing the name of 
  3746.                     the input driver. 
  3747.  
  3748.           pulNumDevices (PULONG) - input/output 
  3749.                     Number of device names and descriptions.  If the ULONG 
  3750.                     pointed to by pulNumDevices is: 
  3751.  
  3752.              Zero      The number of names and descriptions supported is 
  3753.                        returned in the ULONG and the arrays parameters are not 
  3754.                        updated. 
  3755.  
  3756.              Nonzero   The ULONG is updated to reflect the number of names and 
  3757.                        descriptions returned and the arrays are updated. 
  3758.  
  3759.           aDeviceName (PSTR_32) - output 
  3760.                     Device name array. 
  3761.  
  3762.           aDeviceType (PULONG) - output 
  3763.                     Device type array. 
  3764.  
  3765.           aDeviceID (PULONG) - output 
  3766.                     Device ID array. 
  3767.  
  3768.           rc (APIRET) - return 
  3769.  
  3770.  Returns 
  3771.  
  3772.           Return codes indicating success or type of failure: 
  3773.  
  3774.           WRT_NO_ERROR                            Successful. 
  3775.  
  3776.           WRTERR_NOT_ACTIVE                       Pen for OS/2 subsystem is not 
  3777.                                                   active. 
  3778.  
  3779.           WRTERR_MORE_NAMES_AVAIL                 More names are available. 
  3780.  
  3781.           WRTERR_INVALID_PARM                     Invalid parameter. 
  3782.  
  3783.           WRTERR_INVALID_POINTER                  Invalid buffer pointer. 
  3784.  
  3785.           WRTERR_INVALID_DRIVER_NAME              Invalid driver name. 
  3786.  
  3787.  Remarks 
  3788.  
  3789.           On the first call, if the ULONG pointed to by pulNumDevices is set to 
  3790.           0, the number of drivers are calculated and returned in the ULONG. 
  3791.  
  3792.           The output buffer will contain an array of structures in the 
  3793.           following format: 
  3794.  
  3795.                     Driver Name  -  "ABC Color Tablet"
  3796.                     Device Name  -  "Pen"        "Touch"        "BezelButton"   "ColorLCD"
  3797.                     Device Type  -  DT_LOCATOR    DT_LOCATOR    DT_BUTTON       DT_DISPLAY
  3798.                     Device ID    -  1             2             1               1
  3799.  
  3800.                     Driver Name  -  "WACOM SD-510C"
  3801.                     Device Name  -  "Pen"        "BarrelButton"
  3802.                     Device Type  -  DT_LOCATOR    DT_BUTTON
  3803.                     Device ID    -  3             2
  3804.  
  3805.                     Driver Name  -  "MOUSE"
  3806.                     Device Name  -  "StockMouse"
  3807.                     Device Type  -  DT_LOCATOR
  3808.                     Device ID    -  4
  3809.  
  3810.  
  3811. ΓòÉΓòÉΓòÉ 14.14. WrtQuerySystemCaps ΓòÉΓòÉΓòÉ
  3812.  
  3813.  Syntax   rc = WrtQuerySystemCaps (PWRTSYSTEMINFO psiInfo); 
  3814.  
  3815.  Purpose 
  3816.  
  3817.           This function returns Pen for OS/2 system capabilities. 
  3818.  
  3819.  Parameters 
  3820.  
  3821.           psiInfo (PWRTSYSTEMINFO) - input/output 
  3822.                     Pointer to WRTSYSTEMINFO structure. 
  3823.  
  3824.           rc (APIRET) - return 
  3825.  
  3826.  Returns 
  3827.  
  3828.           Return codes indicating success or type of failure: 
  3829.  
  3830.           WRT_NO_ERROR                       Successful. 
  3831.  
  3832.           WRTERR_NOT_ACTIVE                  Pen for OS/2 subsystem is not 
  3833.                                              active. 
  3834.  
  3835.           WRTERR_INVALID_BUFFER              Invalid structure pointer. 
  3836.  
  3837.           WRTERR_INVALID_PARM                Invalid parameter. 
  3838.  
  3839.           WRTERR_STRUCT_NOT_INIT             cbStructSize field not 
  3840.                                              initialized. 
  3841.  
  3842.  Remarks 
  3843.  
  3844.           This function returns a structure that provides pertinent information 
  3845.           about devices attached to the system.  Before querying the system 
  3846.           capabilities structure, the cbStructSize field must be initialized. 
  3847.  
  3848.  
  3849. ΓòÉΓòÉΓòÉ 14.15. WrtQueryLocatorCaps ΓòÉΓòÉΓòÉ
  3850.  
  3851.  Syntax   rc = WrtQueryLocatorCaps (PULONG pulLocatorID, 
  3852.  
  3853.                             PWRTLOCATORDEVINFO pldiInfo);
  3854.  
  3855.  Purpose 
  3856.  
  3857.           This function returns device capabilities for locator devices. 
  3858.  
  3859.  Parameters 
  3860.  
  3861.           pulLocatorID (PULONG) - input/output 
  3862.                     If pointing to a value of 0, the number of configured 
  3863.                     locators will be returned.  If pointing to a nonzero value, 
  3864.                     it is the ID of the locator to be queried. 
  3865.  
  3866.           pldiInfo (PWRTLOCATORDEVINFO) - input/output 
  3867.                     Pointer to WRTLOCATORDEVINFO structure.  If pulLocatorID is 
  3868.                     pointing to a nonzero value, pldiInfo must contain a valid 
  3869.                     structure pointer. 
  3870.  
  3871.           rc (APIRET) - return 
  3872.  
  3873.  Returns 
  3874.  
  3875.           Return codes indicating success or type of failure: 
  3876.  
  3877.           WRT_NO_ERROR                          Successful. 
  3878.  
  3879.           WRTERR_NOT_ACTIVE                     Pen for OS/2 system extension 
  3880.                                                 is not active. 
  3881.  
  3882.           WRTERR_INVALID_LOCATOR_ID             Invalid locator ID. 
  3883.  
  3884.           WRTERR_INVALID_PARM                   Invalid parameter. 
  3885.  
  3886.           WRTERR_INVALID_POINTER                Invalid locatorID pointer. 
  3887.  
  3888.           WRTERR_INVALID_BUFFER                 Invalid structure pointer. 
  3889.  
  3890.           WRTERR_STRUCT_NOT_INIT                cbStructSize field not 
  3891.                                                 initialized. 
  3892.  
  3893.  Remarks 
  3894.  
  3895.           This function returns device capabilities for registered locator 
  3896.           devices. 
  3897.  
  3898.           If the function is called with pulLocatorID pointing to a value of 0, 
  3899.           the number of configured locator devices is calculated and returned 
  3900.           in the ULONG.  Locator IDs are numbered 1 to N.  If the value 3 is 
  3901.           returned in the ULONG, the valid locator IDs are 1, 2, and 3. 
  3902.  
  3903.           Before querying the locator capabilities structure, the cbStructSize 
  3904.           field must be initialized. 
  3905.  
  3906.  Examples 
  3907.  
  3908.           In this code example, the application queries up to 5 registered 
  3909.           pointing devices and maintains the configuration data for use at 
  3910.           touchdown, mousemove, and liftoff time.  Having more than 5 
  3911.           registered pointing devices would be highly unusual. 
  3912.  
  3913.  
  3914.                       ULONG          i, ulLocatorID;
  3915.                       APIRET         apirc;
  3916.                       PWRTEVENTDATA  ped;
  3917.  
  3918.                     #define MAX_DEVICES   5
  3919.                       static WRTLOCATORDEVINFO  ldiInfo[MAX_DEVICES];
  3920.  
  3921.  
  3922.  
  3923.                       case WM_CREATE:
  3924.                         /* Query configuration data for up to 5 pointing devices */
  3925.                         /* for use at touch down and lift off                    */
  3926.                         ulLocatorID = 0;
  3927.                         ldiInfo[0].cbStructSize = sizeof (WRTLOCATORDEVINFO);
  3928.                         apirc = WrtQueryLocatorCaps(&ulLocatorID, &ldiInfo[0]);
  3929.  
  3930.                         for (i=1 ; i <= ulLocatorID && i <= MAX_DEVICES ; i++) {
  3931.  
  3932.                            ldiInfo[i-1].cbStructSize = sizeof (WRTLOCATORDEVINFO);
  3933.                            apirc = WrtQueryLocatorCaps(&i, &ldiInfo[i-1]);
  3934.                         }
  3935.                         break;
  3936.  
  3937.  
  3938.                       case WM_LIFTOFF:
  3939.                         ped = (PWRTEVENTDATA) mp2;
  3940.  
  3941.                         if (!(ped->flEventStatus & WRT_STROKE_AVAIL)    ||
  3942.                                                                /* No stroke buffer avail */
  3943.                             !(ped->flEventStatus & WRT_TD_LO_SAME_HWND) || {
  3944.                                                                     /* Not our Stroke    */
  3945.                             ped->ulLocatorID > MAX_DEVICES)         /* Or unknown device */
  3946.                           return (MRESULT) FALSE;                   /* Do not process it */
  3947.                         }
  3948.  
  3949.  
  3950.                         /* Determine type of pointing device */
  3951.                         switch (ldiInfo[ped->ulLocatorID-1].ulLocatorType) {
  3952.                         case LT_PEN:
  3953.                            break;
  3954.  
  3955.                         case LT_TOUCH:
  3956.                            break;
  3957.  
  3958.                         case LT_MOUSE:
  3959.                            break;
  3960.  
  3961.                         default:
  3962.                           break;
  3963.                         } /* endswitch */
  3964.  
  3965.  
  3966. ΓòÉΓòÉΓòÉ 14.16. WrtQueryButtonCaps ΓòÉΓòÉΓòÉ
  3967.  
  3968.  Syntax   rc = WrtQueryButtonCaps (PULONG pulButtonID, PWRTBUTTONDEVINFO 
  3969.  
  3970.                             pbdiInfo);
  3971.  
  3972.  Purpose 
  3973.  
  3974.           This function returns device capabilities for button devices. 
  3975.  
  3976.  Parameters 
  3977.  
  3978.           pulButtonID (PULONG) - input/output 
  3979.                     If pointing to a value of 0, the number of configured 
  3980.                     button devices will be returned.  If pointing to a nonzero 
  3981.                     value, it is the ID of the button device to be queried. 
  3982.  
  3983.           pbdiInfo (PWRTBUTTOBDEVINFO) - input/output 
  3984.                     Pointer to WRTBUTTONDEVINFO structure.  If the ULONG 
  3985.                     pointed to by pulButtonIDis nonzero, pbdiInfo must contain 
  3986.                     a valid structure pointer. 
  3987.  
  3988.           rc (APIRET) - return 
  3989.  
  3990.  Returns 
  3991.  
  3992.           Return codes indicating success or type of failure: 
  3993.  
  3994.           WRT_NO_ERROR                       Successful. 
  3995.  
  3996.           WRTERR_NOT_ACTIVE                  Pen for OS/2 subsystem is not 
  3997.                                              active. 
  3998.  
  3999.           WRTERR_INVALID_BUTTON_ID           Invalid button ID. 
  4000.  
  4001.           WRTERR_INVALID_PARM                Invalid parameter. 
  4002.  
  4003.           WRTERR_INVALID_POINTER             Invalid buttonID pointer. 
  4004.  
  4005.           WRTERR_INVALID_BUFFER              Invalid structure pointer. 
  4006.  
  4007.           WRTERR_STRUCT_NOT_INIT             cbStructSize field not 
  4008.                                              initialized. 
  4009.  
  4010.  Remarks 
  4011.  
  4012.           This function returns device capabilities for registered button 
  4013.           devices. 
  4014.  
  4015.           If the function is called with the ULONG pointed to by pulButtonID 
  4016.           set to 0, the number of configured button devices is calculated and 
  4017.           returned in the ULONG. Button device IDs are numbered 1 to N.  If the 
  4018.           value 3 is returned in the ULONG, the valid button device IDs are 1, 
  4019.           2, and 3. 
  4020.  
  4021.           Before you query WrtQueryButtonCaps, the cbStructSize field must be 
  4022.           initialized. 
  4023.  
  4024.  
  4025. ΓòÉΓòÉΓòÉ 14.17. WrtWrtQueryDisplayCaps ΓòÉΓòÉΓòÉ
  4026.  
  4027.  Syntax   rc = WrtWrtQueryDisplayCaps (PULONG pulDisplayID, 
  4028.  
  4029.                             PWRTDISPLAYDEVINFO pddiInfo);
  4030.  
  4031.  Purpose 
  4032.  
  4033.           This function returns device capabilities for display devices. 
  4034.  
  4035.  Parameters 
  4036.  
  4037.           pulDisplayID (PULONG) - input/output 
  4038.                     If pointing to a value of 0, the number of configured 
  4039.                     display devices will be returned.  If pointing to a nonzero 
  4040.                     value, it is the ID of the display device to be queried. 
  4041.  
  4042.           pddiInfo (PWRTDISPLAYDEVINFO) - input/output 
  4043.                     Pointer to WRTDISPLAYDEVINFO structure.  If the ULONG 
  4044.                     pointed to by pulDisplayID is nonzero, pddiInfo must 
  4045.                     contain a valid structure pointer. 
  4046.  
  4047.           rc (APIRET) - return 
  4048.  
  4049.  Returns 
  4050.  
  4051.           Return codes indicating success or type of failure: 
  4052.  
  4053.           WRT_NO_ERROR                       Successful. 
  4054.  
  4055.           WRTERR_NOT_ACTIVE                  Pen for OS/2 subsystem is not 
  4056.                                              active. 
  4057.  
  4058.           WRTERR_INVALID_BUTTON_ID           Invalid button ID. 
  4059.  
  4060.           WRTERR_INVALID_PARM                Invalid parameter. 
  4061.  
  4062.           WRTERR_INVALID_POINTER             Invalid displayID pointer. 
  4063.  
  4064.           WRTERR_INVALID_BUFFER              Invalid structure pointer. 
  4065.  
  4066.           WRTERR_STRUCT_NOT_INIT             cbStructSize field not 
  4067.                                              initialized. 
  4068.  
  4069.  Remarks 
  4070.  
  4071.           This function returns device capabilities for registered display 
  4072.           devices. 
  4073.  
  4074.           If the function is called with the ULONG pointed to by pulDisplayID 
  4075.           set to 0, the number of configured display devices is calculated and 
  4076.           returned in the ULONG. Display device IDs are numbered 1 to N.  If 
  4077.           the value 2 is returned in the ULONG, the valid display device IDs 
  4078.           are 1 and 2. 
  4079.  
  4080.           Before you query WrtWrtQueryDisplayCaps, the cbStructSize field must 
  4081.           be initialized. 
  4082.  
  4083.  
  4084. ΓòÉΓòÉΓòÉ 14.18. WrtSetInputDeviceVariable ΓòÉΓòÉΓòÉ
  4085.  
  4086.  Syntax   rc = WrtSetInputDeviceVariable (PSZ pszDriverName, PSZ pszDeviceName, 
  4087.  
  4088.                             ULONG ulValueID, LONG lValue, ULONG ulDatalen,
  4089.                             PVOID pData);
  4090.  
  4091.  Purpose 
  4092.  
  4093.           Sets a Pen for OS/2 input device variable.  This function is called 
  4094.           by the Workplace Shell Setup objects that control the Pen for OS/2 
  4095.           input devices. 
  4096.  
  4097.  Parameters 
  4098.  
  4099.           pszDriverName (PSZ) - input 
  4100.                     Pointer to a null-terminated string containing the driver 
  4101.                     name. 
  4102.  
  4103.           pszDeviceName (PSZ) - input 
  4104.                     Pointer to a null-terminated string containing the device 
  4105.                     name. When setting a driver specific parameter such as 
  4106.                     PPMID_DEVICE_PARMS, pszDeviceName should be "Driver". 
  4107.  
  4108.           ulValueId (ULONG) - input 
  4109.                     Input device variable ID. 
  4110.  
  4111.                     Contains none or some of the following flags: 
  4112.  
  4113.              PPMID_MOTION_STOP                  Stops motion filter. 
  4114.  
  4115.              PPMID_MOTION_START                 Starts motion filter. 
  4116.  
  4117.              PPMID_MINGESTURELENGTH             Minimum gesture size. 
  4118.  
  4119.              PPMID_DISABLE_PROXIMITY            Disables proximity events. 
  4120.  
  4121.              PPMID_POINT_RATE                   Maximum point rate. 
  4122.  
  4123.              PPMID_DIVIDE_RATE                  Divide rate. 
  4124.  
  4125.              PPMID_BACKLIGHTBLANK               Blanking enable. 
  4126.  
  4127.              PPMID_BACKLIGHTBLANK_INT           Blanking timer interval. 
  4128.  
  4129.              PPMID_TOUCHOFFSET_X                Displays offset between 
  4130.                                                 fingertip and the screen's 
  4131.                                                 pointer icon (X). 
  4132.  
  4133.              PPMID_TOUCHOFFSET_Y                Displays offset between 
  4134.                                                 fingertip and the screen's 
  4135.                                                 pointer icon (Y). 
  4136.  
  4137.              PPMID_DEVICE_PARMS                 Device specific data. 
  4138.  
  4139.           lValue (LONG) - input 
  4140.                     New value of variable. 
  4141.  
  4142.           ulDatalen (ULONG) - input 
  4143.                     The length of the binary calibration data when option 
  4144.                     PPMID_DEVICE_PARMS is specified.  Otherwise, this parameter 
  4145.                     is ignored. The length of the calibration data cannot 
  4146.                     exceed 512 bytes. 
  4147.  
  4148.           pData (PVOID) - input 
  4149.                     A pointer to the binary calibration data when option 
  4150.                     PPMID_DEVICE_PARMS is specified.  Otherwise, this parameter 
  4151.                     is ignored. 
  4152.  
  4153.           rc (APIRET) - return 
  4154.  
  4155.  Returns 
  4156.  
  4157.           Return codes indicating success or type of failure: 
  4158.  
  4159.           WRT_NO_ERROR                               Successful. 
  4160.  
  4161.           WRTERR_NOT_ACTIVE                          Pen subsystem is not 
  4162.                                                      active. 
  4163.  
  4164.           WRTERR_INVALID_DRIVER_NAME                 Invalid driver name. 
  4165.  
  4166.           WRTERR_INVALID_DEVICE_NAME                 Invalid device name. 
  4167.  
  4168.           WRTERR_INVALID_ID                          Invalid valueid. 
  4169.  
  4170.           WRTERR_PARM_OUT_OF_RANGE                   Parameter out of range. 
  4171.  
  4172.           WRTERR_INVALID_BUFFER                      Faulty buffer pointer, 
  4173.                                                      buffer is too small, or 
  4174.                                                      buffer is too large. 
  4175.  
  4176.           WRTERR_INVALID_PARM                        Invalid parameter. 
  4177.  
  4178.           WRTERR_VALUEID_DEVICE_MISMATCH             Value/device mismatch. 
  4179.  
  4180.           WRTERR_NO_DEVICE_CAPABILITY                Device does not support 
  4181.                                                      option. 
  4182.  
  4183.  Remarks 
  4184.  
  4185.           This function sets an input device variable for the specified device. 
  4186.           The variable is passed to the associated device driver and is written 
  4187.           to the profile. 
  4188.  
  4189.           A WRTERR_VALUEID_DEVICE_MISMATCH error is a result of trying to set a 
  4190.           parameter like PPMID_BACKLIGHTBLANK for a "Pen" device. 
  4191.  
  4192.           A WRTERR_NO_DEVICE_CAPABILITY is a result of trying to set a 
  4193.           parameter such as PPMID_BACKLIGHTBLANK for a "Display" device that 
  4194.           does not support backlight blanking. 
  4195.  
  4196.  
  4197. ΓòÉΓòÉΓòÉ 14.19. WrtQueryInputDeviceVariable ΓòÉΓòÉΓòÉ
  4198.  
  4199.  Syntax   rc = WrtQueryInputDeviceVariable (PSZ pszDriverName, 
  4200.  
  4201.                             PSZ pszDeviceName, ULONG ulValueID, PLONG plValue,
  4202.                             PULONG pulDatalen, PVOID pData);
  4203.  
  4204.  Purpose 
  4205.  
  4206.           Queries a Pen for OS/2 input device variable. This function is called 
  4207.           by Workplace Shell Setup objects that control the associated device. 
  4208.  
  4209.  Parameters 
  4210.  
  4211.           pszDriverName (PSZ) - input 
  4212.                     Pointer to a null-terminated string containing the driver 
  4213.                     name. 
  4214.  
  4215.           pszDeviceName (PSZ) - input 
  4216.                     Pointer to a null-terminated string containing the device 
  4217.                     name. When setting a driver specific parameter such as 
  4218.                     PPMID_DEVICE_PARMS, pszDeviceName should be "Driver". 
  4219.  
  4220.           ulValueId (ULONG) - input 
  4221.                     Input device variable ID. 
  4222.  
  4223.                     Contains none or some of the following flags: 
  4224.  
  4225.              PPMID_MOTION_STOP                  Stops motion filter. 
  4226.  
  4227.              PPMID_MOTION_START                 Starts motion filter. 
  4228.  
  4229.              PPMID_MINGESTURELENGTH             Minimum gesture size. 
  4230.  
  4231.              PPMID_DISABLE_PROXIMITY            Disables proximity events. 
  4232.  
  4233.              PPMID_POINT_RATE                   Maximum point rate. 
  4234.  
  4235.              PPMID_DIVIDE_RATE                  Divide rate. 
  4236.  
  4237.              PPMID_BACKLIGHTBLANK               Blanking enable. 
  4238.  
  4239.              PPMID_BACKLIGHTBLANK_INT           Blanking timer interval. 
  4240.  
  4241.              PPMID_TOUCHOFFSET_X                Displays offset between 
  4242.                                                 fingertip and the screen's 
  4243.                                                 pointer icon (X). 
  4244.  
  4245.              PPMID_TOUCHOFFSET_Y                Displays offset between 
  4246.                                                 fingertip and the screen's 
  4247.                                                 pointer icon (Y). 
  4248.  
  4249.              PPMID_DEVICE_PARMS                 Device specific data. 
  4250.  
  4251.           plValue (PLONG) - output 
  4252.                     Pointer to a LONG to receive the current value of the 
  4253.                     variable. 
  4254.  
  4255.           pulDatalen (PULONG) - input/output 
  4256.                     Pointer to the length of the binary calibration data when 
  4257.                     option PPMID_DEVICE_PARMS is specified.  Otherwise, this 
  4258.                     parameter is ignored. 
  4259.  
  4260.                     The length of the device data can range from 1 to 512 
  4261.                     bytes. Programs may query the size of the device data by 
  4262.                     specifying a length of 0.  When the ULONG pointed to by 
  4263.                     pulDatalen is 0, the pData parameter is ignored and the 
  4264.                     ULONG is updated with the actual size of the device data. 
  4265.  
  4266.                     When retrieving device data, the ULONG pointed to by 
  4267.                     pulDatalen must be greater than or equal to the size of the 
  4268.                     device data. 
  4269.  
  4270.           pData (PVOID) - input/output 
  4271.                     A pointer to the buffer in which to receive the device data 
  4272.                     when PPMID_DEVICE_PARMS is specified.  Otherwise, this 
  4273.                     parameter is ignored.  This parameter is also ignored when 
  4274.                     querying the size of of the device data. 
  4275.  
  4276.           rc (APIRET) - return 
  4277.  
  4278.  Returns 
  4279.  
  4280.           Return codes indicating success or type of failure: 
  4281.  
  4282.           WRT_NO_ERROR                               Successful. 
  4283.  
  4284.           WRTERR_NOT_ACTIVE                          Pen for OS/2 writing input 
  4285.                                                      subsystem is not active. 
  4286.  
  4287.           WRTERR_INVALID_DRIVER_NAME                 Invalid driver name. 
  4288.  
  4289.           WRTERR_INVALID_DEVICE_NAME                 Invalid device name. 
  4290.  
  4291.           WRTERR_INVALID_ID                          Invalid valueID. 
  4292.  
  4293.           WRTERR_INVALID_PARM                        Invalid parameter. 
  4294.  
  4295.           WRTERR_INVALID_POINTER                     Invalid plValue pointer. 
  4296.  
  4297.           WRTERR_INVALID_BUFFER                      Faulty buffer pointer or 
  4298.                                                      buffer is too small. 
  4299.  
  4300.           WRTERR_VALUEID_DEVICE_MISMATCH             Value/device mismatch. 
  4301.  
  4302.           WRTERR_NO_DEVICE_CAPABILITY                Device does not support 
  4303.                                                      option. 
  4304.  
  4305.  Remarks 
  4306.  
  4307.           This function queries an input device variable for the specified 
  4308.           device.  Input device variables are maintained for each configured 
  4309.           device.  During device initialization, the default values are set, 
  4310.           unless a profile entry exists for that device. 
  4311.  
  4312.           Input device variables will exist only in the profile if the 
  4313.           associated Workplace Shell Setup Object made an entry at installation 
  4314.           or if a user modified the value. 
  4315.  
  4316.           A WRTERR_VALUEID_DEVICE_MISMATCH error is a result of trying to query 
  4317.           a parameter like PPMID_BACKLIGHTBLANK for a "Pen" device. 
  4318.  
  4319.           A WRTERR_NO_DEVICE_CAPABILITY is a result of trying to query a 
  4320.           parameter such as PPMID_BACKLIGHTBLANK for a "Display" device that 
  4321.           does not support backlight blanking. 
  4322.  
  4323.  
  4324. ΓòÉΓòÉΓòÉ 15. Pen for OS/2 Writing Subsystem Messages ΓòÉΓòÉΓòÉ
  4325.  
  4326. The messages in this chapter include notification messages that report various 
  4327. asynchronous events and device proximity events that report changes in state. 
  4328.  
  4329.  
  4330. ΓòÉΓòÉΓòÉ 15.1. WM_TOUCHDOWN ΓòÉΓòÉΓòÉ
  4331.  
  4332. This message indicates that the user has made contact with the surface, using 
  4333. either the pen, finger, or mouse.  The message is sent to the window under the 
  4334. point of contact through WinSendMsg.  The application is provided with the 
  4335. status of the configured bezel buttons and whether the stroke is going to be 
  4336. inked by default.  It is at this time that the application might specify: 
  4337.  
  4338.  o The delay between the touch-down point and the mouse-button-down event 
  4339.    message 
  4340.  
  4341.  o Whether to override the default inking 
  4342.  
  4343.  o The options to receive coordinate data at full bandwidth 
  4344.  
  4345.  An example message follows and the associated parameters are explained: 
  4346.  
  4347.  
  4348.          WM_TOUCHDOWN -- User has made contact with the surface
  4349.  
  4350.   DelayCode = WinSendMsg(hwnd, WM_TOUCHDOWN, mp1, mp2)
  4351.  
  4352.  Parameters 
  4353.  
  4354.           mp1 
  4355.  
  4356.              ptsPointerPos (POINTS) 
  4357.                   Pointer position. The pointer position is in window 
  4358.                   coordinates relative to the bottom-left corner of the window. 
  4359.  
  4360.                   Note:  mp1 can be addressed through PM MOUSEMSG macro. 
  4361.  
  4362.           mp2 
  4363.  
  4364.              pedEventData (PWRTEVENTDATA) 
  4365.                   Pointer to an event data assigned with the current pointer. 
  4366.  
  4367.  Return Codes 
  4368.  
  4369.           DelayCode (MRESULT) 
  4370.  
  4371.              Delay between WM_TOUCHDOWN and WM_BUTTONxDOWN: 
  4372.                      Contains one of the following flags: 
  4373.  
  4374.                 TDN_DEFAULT_DELAY            Use the default delay. 
  4375.  
  4376.                 TDN_IMMEDIATE                No delay.  The application will 
  4377.                                              receive the WM_BUTTONxDOWN message 
  4378.                                              immediately.  Note that a stroke 
  4379.                                              buffer is not built when this 
  4380.                                              option is specified. 
  4381.  
  4382.                 TDN_INFINITE                 Infinite delay.  The application 
  4383.                                              will not receive a WM_BUTTONxDOWN 
  4384.                                              message. 
  4385.  
  4386.              Inking options: 
  4387.                      Contains one of the following flags: 
  4388.  
  4389.                 TDN_INK_STROKE               Ink the stroke. 
  4390.  
  4391.                 TDN_NO_INK_STROKE            Do not ink stroke. 
  4392.  
  4393.                 TDN_LEAVE_INK                Do not de-ink the stroke at the 
  4394.                                              lift-off point.  The stroke will 
  4395.                                              remain inked except if the stroke 
  4396.                                              contained points that were outside 
  4397.                                              the touch-down window.  In this 
  4398.                                              case, the stroke will be de-inked. 
  4399.  
  4400.                 Contains one of the following flags: 
  4401.  
  4402.                 TDN_HIFREQ_MOUSEMOVE         Pass all received points as 
  4403.                                              WM_MOUSEMOVE messages.  These 
  4404.                                              messages are sent at the hardware 
  4405.                                              sampling rate through WinSendMsg. 
  4406.                                              Receiving high frequency 
  4407.                                              WM_MOUSEMOVEs does not prevent the 
  4408.                                              user from retrieving the stroke 
  4409.                                              buffer at the lift-off point. 
  4410.  
  4411.                 TDN_SENSOR_MOVE              Pass all received points as 
  4412.                                              WM_SENSOR_MOVE messages.  See 
  4413.                                              WM_SENSOR_MOVE message. 
  4414.  
  4415.  
  4416. ΓòÉΓòÉΓòÉ 15.2. WM_LIFTOFF ΓòÉΓòÉΓòÉ
  4417.  
  4418. The WM_LIFTOFF message indicates that the user has broken contact with the 
  4419. surface.  The message is sent through WinSendMsg to the window that normally 
  4420. would have received the WM_BUTTONxUP message so that the subsequent processing, 
  4421. including mouse emulation, can be specified.  If another window had captured 
  4422. the mouse, the message would have been routed to that window. 
  4423.  
  4424. If the user moved the pointer device and lifted off before the delay timeout, a 
  4425. stroke might be available.  If the WRT_STROKE_AVAIL flag is set in the 
  4426. flEventStatus field of the WRTEVENTDATA structure pointed to by mp2, the 
  4427. application may query the size of the stroke buffer and retrieve it (obtain a 
  4428. copy of its contents) through WrtQueryStrokeData. The stroke will be made 
  4429. invalid subsequent to the handling of this message, so the application must 
  4430. retrieve it before returning from this call. 
  4431.  
  4432. When gestures are drawn, an application will not receive WM_LIFTOFF messages 
  4433. because the message is rerouted to the gesture-compatibility window, which 
  4434. collects strokes and performs gesture recognition on behalf of the window. 
  4435.  
  4436. When LO_EMULATE_MOUSE is returned from WM_LIFTOFF, WM_BUTTONxDOWN and 
  4437. WM_BUTTONxUP events are generated to perform mouse emulation. 
  4438.  
  4439. If the application returns LO_STROKE_PROCESSED, the application has performed 
  4440. all processing of the message and no further action is taken. 
  4441.  
  4442. When LO_DEFAULT is returned, A WM_STROKE message is generated and sent to the 
  4443. application. 
  4444.  
  4445. An example message follows and the associated parameters are explained: 
  4446.  
  4447.  
  4448.        WM_LIFTOFF -- User has broken contact with the surface
  4449.  
  4450. fProcessed = WinSendMsg(hwnd, WM_LIFTOFF, mp1, mp2)
  4451.  
  4452.  Parameters 
  4453.  
  4454.           mp1 
  4455.  
  4456.              ptsPointerPos (POINTS) 
  4457.                   Pointer position. The pointer position is in window 
  4458.                   coordinates relative to the bottom-left corner of the window. 
  4459.  
  4460.                   Note:  mp1 can be addressed through PM MOUSEMSG macro. 
  4461.  
  4462.           mp2 
  4463.  
  4464.              pedEventData (PWRTEVENTDATA) 
  4465.                   Pointer to an event data assigned with the current pointer. 
  4466.  
  4467.  Return Codes 
  4468.  
  4469.           fProcessed (MRESULT) 
  4470.                     Contains none or some of the following flags: 
  4471.  
  4472.              LO_DEFAULT                  Continue with gesture recognition. 
  4473.  
  4474.              LO_EMULATE_MOUSE            Skip gesture recognition and do mouse 
  4475.                                          emulation. 
  4476.  
  4477.              LO_STROKE_PROCESSED         Application handle stroke.  Do no 
  4478.                                          further processing. 
  4479.  
  4480.  
  4481. ΓòÉΓòÉΓòÉ 15.3. WM_STROKE ΓòÉΓòÉΓòÉ
  4482.  
  4483. This message is always sent through WinSendMsg. The WM_STROKE message indicates 
  4484. that a stroke is available because the the liftoff window did not handle the 
  4485. stroke during WM_LIFTOFF processing.  The format is exactly the same as the 
  4486. WM_LIFTOFF message except that mp1 contains the sequence number of the stroke 
  4487. so that an application can later reference that stroke in the doodle object. 
  4488.  
  4489. An example message follows and the associated parameters are explained: 
  4490.  
  4491.  
  4492.        WM_STROKE -- Stroke is available
  4493.  
  4494. fProcessed = WinSendMsg(hwnd, WM_STROKE, mp1, mp2)
  4495.  
  4496.  Parameters 
  4497.  
  4498.           mp1 
  4499.  
  4500.              ptsPointerPos (POINTS) 
  4501.                   Pointer position. 
  4502.  
  4503.           mp2 
  4504.  
  4505.              pedEventData (PWRTEVENTDATA) 
  4506.                   Pointer to an event data assigned with the current pointer. 
  4507.  
  4508.  Return Codes 
  4509.  
  4510.           fProcessed (MRESULT) 
  4511.                     Contains none or some of the following flags: 
  4512.  
  4513.              STK_DEFAULT                   Send WM_TAP message, if appropriate; 
  4514.                                            then do mouse emulation. 
  4515.  
  4516.              STK_STROKE_PROCESSED          Application handled stroke.  Do no 
  4517.                                            further processing. 
  4518.  
  4519.  
  4520. ΓòÉΓòÉΓòÉ 15.4. WM_SENSOR_MOVE ΓòÉΓòÉΓòÉ
  4521.  
  4522. This message indicates the movement of the pen or finger.  It is sent through 
  4523. WinSendMsg upon receiving a WM_TOUCHDOWN return from an application with the 
  4524. TDN_SENSOR_MOVE flag set.  The coordinates contained in mp1 are high resolution 
  4525. and the WrtMapPointLong routine must be called to convert them to screen 
  4526. coordinates and map them to the application's window if they are to be inked. 
  4527.  
  4528. WM_SENSOR_MOVE messages are generated at the digitizer-sampling rate and 
  4529. provide the application with the digitizer-coordinate data real time as opposed 
  4530. to the standard method of collecting the buffered coordinate data at the 
  4531. lift-off point. 
  4532.  
  4533. Given the arrival rate of WM_SENSOR_MOVES, applications should keep 
  4534. WM_SENSOR_MOVE processing to a minimum, preferably under 2 milliseconds of 
  4535. execution time. 
  4536.  
  4537. If the application falls behind in the processing of WM_SENSOR_MOVE messages, 
  4538. subsequent WM_SENSOR_MOVE messages will not be discarded or coalesced.  The 
  4539. messages will remain buffered in the Pen for OS/2 Writing Subsystem until they 
  4540. can be dequeued and sent to the application. 
  4541.  
  4542. Note that coordinates will be relative when reported by relative devices, which 
  4543. means the coordinates will be expressed as on offset from the last location 
  4544. instead of as an absolute X/Y location. 
  4545.  
  4546. An example message follows and the associated parameters are explained: 
  4547.  
  4548.  
  4549.        WM_SENSOR_MOVE   -- Change of touch or pen position
  4550.  
  4551. WinSendMsg(hwnd, WM_SENSOR_MOVE, mp1, mp2)
  4552.  
  4553.  Parameters 
  4554.  
  4555.           mp1 
  4556.  
  4557.              ptsPointerPos (POINTS) 
  4558.                   Pointer position. The pointer position is in window 
  4559.                   coordinates relative to the bottom-left corner of the window. 
  4560.  
  4561.                   Note:  mp1 can be addressed through PM MOUSEMSG macro. 
  4562.  
  4563.           mp2 
  4564.  
  4565.              pedEventData (PWRTEVENTDATA) 
  4566.                   Pointer to an event data assigned with the current pointer. 
  4567.  
  4568.  Return Codes 
  4569.  
  4570.           None. 
  4571.  
  4572.  
  4573. ΓòÉΓòÉΓòÉ 15.5. WM_TAP ΓòÉΓòÉΓòÉ
  4574.  
  4575. This message is sent through WinSendMsg and will be sent to the capture window, 
  4576. if any.  If no window has the capture, then the window under the cursor gets 
  4577. the message.  Position is always relative to the window receiving this message. 
  4578.  
  4579. This message indicates that the user tapped on the surface where a tap is 
  4580. defined as touching down and lifting off before a pause timeout occurs. 
  4581.  
  4582. An example message follows and the associated parameters are explained: 
  4583.  
  4584.  
  4585.        WM_TAP    -- Tap
  4586.  
  4587. fProcessed = WinSendMsg(hwnd, WM_TAP, mp1, mp2)
  4588.  
  4589.  Parameters 
  4590.  
  4591.           mp1 
  4592.  
  4593.              ptsPointerPos (POINTS) 
  4594.                   Pointer position. The pointer position is in window 
  4595.                   coordinates relative to the bottom-left corner of the window. 
  4596.  
  4597.                   Note:  mp1 can be addressed through PM MOUSEMSG macro. 
  4598.  
  4599.           mp2 
  4600.  
  4601.              pedEventData (PWRTEVENTDATA) 
  4602.                   Pointer to an event data assigned with the current pointer. 
  4603.  
  4604.  Return Codes 
  4605.  
  4606.           fProcessed (MRESULT) 
  4607.                     Contains none or some of the following flags: 
  4608.  
  4609.              TP_TAP_PROCESSED             Program processed tap message.  Take 
  4610.                                           no other action. 
  4611.  
  4612.              TP_DEFAULT                   Perform mouse emulation, except when 
  4613.                                           you are processing the touch-down 
  4614.                                           message. 
  4615.  
  4616.  
  4617. ΓòÉΓòÉΓòÉ 15.6. WM_DBL_TAP ΓòÉΓòÉΓòÉ
  4618.  
  4619. This message is sent through WinSendMsg and will be sent to the capture window, 
  4620. if any.  If no window has the capture, then the window under the cursor gets 
  4621. the message.  Position is always relative to the window receiving this message. 
  4622.  
  4623. This message indicates that the user tapped twice on the digitizer where the 
  4624. second tap occurred within a period of time less than the double-click time. 
  4625. The second WM_TAP message is converted to a WM_DBL_TAP message before it is 
  4626. sent to the application. 
  4627.  
  4628. An example message follows and the associated parameters are explained: 
  4629.  
  4630.  
  4631.        WM_DBL_TAP    -- Double Tap
  4632.  
  4633. fProcessed = WinSendMsg(hwnd, WM_DOUBLE_TAP, mp1, mp2)
  4634.  
  4635.  Parameters 
  4636.  
  4637.           mp1 
  4638.  
  4639.              ptsPointerPos (POINTS) 
  4640.                   Pointer position. The pointer position is in window 
  4641.                   coordinates relative to the bottom-left corner of the window. 
  4642.  
  4643.                   Note:  mp1 can be addressed through PM MOUSEMSG macro. 
  4644.  
  4645.           mp2 
  4646.  
  4647.              pedEventData (PWRTEVENTDATA) 
  4648.                   Pointer to an event data assigned with the current pointer. 
  4649.  
  4650.  Return Codes 
  4651.  
  4652.           fProcessed (MRESULT) 
  4653.                     Contains none or some of the following flags: 
  4654.  
  4655.              TP_TAP_PROCESSED             Program processed tap message.  Take 
  4656.                                           no other action. 
  4657.  
  4658.              TP_DEFAULT                   Perform mouse emulation, except when 
  4659.                                           you are processing the touch-down 
  4660.                                           message. 
  4661.  
  4662.  
  4663. ΓòÉΓòÉΓòÉ 15.7. WM_PAUSE_TIMEOUT ΓòÉΓòÉΓòÉ
  4664.  
  4665. This message is sent through WinSendMsg and will be sent to the capture window, 
  4666. if any.  If no window has the capture, then the window under the cursor gets 
  4667. the message.  Position is always relative to the window receiving this message. 
  4668.  
  4669. This message indicates that the pause timer expired during a gesture and mouse 
  4670. emulation mode was entered. 
  4671.  
  4672. An example message follows and the associated parameters are explained: 
  4673.  
  4674.  
  4675.        WM_PAUSE_TIMEOUT   -- Pause Timeout
  4676.  
  4677. fProcessed = WinSendMsg(hwnd, WM_PAUSE_TIMEOUT, mp1, mp2)
  4678.  
  4679.  Parameters 
  4680.  
  4681.           mp1 
  4682.  
  4683.              ptsPointerPos (POINTS) 
  4684.                   Pointer position. The pointer position is in window 
  4685.                   coordinates relative to the bottom-left corner of the window. 
  4686.  
  4687.                   Note:  mp1 can be addressed through PM MOUSEMSG macro. 
  4688.  
  4689.           mp2 
  4690.  
  4691.              pedEventData (PWRTEVENTDATA) 
  4692.                   Pointer to an event data assigned with the current pointer. 
  4693.  
  4694.  Return Codes 
  4695.  
  4696.           fProcessed (MRESULT) 
  4697.                     Indicates success or failure of the operation. 
  4698.  
  4699.              PTO_DEFAULT                  A WM_BUTTONxDOWN message will be 
  4700.                                           generated and routed to the target 
  4701.                                           application. 
  4702.  
  4703.              PTO_CONTINUE                 The pause timeout is ignored and no 
  4704.                                           mouse emulation is performed. The 
  4705.                                           building of the stroke buffer 
  4706.                                           continues. 
  4707.  
  4708.  
  4709. ΓòÉΓòÉΓòÉ 15.8. WM_EXIT_PROXIMITY ΓòÉΓòÉΓòÉ
  4710.  
  4711. This message is sent through WinSendMsg and will be sent to the capture window, 
  4712. if any.  If no window has the capture, then the window under the cursor gets 
  4713. the message.  Position is always relative to the window receiving this message. 
  4714.  
  4715. This message indicates that the pen has exited the proximity region of the 
  4716. digitizer. This message can be used as a stimulus to process strokes data as 
  4717. leaving the proximity region.  It is an indication of a temporary cessation of 
  4718. pen input. 
  4719.  
  4720. Not all digitizers provide proximity capability.  An application can determine 
  4721. this through a call to WrtQueryLocatorCaps. 
  4722.  
  4723. An example message follows and the associated parameters are explained: 
  4724.  
  4725.  
  4726.        WM_EXIT_PROXIMITY -- Pen Exit Proximity
  4727.  
  4728. fProcessed = WinSendMsg(hwnd, WM_EXIT_PROXIMITY, mp1, mp2)
  4729.  
  4730.  Parameters 
  4731.  
  4732.           mp1 
  4733.  
  4734.              ptsPointerPos (POINTS) 
  4735.                   Pointer position. The pointer position is in window 
  4736.                   coordinates relative to the bottom-left corner of the window. 
  4737.  
  4738.                   Note:  mp1 can be addressed through PM MOUSEMSG macro. 
  4739.  
  4740.           mp2 
  4741.  
  4742.              pedEventData (PWRTEVENTDATA) 
  4743.                   Pointer to an event data assigned with the current pointer. 
  4744.  
  4745.  Return Codes 
  4746.  
  4747.           None. 
  4748.  
  4749.  
  4750. ΓòÉΓòÉΓòÉ 15.9. WM_WRT_DEV_CAPS_CHANGE ΓòÉΓòÉΓòÉ
  4751.  
  4752. This message is posted through WinBroadcastMsg to all frame windows whenever 
  4753. there has been a change in device capabilities. 
  4754.  
  4755. Pen drivers notify Pen for OS/2 Writing Subsystem whenever there has been a 
  4756. change in device capabilities and Pen for OS/2 Writing Subsystem in turn 
  4757. notifies applications.  An example of a device capability change would be a 
  4758. change in calibration, the enabling/disabling of hardware such as bezel or 
  4759. barrel buttons, or the reduction in point rate. 
  4760.  
  4761. Applications that have intimate knowledge of device capabilities or rely 
  4762. heavily on certain hardware features should call Pen for OS/2 Writing Subsystem 
  4763. function WrtQuery*Caps to determine the new device capabilities when handling 
  4764. this message. 
  4765.  
  4766. An example message follows and the associated parameters are explained: 
  4767.  
  4768.  
  4769.   WM_WRT_DEV_CAPS_CHANGE - Device Capabilities Change Notification
  4770.  
  4771. WinBroadcastMsg(hwnd, WM_WRT_DEV_CAPS_CHANGE, mp1, mp2);
  4772.  
  4773.  Parameters 
  4774.  
  4775.           mp1 
  4776.  
  4777.              deviceID (USHORT) 
  4778.                   The ID of the device reporting a change in device 
  4779.                   capabilities. 
  4780.  
  4781.              devicetype (USHORT) 
  4782.                   Device type.  (See DT_* values that follow.) 
  4783.  
  4784.                     DT_* values for mp1 of the WM_WRT_DEV_CAPS_CHANGE message. 
  4785.  
  4786.                                         #define DT_LOCATOR  0x03          /* locator device  */
  4787.                                         #define DT_BUTTON   0x04          /* button device   */
  4788.                                         #define DT_DISPLAY  0x05          /* display device  */
  4789.  
  4790.           mp2 
  4791.  
  4792.              NULL (MPARAM) 
  4793.  
  4794.  Return Codes 
  4795.  
  4796.           None. 
  4797.  
  4798.  
  4799. ΓòÉΓòÉΓòÉ 15.10. WM_WRT_SYSVALUECHANGED ΓòÉΓòÉΓòÉ
  4800.  
  4801. This message is posted through WinBroadcastMsg to all windows whenever a Pen 
  4802. for OS/2 system value has changed. 
  4803.  
  4804. It is the responsibility of the application changing the system value to 
  4805. broadcast the message. 
  4806.  
  4807. Applications sensitive to changes in Pen for OS/2 system variables should 
  4808. examine mp1 and mp2 to determine the changed variables and call Pen for OS/2 
  4809. Writing Subsystem function WrtQuerySysValue or WrtQueryInputDeviceVariable to 
  4810. retrieve the new value. 
  4811.  
  4812. An example message follows and the associated parameters are explained: 
  4813.  
  4814.  
  4815.   WM_WRT_SYSVALUECHANGED - Pen for OS/2 System Value Change Notification
  4816.  
  4817. WinBroadcastMsg(hwnd, WM_WRT_SYSVALUECHANGED, mp1, mp2);
  4818.  
  4819.  Parameters 
  4820.  
  4821.           mp1 
  4822.                     Type of Pen for OS/2 program variable that changed. 
  4823.  
  4824.                     Contains none or some of the following flags: 
  4825.  
  4826.              VT_PPMSV             Pen for OS/2 system variable (see "Using 
  4827.                                   System Variables"  for information on 
  4828.                                   PPMSV_*) 
  4829.  
  4830.              VT_PPMID             Pen for OS/2 input device variable (see 
  4831.                                   "Using Device Drivers"  for information on 
  4832.                                   PPMID_*) 
  4833.  
  4834.           mp2 
  4835.                     PPMID_* values for mp2 of WM_WRT_SYSVALUECHANGED. 
  4836.                     mp2 might also contain PPMSV_* values defined elsewhere. 
  4837.  
  4838.  
  4839.        PPMID_MOTION_STOP           Amount of movement in thousandths of an
  4840.                                      inch to determine cessation of motion
  4841.        PPMID_MOTION_START          Amount of movement in .001" to determine
  4842.                                      start of motion
  4843.        PPMID_MINGESTURELENGTH      Minimum gesture length in .001"
  4844.        PPMID_DISABLE_PROXIMITY     Disable proximity event reporting
  4845.        PPMID_TOUCHOFFSET_X         X offset of cursor relative to finger
  4846.        PPMID_TOUCHOFFSET_Y         Y offset of cursor relative to finger
  4847.        PPMID_BACKLIGHTBLANK        Enable blanking of backlight
  4848.        PPMID_BACKLIGHTBLANK_INT    Timer value to blank backlight
  4849.        PPMID_POINT_RATE            Number of points generated per second
  4850.        PPMID_DIVIDE_RATE           Divide rate for points passed to OS/2
  4851.        PPMID_DEVICE_PARMS          Device specific data.  Usually calibration
  4852.                                      data
  4853.  
  4854.  Return Codes 
  4855.  
  4856.           None. 
  4857.  
  4858.  
  4859. ΓòÉΓòÉΓòÉ 16. Pen for OS/2 Writing Subsystem Data Structures ΓòÉΓòÉΓòÉ
  4860.  
  4861. This section contains the data structures used within the Pen for OS/2 system 
  4862. extension writing subsystem. 
  4863.  
  4864.  
  4865. ΓòÉΓòÉΓòÉ 16.1. Stroke Data ΓòÉΓòÉΓòÉ
  4866.  
  4867. A stroke buffer is built in real time as points are passed to the system from 
  4868. the digitizer.  The Pen for OS/2 subsystem buffers all points so that none are 
  4869. lost due to the coalescing of mouse moves by the PM system.  The user is 
  4870. notified of the availability of a stroke buffer through the WM_LIFTOFF or 
  4871. WM_STROKE message. It is at this time that the application can retrieve it. 
  4872. After WM_LIFTOFF and WM_STROKE processing, the stroke buffer is marked invalid 
  4873. and can no longer be retrieved. 
  4874.  
  4875. To retrieve the stroke buffer, the application must first query the size 
  4876. (WrtQueryStrokeData) to allocate sufficient storage in which to store it.  It 
  4877. then obtains the stroke buffer through the WrtQueryStrokeData function.  The 
  4878. stroke buffer may be retrieved multiple times, each time specifying different 
  4879. parameters. For example, an application might request the stroke in 
  4880. high-resolution coordinates to ink the stroke in a high-resolution bit map.  It 
  4881. then might request the stroke in window coordinates to ink it on the display. 
  4882.  
  4883. Coordinate data is passed as a POINTL array to accommodate the standard GPI 
  4884. functions. 
  4885.  
  4886. The Pen for OS/2 writing subsystem currently limits the size of the stroke 
  4887. buffer to a maximum 1000 points or a stroke 9 seconds in length.  After 1000 
  4888. points have been buffered, subsequent points are discarded and the 
  4889. WRT_BUFFER_OVERRUN flag is set in the ulEventStatus field of the WRTEVENTDATA 
  4890. structure.  The flag is also set in the stroke buffer header field 
  4891. flStrokeFlags. 
  4892.  
  4893. The Pen for OS/2 stroke data format will accommodate the increased data 
  4894. delivered by original equipment manufacturer device drivers. 
  4895.  
  4896.  typedef struct _STROKEDATA
  4897.    {
  4898.    ULONG          cbStructSize;        // Size of stroke data header
  4899.    ULONG          ulSource;            // See Wrt Event Sources
  4900.    ULONG          ulSeq;               // Sequence number wraps at 4G
  4901.    ULONG          ulResolution;        // Points per inch
  4902.    ULONG          ulSampleRate;        // Points per second
  4903.    RECTL          rclCell;             // Bounding box around stroke
  4904.    ULONG          ulNumPoints;         // Number of points in stroke
  4905.    ULONG          flStrokeFlags;       // Stroke flags    (See SBF_*)
  4906.    ULONG          ulXExtent;           // X extent used to scale coords.
  4907.    ULONG          ulYExtent;           // Y extent used to scale coords.
  4908.    ULONG          ulSensorResolution;  // Resolution of digitizer
  4909.    ULONG          ulSensorXExtent;     // Extent of digitizer X-axis
  4910.    ULONG          ulSensorYExtent;     // Extent of digitizer Y-axis
  4911.    ULONG          ulTimestamp;         // Time stamp of button-down
  4912.    ULONG          ulDevTimestampRes;   // Resolution of device TS in usecs
  4913.    PPOINTL        pXY;                 // Pointer to X/Y POINTL array
  4914.    PAUXDATAINFO   pAuxInfo;            // Pointer to AUXDATAINFO
  4915.    PAUXSTROKEDATA pAuxData;            // Pointer to AUXPOINTDATA
  4916.    ULONG          ulUser1;             // For program use
  4917.    ULONG          ulUser2;             // For program use
  4918.    struct _STROKEDATA *psdFwd;         // Use: Forward chain pointer
  4919.    struct _STROKEDATA *psdBack;        // Use: Backward chain pointer
  4920.    } STROKEDATA;
  4921.  
  4922.  // Note:  ulSensorResolution, ulSensorXExtent and ulSensorYExtent
  4923.  //        are only meaningful if the QSD_STANDARDIZED_RES option
  4924.  //        was specified.  This is so the original resolution information
  4925.  //        can be recovered at a later time.
  4926.  //
  4927.  //        pAuxInfo and pAuxData are only meaningful if option auxiliary
  4928.  //        data was requested.
  4929.  //
  4930. /* Stroke Buffer Flags */
  4931. #define SBF_SCREEN          0x00000001  // 1=Screen coords 0=hi res coord
  4932. #define SBF_SCALE           0x00000001  // 1=Scaled coords 0=hi res coord
  4933. #define SBF_INKED           0x00000002  // Stroke was inked
  4934. #define SBF_INK_NOT_REMOVED 0x00000004  // Stroke left inked
  4935. #define SBF_TD_LO_SAME_HWND 0x00000008  // Touchdown/liftoff in same hwnd
  4936. #define SBF_STROKE_OUTSIDE_HWND 0x00000010 // Stroke left the boundaries
  4937. #define SBF_POINTS_LOST     0x00000040  // Points were lost (HW overrun)
  4938. #define SBF_BUFFER_OVERRUN  0x00000080  // Points were lost (SB overrun)
  4939. #define SBF_MBUTTON_MASK    0x00001C00  // Mask for isolating mouse button
  4940. #define SBF_TAP             0x00002000  // Stroke was a tap
  4941. #define SBF_DBLTAP          0x00004000  // Stroke was a double tap
  4942. #define SBF_NEGATIVE_COORDS 0x80000000  // Contains negative window coord
  4943.  
  4944. Stroke Data Format 
  4945.  
  4946.  
  4947. ΓòÉΓòÉΓòÉ 16.2. Auxiliary Digitizer Data ΓòÉΓòÉΓòÉ
  4948.  
  4949. An application may request additional point-stream data associated with the 
  4950. stroke when retrieving the stroke buffer.  This device-dependent data provides 
  4951. Z-axis data and time stamps for application use. The auxiliary data may be 
  4952. queried either on a stroke or point basis.  Since the auxiliary data of a 
  4953. stroke can consume large amounts of storage, a dynamic format is used so that 
  4954. an application can retrieve only those fields that are needed.  When the data 
  4955. is retrieved on a point-by-point basis, a complete auxiliary data structure is 
  4956. passed to the application and the application is free to retain the data fields 
  4957. of interest. 
  4958.  
  4959.  
  4960. ΓòÉΓòÉΓòÉ 16.2.1. Auxiliary Stroke Data Structure ΓòÉΓòÉΓòÉ
  4961.  
  4962. To accommodate applications needing device-specific data and reduce storage 
  4963. requirements for applications needing only partial device data, the auxiliary 
  4964. stroke data structure is defined as a dynamic structure whose format is 
  4965. controlled by the requesting application. 
  4966.  
  4967.   Example Stroke Buffer          Auxiliary Data Description Array
  4968.  
  4969.                                       00000048  Size of AuxDataInfo
  4970.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ               . 00000003  Number of elements
  4971.     Γöé  Stroke Data  Γöé             .   00000008  Size of auxiliary data packet
  4972.     Γöé    Header     Γöé           .     00000000  Description (Time stamp)
  4973.     Γöé               Γöé         .       00000000  Offset
  4974.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ       .         00000004  Size
  4975.     Γöé      X/Y      Γöé     .           00000001  Description (Flags)
  4976.     Γöé   Coordinate  Γöé   .             00000004  Offset
  4977.     Γöé     Array     Γöé .               00000002  Size
  4978.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ                 00000008  Description (User)
  4979.     Γöé   Auxiliary   Γöé           . . . 00000006  Offset
  4980.     Γöé     Data      Γöé         .       00000002  Size
  4981.     Γöé  Information  Γöé . . . .
  4982.     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ . . . .    Auxiliary Data Array (for each X/Y coordinate)
  4983.     Γöé               Γöé         .
  4984.     Γöé   Auxiliary   Γöé           . . . 000348F8  AuxData[0]
  4985.     Γöé     Data      Γöé                 0022
  4986.     Γöé     Array     Γöé                 0000
  4987.     Γöé               Γöé                 00034919  AuxData[1]
  4988.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ .               0022
  4989.                         .             0000
  4990.                           .           0003493A  AuxData[2]
  4991.                             .         0022
  4992.                               .       0000
  4993.                                 .     0003495B  AuxData[3]
  4994.                                   .   0022
  4995.                                     . 0000
  4996.                                        *
  4997.  
  4998. Example Auxiliary Stroke Data Description Format 
  4999.  
  5000.  typedef struct  _AUXDATADESC   //add
  5001.    {
  5002.    ULONG          id;          // Auxiliary data type identity (See ADT_*)
  5003.    ULONG            offset;       // Field offset
  5004.    ULONG            cb;           // Auxiliary data type byte count
  5005.    } AUXDATADESC;
  5006.  typedef AUXDATADESC *PAUXDATADESC;
  5007.  
  5008. /* AUXDATADESC.id Equates  */
  5009. #define ADT_TIMESTAMP   0        // Point time stamp
  5010. #define ADT_FLAGS       1        // Point flags
  5011. #define ADT_SCREENZ     2        // Normalized Z-axis value
  5012. #define ADT_DEVZ        3        // Device Z-axis value
  5013. #define ADT_ANGLE       4        // Stylus angle to XY
  5014. #define ADT_ROTATION    5        // Stylus rotation
  5015. #define ADT_BUTTON      6        // Button status
  5016. #define ADT_USER        7        // For program use
  5017. #define ADT_OEM         16       // OEM specific data
  5018.  
  5019.  typedef struct  _AUXDATAINFO         // adi
  5020.    {
  5021.    ULONG          cbAuxDesc;          // Size of auxiliary
  5022.                                       //   description structure
  5023.    ULONG          ulNumElements;      // Number of data elements in
  5024.                                       //   auxiliary data packet
  5025.    ULONG          ulAuxSize;          // Length of auxiliary data packet
  5026.                                       // Size of auxiliary
  5027.                                       //   description structure
  5028.    AUXDATADESC    addAuxDesc[1];      // Array of descriptors
  5029.    } AUXDATAINFO;
  5030.  typedef AUXDATAINFO *PAUXDATAINFO;   // padi
  5031.  
  5032.  
  5033.  
  5034.  typedef struct  _AUXSTROKEDATA       // asd
  5035.    {
  5036.   UCHAR          bAuxData[1][1];      // Auxiliary stroke data
  5037.   } AUXSTROKEDATA;
  5038.  typedef AUXSTROKEDATA *PAUXSTROKEDATA; // pasd
  5039.  
  5040. Auxiliary Stroke Data Format 
  5041.  
  5042.  
  5043. ΓòÉΓòÉΓòÉ 16.2.2. Auxiliary Point Data Structure ΓòÉΓòÉΓòÉ
  5044.  
  5045. Auxiliary data may also be queried point-by-point in real time while processing 
  5046. WM_MOUSEMOVE or WM_SENSOR_MOVE messages in the window procedure.  To expedite 
  5047. the retrieval of point auxiliary data, the data is presented as a fixed 
  5048. structure instead of a dynamic structure as when retrieved by strokes.  A call 
  5049. to WrtQueryLocatorCaps will tell your application which fields are valid and 
  5050. supported by the device.  Before querying point data, the cbStructSize field 
  5051. must be initialized. 
  5052.  
  5053.  typedef struct  _AUXPOINTDATA           // apd
  5054.    {
  5055.    USHORT         cbStructSize;          // Structure size
  5056.    ULONG          ulTimestamp;           // Point time stamp
  5057.    USHORT         usFlags;               // Point flags
  5058.    USHORT         usUser;                // For program use
  5059.    SHORT          sScrZ;                 // Normalize Z-axis value
  5060.                                          //  (4K to -4k)
  5061.                                          // Height   0 to 4096
  5062.                                          // Pressure 0 to -4096
  5063.    SHORT         sDevZ;                  // Device Z-axis value is
  5064.                                          //  device dependent.  See
  5065.                                          //  locator caps structure.
  5066.    SHORT         sAngle;                 // Pen angle to XY
  5067.    SHORT         sRotation;              // Pen rotation
  5068.    USHORT        usButton;               // Button status
  5069.    UCHAR         OEM[8];                 // Original equipment
  5070.                                          //  manufacturer specific data
  5071.    } AUXPOINTDATA;
  5072.  typedef AUXPOINTDATA *PAUXPOINTDATA;    // papd
  5073.  
  5074. /* AUXPOINTDATA.usFlags Equates */
  5075. #define APD_MODEMASK         0x0003   Mode mask (see below)
  5076. #define APD_IDLEMODE              0   Stylus is idle
  5077. #define APD_PROXMODE              1   Stylus is in proximity
  5078. #define APD_CONTACTMODE           2   Stylus is in contact
  5079. #define APD_FILTERED         0x0004   Mouse event not passed to PM
  5080.  
  5081. Auxiliary Point Data Format 
  5082.  
  5083.  
  5084. ΓòÉΓòÉΓòÉ 16.3. WRT Event Data Structure ΓòÉΓòÉΓòÉ
  5085.  
  5086. This data structure is built on every mouse-button transition and 
  5087. exit-proximity event.  The structure is passed to the target window through a 
  5088. pointer in qmsg.mp2 for the following messages: 
  5089.  
  5090.  o WM_TOUCHDOWN 
  5091.  o WM_LIFTOFF 
  5092.  o WM_STROKE 
  5093.  o WM_TAP 
  5094.  o WM_DTAP 
  5095.  o WM_PAUSE_TIMEOUT 
  5096.  o WM_EXIT_PROXIMITY 
  5097.  o WM_SENSOR_MOVE 
  5098.  
  5099.  This information can also be retrieved during WM_MOUSEMOVE processing by 
  5100.  calling WrtQueryEventData. 
  5101.  
  5102.    typedef struct  _WRTEVENTDATA   // ed
  5103.      {
  5104.      ULONG     cbStructSize;       // Structure size
  5105.      USHORT    usKCFlags;          // KC flags from mouse button event
  5106.                                    //   (See PM's KC_* flags)
  5107.      USHORT    usHitTest;          // Hit test from mouse-button event
  5108.      ULONG     flEventStatus;      // Event status            (See WRT_*)
  5109.      POINTL    ptlDisplay;         // Display X/Y coordinate
  5110.      POINTL    ptlSensor;          // Digitizer X/Y coordinate
  5111.      POINTL    ptlStandard;        // Standard X/Y coordinate
  5112.      ULONG     ulStrokeSeq;        // Stroke seq  (Only on liftoff)
  5113.      ULONG     ulStrokeSize;       // Stroke size (Only on liftoff)
  5114.      ULONG     ulLocatorID;        // Locator device ID
  5115.      ULONG     ulLocatorType;      // Locator Type            (See LT_*)
  5116.      ULONG     ulLocatorFlags;     // Locator Flags           (See LTYPE_*)
  5117.      ULONG     ulValidityFlags;    // Aux data validity flags (See ADF_*)
  5118.      ULONG     ulButtonStatus;     // Button status
  5119.      HWND      hwndUnderPtr;       // Hwnd under pointer
  5120.      } WRTEVENTDATA;
  5121.    typedef WRTEVENTDATA *PWRTEVENTDATA; // ped
  5122.  
  5123.   /* WRTEVENTDATA.ulEventStatus Values */
  5124.   #define WRT_STROKE_AVAIL     0x00000001  // Stroke is avail for retrieval
  5125.   #define WRT_INKING           0x00000002  // Stroke was inked
  5126.                                            // Note: The next three flags
  5127.                                            //  are only valid if the Stroke
  5128.                                            //  Avail bit is set.
  5129.   #define WRT_INK_NOT_REMOVED  0x00000004  // Stroke left inked as requested
  5130.   #define WRT_TD_LO_SAME_HWND  0x00000008  // Touchdown/liftoff in same hwnd
  5131.   #define WRT_STROKE_OUTSIDE_HWND 0x00000010 // Stroke left the boundaries
  5132.                                              // of the TD window's hwnd.
  5133.   #define WRT_POINTS_LOST      0x00000040  // Points were lost (HW overrun)
  5134.   #define WRT_BUFFER_OVERRUN   0x00000080
  5135.                                      // Points lost (Stroke buffer overrun)
  5136.   #define WRT_NON_DEVICE_EVENT 0x00000100
  5137.                                      // Mouse event not generated by device
  5138.   #define WRT_MBUTTON_MASK     0x00001C00
  5139.                                      // Mask for isolating mouse button
  5140.   #define WRT_MBUTTON1         0x00000400  // Mouse button 1
  5141.   #define WRT_MBUTTON2         0x00000800  // Mouse button 2
  5142.   #define WRT_MBUTTON3         0x00001000  // Mouse button 3
  5143.   #define WRT_TAP              0x00002000  // Stroke is a tap
  5144.   #define WRT_DBLTAP           0x00004000  // Stroke is a double tap
  5145.  
  5146.  Event Data Structure Format 
  5147.  
  5148.  
  5149. ΓòÉΓòÉΓòÉ 16.4. System Capabilities Data Structure ΓòÉΓòÉΓòÉ
  5150.  
  5151. This data structure provides to the aware application pertinent information on 
  5152. devices attached to the system.  It may be queried through the function 
  5153. WrtQuerySystemCaps. 
  5154.  
  5155.  typedef struct _WRTSYSTEMINFO    // si
  5156.    {
  5157.    ULONG       cbStructSize;      // Structure size
  5158.    ULONG       ulDisplayXPels;    // Number of display X pixels
  5159.    ULONG       ulDisplayYPels;    // Number of display Y pixels
  5160.    ULONG       ulDisplayXRes;     // Display pels per inch X-axis
  5161.    ULONG       ulDisplayYRes;     // Display pels per inch Y-axis
  5162.    ULONG       ulStandardXRes;    // Standardized dots per inch X-axis
  5163.    ULONG       ulStandardYRes;    // Standardized dots per inch Y-axis
  5164.    ULONG       ulNumDrivers;      // Number of registered pen drivers
  5165.    ULONG       ulNumLocators;     // Number of registered pointing devices
  5166.    ULONG       ulNumButtons;      // Number of registered button devices
  5167.    ULONG       ulNumDisplays;     // Number of registered display devices
  5168.    } WRTSYSTEMINFO;
  5169.  typedef WRTSYSTEMINFO *PWRTSYSTEMINFO;  //psi
  5170.  
  5171. System Capabilities Information Format 
  5172.  
  5173.  
  5174. ΓòÉΓòÉΓòÉ 16.5. Locator Device Capabilities Data Structure ΓòÉΓòÉΓòÉ
  5175.  
  5176. This data structure provides to the aware application pertinent information on 
  5177. locator devices.  It may be queried through the function WrtQueryLocatorCaps. 
  5178.  
  5179.  typedef struct _WRTLOCATORDEVINFO   // ldi
  5180.    {
  5181.    ULONG  cbStructSize;       // Structure size
  5182.    ULONG  ulLocatorID;        // ID of pointing device
  5183.    ULONG  ulLocatorType;      // Type of pointing device
  5184.    ULONG  ulLocatorFlags;     // Pointing device flags
  5185.    ULONG  ulValidityFlags;    // Auxiliary data validity flags
  5186.    ULONG  ulOEMValidityCnt;   // Count of valid original equipment
  5187.                               //     manufacturer bytes
  5188.    ULONG  ulSensorHeight;     // Digitizer height in thousandths of inches
  5189.    ULONG  ulSensorWidth;      // Digitizer width in thousandths of inches
  5190.    ULONG  ulNumMouButtons;    // Number of mouse buttons emulated
  5191.    ULONG  ulNumButtons;       // Number of buttons on pointing device
  5192.    ULONG  ulButtonMask;       // Mask giving IDs of barrel buttons
  5193.    ULONG  ulSensorXpts;       // Number of digitizer X-axis units
  5194.    ULONG  ulSensorYpts;       // Number of digitizer Y-axis units
  5195.    ULONG  ulSensorZptsP;      // Number of digitizer Z-axis pressure units
  5196.    ULONG  ulSensorZptsH;      // Number of digitizer Z-axis height units
  5197.    ULONG  ulSensorXres;       // Digitizer X resolution (points/inch)
  5198.    ULONG  ulSensorYres;       // Digitizer Y resolution (points/inch)
  5199.    ULONG  ulStandardXpts;     // Number of standardized X-axis units
  5200.    ULONG  ulStandardYpts;     // Number of Standardized Y-axis units
  5201.    ULONG  ulSampleRate;       // Sample rate of pen
  5202.    ULONG  ulMaxSampleRate;    // Maximum possible point rate supported
  5203.    ULONG  ulTimestampRes;     // Device time stamp resolution in microsecs
  5204.    UCHAR  pszDriverName[32];  // Name of controlling device driver
  5205.    UCHAR  pszDeviceName[32];  // Name of pointing device
  5206.    } WRTLOCATORDEVINFO;
  5207.  typedef WRTLOCATORDEVINFO *PWRTLOCATORDEVINFO;  //pldi
  5208.  
  5209. Locator Device Capabilities Information Structure 
  5210.  
  5211.  
  5212. /* WRTLOCATORDEVINFO.ulLocatorType Values */
  5213. #define LT_MOUSE              0x00000001 // Mouse
  5214. #define LT_PEN                0x00000002 // Stylus
  5215. #define LT_TOUCH              0x00000003 // Finger touch
  5216. #define LT_OTHER              0x00000004 // Other misc pointing device
  5217.  
  5218. /* WRTLOCATORDEVINFO.ulLocatorFlags Values */
  5219. #define LTYPE_TETHERED        0x00000001 // Stylus is tethered
  5220. #define LTYPE_PROXIMITY_EVENT 0x00000002 // Proximity events reported
  5221. #define LTYPE_TILT            0x00000004 // Device reports angle to XY
  5222. #define LTYPE_ROTATION        0x00000008 // Device reports rotation
  5223. #define LTYPE_OEMDATA         0x00000010 // Device reports extra OEM data
  5224. #define LTYPE_TIMESTAMP     0x00000020 // Device reports hi-res time stamp
  5225. #define LTYPE_PRESSURE        0x00000040 // Device reports pressure
  5226. #define LTYPE_HEIGHT          0x00000080 // Device reports height
  5227. #define LTYPE_PIN             0x00000100 // Pen contains PIN
  5228. #define LTYPE_BATTERY         0x00000800 // Pen contains battery
  5229. #define LTYPE_ERASURE         0x00000200 // Erasure end of stylus reported
  5230. #define LTYPE_INTEG_SENSOR    0x00000400 // Sensor integrated in display
  5231. #define LTYPE_RELATIVE        0x00001000 // Relative pointing device
  5232.                                          // Sensor coords from relative
  5233.                                          // devices are offsets from
  5234.                                          // last reported point
  5235. #define LTYPE_ABSOLUTE        0x00002000 // Absolute pointing device
  5236.  
  5237.  
  5238. /* WRTLOCATORDEVINFO.ulValidityFlags Values */
  5239. #define ADF_TIMESTAMP         0x00000001 // Point time stamp
  5240. #define ADF_FLAGS             0x00000002 // Point flags
  5241. #define ADF_SCREENZ           0x00000004 // Normalized Z-axis
  5242. #define ADF_DEVZ              0x00000008 // Device Z
  5243. #define ADF_ANGLE             0x00000010 // Stylus angle to XY
  5244. #define ADF_ROTATION          0x00000020 // Stylus barrel rotation
  5245. #define ADF_BUTTON            0x00000040 // Button status
  5246. #define ADF_OEM               0x00000080 // OEM specific data byte count
  5247. #define ADF_OEM_COUNT_MASK    0x000F0000 // OEM valid count
  5248. #define ADF_USER              0x00000100 // This bit is not HW related and
  5249.                                          // is always set. For appl use.
  5250. #define ADF_ALL               0X000001FF // All fields
  5251.  
  5252. WRTLOCATORDEVINFO 
  5253.  
  5254.  
  5255. ΓòÉΓòÉΓòÉ 16.6. Button Device Capabilities Data Structure ΓòÉΓòÉΓòÉ
  5256.  
  5257. This data structure provides information on buttons that are part of locator or 
  5258. digitizer devices. The function WrtQueryButtonCaps will provide the structure 
  5259. with the pertinent information. 
  5260.  
  5261.  typedef struct _WRTBUTTONDEVINFO    // bdi
  5262.    {
  5263.    ULONG     cbStructSize;           // Structure size
  5264.    ULONG     ulButtonID;             // ID of button device
  5265.    ULONG     ulNumButtons;           // Number of configured buttons
  5266.    ULONG     ulButtonMask;           // 1=barrel, 0=nonbarrel button
  5267.    UCHAR     pszDriverName[32];      // Name of controlling device driver
  5268.    UCHAR     pszDeviceName[32];      // Name of button device
  5269.    } WRTBUTTONDEVINFO;
  5270.  typedef WRTBUTTONDEVINFO *PWRTBUTTONDEVINFO;   //pbdi
  5271.  
  5272. Button Device Capabilities Information Structure 
  5273.  
  5274.  
  5275. ΓòÉΓòÉΓòÉ 16.7. Display Device Capabilities Data Structure ΓòÉΓòÉΓòÉ
  5276.  
  5277. This data structure provides information on displays that are part of digitizer 
  5278. devices. The function WrtQueryDisplayCaps will provide the structure with the 
  5279. pertinent information. 
  5280.  
  5281.  typedef struct _WRTDISPLAYDEVINFO   // ddi
  5282.    {
  5283.    ULONG     cbStructSize;           // Structure size
  5284.    ULONG     ulDisplayID;            // ID of display device
  5285.    ULONG     ulDisplayType;          // Type of display
  5286.    ULONG     ulDisplayXPels;         // Number of display X pixels
  5287.    ULONG     ulDisplayYPels;         // Number of display Y pixels
  5288.    ULONG     ulDisplayXRes;          // Display pels per inch X-axis
  5289.    ULONG     ulDisplayYRes;          // Display pels per inch Y-axis
  5290.    ULONG     ulDisplayHeight;        // Height of display in thousandths
  5291.    ULONG     ulDisplayWidth;         // Width of display in thousandths
  5292.    UCHAR     pszDriverName[32];      // Name of controlling device driver
  5293.    UCHAR     pszDeviceName[32];      // Name of display device
  5294.    } WRTDISPLAYINFO;
  5295.  typedef WRTDISPLAYDEVINFO *PWRTDISPLAYDEVINFO;   //pddi
  5296.  
  5297.  /* WRTDISPLAYDEVINFO.ulDisplayType Values */
  5298.  #define DISPTYPE_LCD        0x0001   // 1 - LCD,      0 - not LCD
  5299.  #define DISPTYPE_CRT        0x0002   // 1 - CRT,      0 - not CRT
  5300.  #define DISPTYPE_BLANKING   0x0004   // Display performs blanking
  5301.  #define DISPTYPE_COLOR      0x0008   // 1 - Color,    0 - Monochrome
  5302.  #define DISPTYPE_ATTACHED   0x0010   // 1 - Attached, 0 - Portable
  5303.  #define DISPTYPE_NO_KBD     0x0020   // No Keyboard Attached
  5304.  #define DISPTYPE_BATTERY    0x0040   // 1 - Battery,  0 - AC power
  5305.  #define DISPTYPE_SPEAKER    0x0080   // 1 - Speaker integrated
  5306.  #define DISPTYPE_MICROPHONE 0x0100   // 1 - Microphone integrated
  5307.  
  5308. Display Device Capabilities Information Structure 
  5309.  
  5310.  
  5311. ΓòÉΓòÉΓòÉ 17. Recognition Event Delivery Subsystem API ΓòÉΓòÉΓòÉ
  5312.  
  5313. This section contains the APIs used to help control the delivery of recognition 
  5314. events to applications.  The following is a list of the available APIs: 
  5315.  
  5316.  o RedDeregisterRecoCommand 
  5317.  
  5318.  o RedQueryRecoCommand 
  5319.  
  5320.  o RedQueryRecoHandle 
  5321.  
  5322.  o RedQueryRecoSubsystem 
  5323.  
  5324.  o RedReadObjectEventMap 
  5325.  
  5326.  o RedRecoDataFromEnv 
  5327.  
  5328.  o RedRecoIDFromName 
  5329.  
  5330.  o RedRecoNameFromID 
  5331.  
  5332.  o RedRegisterRecoCommand 
  5333.  
  5334.  o RedWriteObjectEventMap 
  5335.  
  5336.  
  5337. ΓòÉΓòÉΓòÉ 17.1. RedDeregisterRecoCommand ΓòÉΓòÉΓòÉ
  5338.  
  5339.  Syntax   rc = RedDeregisterRecoCommand(HWND cmdhwnd); 
  5340.  
  5341.  Purpose 
  5342.  
  5343.           This function deregisters a recognition command handler that was 
  5344.           registered through RedRegisterRecoCommand. 
  5345.  
  5346.  Parameters 
  5347.  
  5348.           cmdhwnd (HWND) - input 
  5349.                     The window handle of the command handler to be 
  5350.                     deregistered. 
  5351.  
  5352.           rc (APIRET) - return 
  5353.  
  5354.  Returns 
  5355.  
  5356.           Return codes indicating success or type of failure: 
  5357.  
  5358.           RED_NO_ERROR                  Successful. 
  5359.  
  5360.           REDERR_NOT_FOUND              The command handler registration was 
  5361.                                         not found. 
  5362.  
  5363.  Remarks 
  5364.  
  5365.           This function does not need to be called from the same process that 
  5366.           registered the command handler. 
  5367.  
  5368.  
  5369. ΓòÉΓòÉΓòÉ 17.2. RedQueryRecoCommand ΓòÉΓòÉΓòÉ
  5370.  
  5371.  Syntax   cmdhwnd = RedQueryRecoCommand(PSZ cmdnamep); 
  5372.  
  5373.  Purpose 
  5374.  
  5375.           This function is used to query the window handle of a registered 
  5376.           command handler. 
  5377.  
  5378.  Parameters 
  5379.  
  5380.           cmdnamep (PSZ) - input 
  5381.                     A pointer to the null-terminated string giving the name of 
  5382.                     the recognition command handler being queried. 
  5383.  
  5384.           cmdhwnd (HWND) - return 
  5385.                     The window handle of the registered command handler to be 
  5386.                     deregistered. 
  5387.  
  5388.  Returns 
  5389.  
  5390.           The window handle the command handler named by cmdnamep registered 
  5391.           through RedRegisterRecoCommand is returned.  If there is no 
  5392.           registered command handler for cmdnamep, NULLHANDLE is returned. 
  5393.  
  5394.  Remarks 
  5395.  
  5396.           The primary use of this function is to give a recognition command 
  5397.           handler a way to determine if there is a copy of the command handler 
  5398.           already running and if there is, a way to communicate with the 
  5399.           previously running copy. 
  5400.  
  5401.           If the name of a built-in command is given, NULLHANDLE is returned. 
  5402.  
  5403.  
  5404. ΓòÉΓòÉΓòÉ 17.3. RedQueryRecoHandle ΓòÉΓòÉΓòÉ
  5405.  
  5406.  Syntax 
  5407.  
  5408.                     rc = RedQueryRecoHandle(PSZ pszRecoSubsystem, PHRECO hReco,
  5409.                             ULONG * pEventCount);
  5410.  
  5411.  Purpose 
  5412.  
  5413.           This function is used to query the handle of a registered recognition 
  5414.           subsystem. 
  5415.  
  5416.  Parameters 
  5417.  
  5418.           pszRecoSubsystem (PSZ) - input 
  5419.                     Pointer to the buffer that contains the recognition 
  5420.                     subsystem name.  The name is case sensitive. 
  5421.  
  5422.           hReco (PHRECO) - output 
  5423.                     Recognition subsystem handle. 
  5424.  
  5425.           pEventCount (ULONG *) - output 
  5426.                     Pointer to the ULONG that will receive the count of 
  5427.                     registered events for the subsystem. 
  5428.  
  5429.           rc (APIRET) - return 
  5430.  
  5431.  Returns 
  5432.  
  5433.           Return codes indicating success or type of failure: 
  5434.  
  5435.           RED_NO_ERROR                            Successful. 
  5436.  
  5437.           REDERR_NO_MEMORY                        There was insufficient memory 
  5438.                                                   available to process the 
  5439.                                                   request. 
  5440.  
  5441.           REDERR_INVALID_PARM                     One or more of the parameters 
  5442.                                                   passed is invalid. 
  5443.  
  5444.           REDERR_NOT_ACTIVE                       RED subsystem is not active. 
  5445.  
  5446.           REDERR_RECO_NAME_TOO_LONG               Name longer than 12 
  5447.                                                   characters 
  5448.  
  5449.           REDERR_INVALID_RECO_NAME                Name was null string 
  5450.  
  5451.           REDERR_RECO_SUBSYS_NOT_REQ              Subsystem not registered. 
  5452.  
  5453.  Remarks 
  5454.  
  5455.           This call maps a recognition subsystem name to the subsystem handle. 
  5456.           The returned handle will be zero if an error occurs.  The number of 
  5457.           registered events is also returned. 
  5458.  
  5459.           The handle for the Gesture subsystem is retrieved by having the 
  5460.           pszRecoSubsystem parameter point to a string whose value is 
  5461.           "Gesture". 
  5462.  
  5463.  
  5464. ΓòÉΓòÉΓòÉ 17.4. RedQueryRecoSubsystem ΓòÉΓòÉΓòÉ
  5465.  
  5466.  Syntax 
  5467.  
  5468.                     rc = RedQueryRecoSubsystem(HRECO hReco, PSZ pszRecoSubsystem,
  5469.                             ULONG pEventCount);
  5470.  
  5471.  Purpose 
  5472.  
  5473.           This function is used to query the name of a registered recognition 
  5474.           subsystem from a recognition handle. 
  5475.  
  5476.  Parameters 
  5477.  
  5478.           hReco (HRECO) - input 
  5479.                     Recognition subsystem handle. 
  5480.  
  5481.           pszRecoSubsystem (PSZ) - output 
  5482.                     Pointer to the buffer that will be filled in with the name. 
  5483.                     This buffer must be at least 13 bytes long. 
  5484.  
  5485.           pEventCount (ULONG) - output 
  5486.                     Pointer to the ULONG that will receive the count of 
  5487.                     registered events for the subsystem. 
  5488.  
  5489.           rc (APIRET) - return 
  5490.  
  5491.  Returns 
  5492.  
  5493.           Return codes indicating success or type of failure: 
  5494.  
  5495.           RED_NO_ERROR                            Successful. 
  5496.  
  5497.           REDERR_NO_MEMORY                        There was insufficient memory 
  5498.                                                   available to process the 
  5499.                                                   request. 
  5500.  
  5501.           REDERR_INVALID_PARM                     One or more of the parameters 
  5502.                                                   passed is invalid. 
  5503.  
  5504.           REDEER_NOT_ACTIVE                       RED subsystem is not active. 
  5505.  
  5506.           REDERR_RECO_SUBSYS_NOT_REG              Subsystem not registered. 
  5507.  
  5508.  Remarks 
  5509.  
  5510.           This call maps a recognition handle to the name of the subsystem. The 
  5511.           number of registered events is also returned in the call. 
  5512.  
  5513.  
  5514. ΓòÉΓòÉΓòÉ 17.5. RedReadObjectEventMap ΓòÉΓòÉΓòÉ
  5515.  
  5516.  Syntax   rc = RedReadObjectEventMap(HOBJECT hobj, PSZ fnamep); 
  5517.  
  5518.  Purpose 
  5519.  
  5520.           This function reads recognition event mappings from a disk file 
  5521.           located by RedReadObjectEventMap and merges it with the current set 
  5522.           of mappings for the object.  If the file and current mappings contain 
  5523.           a mapping for the same object, the mapping from the file will 
  5524.           overwrite the current mapping. 
  5525.  
  5526.  Parameters 
  5527.  
  5528.           hobj (HOBJECT) - input 
  5529.                     The (persistent) object handle of the object that will 
  5530.                     receive the object mappings stored in the file given by 
  5531.                     fnamep. 
  5532.  
  5533.           fnamep (PSZ) - input 
  5534.                     Pointer to the name of the file from which the object 
  5535.                     mappings should be read. 
  5536.  
  5537.           rc (APIRET) - return 
  5538.  
  5539.  Returns 
  5540.  
  5541.           Return codes indicating success or type of failure: 
  5542.  
  5543.           RED_NO_ERROR                  Successful. 
  5544.  
  5545.           REDERR_NO_MEMORY              There was insufficient memory available 
  5546.                                         to process the request. 
  5547.  
  5548.           REDERR_INVALID_PARM           One or more of the parameters passed is 
  5549.                                         invalid. 
  5550.  
  5551.           Other                         A base OS/2 error.  If an I/O error 
  5552.                                         occurs, the appropriate base OS/2 error 
  5553.                                         will be returned. 
  5554.  
  5555.  Remarks 
  5556.  
  5557.           This function will do no handling of critical or disk change errors. 
  5558.           The default OS/2 handling of these errors will be used by this 
  5559.           function. 
  5560.  
  5561.  
  5562. ΓòÉΓòÉΓòÉ 17.6. RedRecoDataFromEnv ΓòÉΓòÉΓòÉ
  5563.  
  5564.  Syntax   rc = RedRecoDataFromEnv(PRECODATA prdEnv, PULONG pulDataLen); 
  5565.  
  5566.  Purpose 
  5567.  
  5568.           This function builds a recognition data block from the Pen for OS/2 
  5569.           environment variables. 
  5570.  
  5571.  Parameters 
  5572.  
  5573.           prdEnv (PRECODATA) - input/output 
  5574.                     Pointer to RECODATA structure to contain the data. 
  5575.  
  5576.           pulDataLen (PULONG) - input/output 
  5577.                     Pointer to a ULONG that on: 
  5578.  
  5579.              input     Holds the size of the buffer pointed to by prdEnv 
  5580.              output    The ULONG pointed to by pulDataLen contains the size in 
  5581.                        bytes of the data copied into prdEnv or the size of the 
  5582.                        buffer needed to retrieve the RECODATA structure and the 
  5583.                        strings pointed to by the RECODATA fields:  pszCommand, 
  5584.                        pszCmdArgs, and pszPrefixCmd if rc is 
  5585.                        REDERR_BUF_TOO_SMALL. 
  5586.  
  5587.           rc (APIRET) - return 
  5588.  
  5589.  Returns 
  5590.  
  5591.           Return codes indicating success or type of failure: 
  5592.  
  5593.           RED_NO_ERROR                  Successful. 
  5594.  
  5595.           REDERR_NO_MEMORY              There was insufficient memory available 
  5596.                                         to process the request. 
  5597.  
  5598.           REDERR_INVALID_PARM           One or more of the parameters passed is 
  5599.                                         invalid. 
  5600.  
  5601.           REDERR_NOT_PENPM_ENV          Pen for OS/2 environment variables not 
  5602.                                         found. 
  5603.  
  5604.           REDERR_BUF_TOO_SMALL          Buffer is not large enough to contain 
  5605.                                         full RECODATA structure. 
  5606.  
  5607.  Remarks 
  5608.  
  5609.           An unsuccessful return code from this function indicates that the 
  5610.           program was not started through a recognition event. 
  5611.  
  5612.           This function is generally used by programs that are aware of the Pen 
  5613.           for OS/2 environment, but that were not previously started and 
  5614.           registered through RedRegisterRecoCommand. 
  5615.  
  5616.           The returned data is equivalent to the RECODATA structure whose 
  5617.           pointer is passed in mp2 parameter of a WM_RECO_COMMAND message. 
  5618.  
  5619.           Note:  If the prdEnv parameter is NULL, then no error will be 
  5620.                  returned and the ULONG pointed to by the pulDataLen parameter 
  5621.                  will contain the size of the buffer needed to retrieve the 
  5622.                  RECODATA structure and the three strings pointed to be the 
  5623.                  RECODATA fields:  pszCommand, pszCmdArgs, and pszPrefixCmd. 
  5624.  
  5625.  
  5626. ΓòÉΓòÉΓòÉ 17.7. RedRecoIDFromName ΓòÉΓòÉΓòÉ
  5627.  
  5628.  Syntax 
  5629.  
  5630.                     rc = RedRecoIDFromName(HRECO hReco, PSZ pszEventName,
  5631.                             PRECOID peventID);
  5632.  
  5633.  Purpose 
  5634.  
  5635.           This function is used to query a recognition event ID from a 
  5636.           recognition event name. 
  5637.  
  5638.  Parameters 
  5639.  
  5640.           hReco (HRECO) - input 
  5641.                     Recognition subsystem handle. 
  5642.  
  5643.           pszEventName (PSZ) - input 
  5644.                     Pointer to the buffer that contains the event name.  The 
  5645.                     event name is case sensitive. 
  5646.  
  5647.           peventID (PRECOID) - output 
  5648.                     Event ID. 
  5649.  
  5650.           rc (APIRET) - return 
  5651.  
  5652.  Returns 
  5653.  
  5654.           Return codes indicating success or type of failure: 
  5655.  
  5656.           RED_NO_ERROR                            Successful. 
  5657.  
  5658.           REDERR_NO_MEMORY                        There was insufficient memory 
  5659.                                                   available to process the 
  5660.                                                   request. 
  5661.  
  5662.           REDERR_INVALID_PARM                     One or more of the parameters 
  5663.                                                   passed is invalid. 
  5664.  
  5665.           REDEER_NOT_ACTIVE                       RED subsystem is not active. 
  5666.  
  5667.           REDERR_RECO_SUBSYS_NOT_REG              Subsystem not registered. 
  5668.  
  5669.           REDEER_EVENT_NAME_TOO_LONG              Event name longer than 12 
  5670.                                                   characters. 
  5671.  
  5672.           REDEER_INVALID_EVENT_NAME               Event name was null string. 
  5673.  
  5674.           REDEER_EVENT_NAME_NOT_REG               Event name not registered. 
  5675.  
  5676.  Remarks 
  5677.  
  5678.           This call translates an event name into the event ID. 
  5679.  
  5680.  
  5681. ΓòÉΓòÉΓòÉ 17.8. RedRecoNameFromID ΓòÉΓòÉΓòÉ
  5682.  
  5683.  Syntax 
  5684.  
  5685.                     rc = RedRecoNameFromID(HRECO hReco, RECOID eventID,
  5686.                             PSZ pszEventID);
  5687.  
  5688.  Purpose 
  5689.  
  5690.           This function is used to query a recognition event name from a 
  5691.           recognition event ID. 
  5692.  
  5693.  Parameters 
  5694.  
  5695.           hReco (HRECO) - input 
  5696.                     Recognition subsystem handle. 
  5697.  
  5698.           eventID (RECOID) - input 
  5699.                     Event ID. 
  5700.  
  5701.           pszEventID (PSZ) - output 
  5702.                     Pointer to the buffer that receives the event name. 
  5703.  
  5704.           rc (APIRET) - return 
  5705.  
  5706.  Returns 
  5707.  
  5708.           Return codes indicating success or type of failure: 
  5709.  
  5710.           RED_NO_ERROR                            Successful. 
  5711.  
  5712.           REDERR_NO_MEMORY                        There was insufficient memory 
  5713.                                                   available to process the 
  5714.                                                   request. 
  5715.  
  5716.           REDERR_INVALID_PARM                     One or more of the parameters 
  5717.                                                   passed is invalid. 
  5718.  
  5719.           REDEER_NOT_ACTIVE                       RED subsystem is not active. 
  5720.  
  5721.           REDERR_INVALID_EVENT_ID                 Event ID is not registered. 
  5722.  
  5723.           REDEER_RECO_SUBSYS_NOT_REG              Subsystem is not registered. 
  5724.  
  5725.  Remarks 
  5726.  
  5727.           This call translates an event ID into the event name. 
  5728.  
  5729.  
  5730. ΓòÉΓòÉΓòÉ 17.9. RedRegisterRecoCommand ΓòÉΓòÉΓòÉ
  5731.  
  5732.  Syntax   rc = RedRegisterRecoCommand(PSZ pszCommand, ULONG id, HWND hwnd); 
  5733.  
  5734.  Purpose 
  5735.  
  5736.           This function is used to register a recognition command handler. 
  5737.  
  5738.  Parameters 
  5739.  
  5740.           pszCommand (PSZ) - input 
  5741.                     Pointer to recognition command verb to be registered.  See 
  5742.                     Remarks below for special processing applied to the 
  5743.                     recognition command verb. 
  5744.  
  5745.           id (ULONG) - input 
  5746.                     An ID that will be placed in the WM_RECO_COMMAND message. 
  5747.  
  5748.           hwnd (HWND) - input 
  5749.                     The window that will receive the WM_RECO_COMMAND message. 
  5750.                     This is the window that is being registered to handle the 
  5751.                     pszCommand processing.  NULL will deregister a handler. 
  5752.  
  5753.           rc (APIRET) - return 
  5754.  
  5755.  Returns 
  5756.  
  5757.           Return codes indicating success or type of failure: 
  5758.  
  5759.           RED_NO_ERROR                       Successful. 
  5760.  
  5761.           REDERR_TOO_MANY_MAPPERS            Too many registered handlers. 
  5762.  
  5763.           REDERR_NOT_ACTIVE                  RED subsystem is not active. 
  5764.  
  5765.           REDERR_NO_MEMORY                   There was insufficient memory 
  5766.                                              available to process the request. 
  5767.  
  5768.           REDERR_INVALID_PARM                One or more of the parameters 
  5769.                                              passed is invalid. 
  5770.  
  5771.           REDERR_CMD_IS_BUILTIN              The command verb is the same as 
  5772.                                              one of the Pen for OS/2 built-in 
  5773.                                              commands.  The command was not 
  5774.                                              registered. 
  5775.  
  5776.  Remarks 
  5777.  
  5778.           This call registers a handler of a particular recognition-command 
  5779.           verb. 
  5780.  
  5781.           If the command is already registered, this call supersedes the 
  5782.           previous registration. Only one registered handler per recognition 
  5783.           command is allowed. Registration of a command handler that would 
  5784.           replace one of the Pen for OS/2 built-in command handlers is not 
  5785.           allowed and results in a return code of REDERR_CMD_IS_BUILTIN. 
  5786.  
  5787.           When checking for previous registrations, the given command will 
  5788.           replace any command that has the name portion of a file specification 
  5789.           equivalent to the command. For example, if D:\PENPM\HWRITING.EXE is 
  5790.           already registered and this function was called with an pszCommand of 
  5791.           HWRITING, the registration for D:\PENPM\HWRITING.EXE would be 
  5792.           superseded. This is to allow for the specification of path 
  5793.           information in the initial gesture-mapping profile. 
  5794.  
  5795.           When a recognition event results in mapping to a registered 
  5796.           recognition command verb (through profile processing), the registered 
  5797.           window will receive a WM_RECO_COMMAND message. 
  5798.  
  5799.  
  5800. ΓòÉΓòÉΓòÉ 17.10. RedWriteObjectEventMap ΓòÉΓòÉΓòÉ
  5801.  
  5802.  Syntax   rc = RedWriteObjectEventMap(HOBJECT hobj, PSZ fnamep); 
  5803.  
  5804.  Purpose 
  5805.  
  5806.           This function writes an object's event mapping to disk file. 
  5807.  
  5808.  Parameters 
  5809.  
  5810.           hobj (HOBJECT) - input 
  5811.                     The (persistent) object handle of the object whose event 
  5812.                     mapping is to be written. 
  5813.  
  5814.           fnamep (PSZ) - input 
  5815.                     Pointer to the null-terminated name of the file the 
  5816.                     mappings will be written to. 
  5817.  
  5818.           rc (APIRET) - return 
  5819.  
  5820.  Returns 
  5821.  
  5822.           Return codes indicating success or type of failure: 
  5823.  
  5824.           RED_NO_ERROR                  Successful. 
  5825.  
  5826.           REDERR_NOT_FOUND              There were no event mappings for the 
  5827.                                         object handle given. 
  5828.  
  5829.           REDERR_NO_MEMORY              There was insufficient memory available 
  5830.                                         to process the request. 
  5831.  
  5832.           REDERR_INVALID_PARM           One or more of the parameters passed is 
  5833.                                         invalid. 
  5834.  
  5835.           Other                         A base OS/2 error.  If an I/O error 
  5836.                                         occurs, the appropriate base OS/2 error 
  5837.                                         will be returned. 
  5838.  
  5839.  Remarks 
  5840.  
  5841.           This function will do no handling of critical or disk-change errors. 
  5842.           The default OS/2 handling of these errors will be used by this 
  5843.           function. 
  5844.  
  5845.  
  5846. ΓòÉΓòÉΓòÉ 18. Recognition Event Delivery Subsystem Messages ΓòÉΓòÉΓòÉ
  5847.  
  5848. This section contains the Recognition Event Delivery subsystem messages that 
  5849. are used to indicate that a recognition event has occurred, and to supply 
  5850. additional information about the event. 
  5851.  
  5852.  
  5853. ΓòÉΓòÉΓòÉ 18.1. WM_RECO ΓòÉΓòÉΓòÉ
  5854.  
  5855. This message is sent through WinSendMsg to the window under the hot spot. 
  5856. Position in mp1 is relative to the window receiving this message. 
  5857.  
  5858. This message indicates that a recognition event has occurred. An application 
  5859. can obtain the full set of recognition information from the PRECODATA pointer 
  5860. in the mp2 parameter. The receiver of this message can control subsequent 
  5861. processing of the event through the return parameter. 
  5862.  
  5863. The following is an example of how this message is entered: 
  5864.  
  5865.  
  5866.    fProcessed = WinSendMsg(hwnd, WM_RECO, mp1, mp2)
  5867.  
  5868.  Parameters 
  5869.  
  5870.           mp1 
  5871.  
  5872.              xPosition (SHORT) 
  5873.                   x position in window coordinates. 
  5874.  
  5875.              yPosition (SHORT) 
  5876.                   y position in window coordinates. 
  5877.  
  5878.                   Note:  mp1 can be addressed with the PM MOUSEMSG macro. This 
  5879.                          is the position of the hot spot. 
  5880.  
  5881.           mp2 
  5882.  
  5883.              prdReco (PRECODATA) 
  5884.                   This is the pointer to a RECODATA structure. 
  5885.  
  5886.                   The command argument and prefix command strings must be 
  5887.                   copied to your application's memory before your application 
  5888.                   returns control. 
  5889.  
  5890.                   Also, while processing this message, do not invoke any dialog 
  5891.                   or message box because a deadlock might occur since this is a 
  5892.                   sent message. 
  5893.  
  5894.                   Note:  The data pointed to by mp2 is only valid for the 
  5895.                          duration of the message.  If the receiver requires the 
  5896.                          information after returning from this message, then 
  5897.                          make a copy of the data. 
  5898.  
  5899.  
  5900.  Return Codes 
  5901.  
  5902.           fProcessed (MRESULT) 
  5903.                     Contains none or some of the following flags. 
  5904.  
  5905.              RECO_PROCESSED           The application has processed the event. 
  5906.                                       No further analysis or processing will be 
  5907.                                       done. 
  5908.  
  5909.              RECO_MAP                 Continue with Recognition mapping.  If 
  5910.                                       mapping is successful, further 
  5911.                                       Recognition messages may result. 
  5912.  
  5913.  
  5914. ΓòÉΓòÉΓòÉ 18.2. WM_RECO_COMMAND ΓòÉΓòÉΓòÉ
  5915.  
  5916. This message is SENT to a registered recognition command handler upon a 
  5917. successful recognition event resulting in an action that is registered for that 
  5918. handler (window).  Applications may register application unique recognition 
  5919. commands by calling RedRegisterRecoCommand. 
  5920.  
  5921. Upon receiving a WM_RECO_COMMAND message, the mp2 parameter can be used to 
  5922. obtain more information about the recognition and mapping events. 
  5923.  
  5924. The following is an example of how this message is entered: 
  5925.  
  5926.  
  5927.      WinSendMsg(hwnd, WM_RECO_COMMAND, mp1, mp2);
  5928.  
  5929.  Parameters 
  5930.  
  5931.           mp1 
  5932.  
  5933.              ID (ULONG) 
  5934.                   This is the command ID, originally passed by 
  5935.                   RedRegistedRecoCommand. 
  5936.  
  5937.                   Note:  This is not the recognition event ID. 
  5938.  
  5939.           mp2 
  5940.  
  5941.              prdRecoCmd (PRECODATA) 
  5942.                   This is the pointer to a RECODATA structure. 
  5943.  
  5944.                   Note:  The command argument and prefix command strings must 
  5945.                          be copied to your application's memory before before 
  5946.                          your application returns control. 
  5947.  
  5948.                   Also, while processing this message, do not invoke any dialog 
  5949.                   or message box because a deadlock might occur. 
  5950.  
  5951.  
  5952.  Return Codes 
  5953.  
  5954.           NULL (MRESULT) 
  5955.  
  5956.  
  5957. ΓòÉΓòÉΓòÉ 19. Recognition Event Delivery Subsystem Data Structure ΓòÉΓòÉΓòÉ
  5958.  
  5959. This section contains the data structure used within the Recognition Event 
  5960. Delivery subsystem. 
  5961.  
  5962.  
  5963. ΓòÉΓòÉΓòÉ 19.1. RECODATA  -  Recognition Data Block (RDB) Structure ΓòÉΓòÉΓòÉ
  5964.  
  5965. This data structure is built for every recognition event passed to the Pen for 
  5966. OS/2 subsystem by a recognition subsystem (for example:  voice, button, 
  5967. gesture). The target application is then informed of the recognition event 
  5968. through a WM_RECO message and the recognition data block is made available. The 
  5969. recognition data block is retrieved through the RedRecoFromEnv function and 
  5970. from the mp2 parameter of the WM_RECO and WM_RECO_COMMAND messages. 
  5971.  
  5972.  typedef struct _RECODATA
  5973.    {
  5974.    ULONG     cbSize;           /*  Size of structure                  */
  5975.    RECOID    id;               /*  ID if recognition event            */
  5976.    HRECO     hReco;            /*  Recognition subsystem handle       */
  5977.    ULONG     virtual_id;       /*  Virtual ID of event                */
  5978.    ULONG     char_code;        /*  Character code of event            */
  5979.    RECTL     bound_box;        /*  Bounding box of gesture            */
  5980.    POINTL    ptlHotSpot;       /*  Hot spot, X/Y screen coordinate    */
  5981.    HWND      hwnd;             /*  Hwnd under hot spot                */
  5982.    HWND      hwndActive;       /*  Active window                      */
  5983.    HWND      hwndFocus;        /*  Window that has the focus          */
  5984.    PSZ       pszCommand;       /*  Command assigned to gesture        */
  5985.    PSZ       pszCmdArgs;       /*  Argument of command                */
  5986.    PSZ       pszPrefixCard;    /*  Prefix assigned to gesture         */
  5987.    } RECODATA;
  5988.  typedef RECODATA *PRECODATA;
  5989. RECODATA Data Format 
  5990.  
  5991.  
  5992. ΓòÉΓòÉΓòÉ 20. Sketch Control Programming Interface ΓòÉΓòÉΓòÉ
  5993.  
  5994. Setup and modification of a sketch control follows the standard OS/2 PM methods 
  5995. for controls. The initial display attributes are controlled by a word of style 
  5996. bits. Subsequent modification of the operation of the control is accomplished 
  5997. through control messages. When the control needs to notify its parent of some 
  5998. event, the control sends the parent a notification message. 
  5999.  
  6000. Through the messages, the stroke database will be externalized for the control, 
  6001. with each control having its own private database.  The database exists for the 
  6002. life of the control, so strokes can be retrieved from the control until it is 
  6003. destroyed. 
  6004.  
  6005. During the shell initialization of the OS/2 operating system, the .DLL file for 
  6006. the sketch-entry control is loaded and initialized. The class of the control is 
  6007. publicly registered and has a value of WC_SKETCH. 
  6008.  
  6009.  
  6010. ΓòÉΓòÉΓòÉ 20.1. Control Style Bits ΓòÉΓòÉΓòÉ
  6011.  
  6012. The following standard PM dialog manager and sketch control style bits can be 
  6013. specified in the creation of a sketch input control. 
  6014.  
  6015.  
  6016. ΓòÉΓòÉΓòÉ 20.1.1. Standard PM Window Styles Bits ΓòÉΓòÉΓòÉ
  6017.  
  6018.  WS_VISIBLE 
  6019.       Makes the window visible. OS/2 draws the window on the screen unless 
  6020.       overlapping windows completely obscure it. By default, the 
  6021.       WinCreateWindow function creates invisible windows unless the WS_VISIBLE 
  6022.       style is given. 
  6023.  
  6024.  WS_DISABLED 
  6025.       Disables mouse and keyboard input to the window. This style is used to 
  6026.       temporarily prevent the user from using the window. If the window is 
  6027.       already imbedded, the control will repaint the stroke half-tone. The 
  6028.       pointer will remain unchanged. 
  6029.  
  6030.  WS_CLIPCHILDREN 
  6031.       Prevents a window from painting over its child window. Standard PM 
  6032.       meaning, with no effect on control. 
  6033.  
  6034.  WS_CLIPSIBLINGS 
  6035.       Prevents a window from painting over its sibling windows. Standard PM 
  6036.       meaning, with no effect on control. 
  6037.  
  6038.  WS_PARENTCLIP 
  6039.       Prevents a window from painting over its parent window. Standard PM 
  6040.       meaning, with no effect on control. 
  6041.  
  6042.  WS_SAVEBITS 
  6043.       Saves the image under the window as a bit map. When the window is moved 
  6044.       or hidden, the system restores the image by copying the bits. Standard PM 
  6045.       meaning, with no effect on control. 
  6046.  
  6047.  WS_SYNCPAINT 
  6048.       Causes the window to receive WM_PAINT messages immediately after a part 
  6049.       of the window becomes invalid, instead of receiving WM_PAINT messages 
  6050.       only if no other message is waiting to be processed. Standard PM meaning, 
  6051.       with no effect on control. 
  6052.  
  6053.  WS_MINIMIZED 
  6054.       Reduces the window to the minimum size. Standard PM meaning, with no 
  6055.       effect on control. 
  6056.  
  6057.  WS_MAXIMIZED 
  6058.       Enlarges the window to the maximum size. Standard PM meaning, with no 
  6059.       effect on control. 
  6060.  
  6061.  
  6062. ΓòÉΓòÉΓòÉ 20.1.2. Dialog Manager Styles Bits ΓòÉΓòÉΓòÉ
  6063.  
  6064.  WS_GROUP 
  6065.       Specifies the first control of a group of controls in which the user can 
  6066.       move from one control to another using the ARROW key. Standard PM 
  6067.       meaning, with no effect on control. 
  6068.  
  6069.  WS_TABSTOP 
  6070.       Specifies one of any number of controls through which the user can move 
  6071.       by tabbing. Standard PM meaning, with no effect on control. 
  6072.  
  6073.  WS_MULTISELECT 
  6074.       Standard PM meaning, with no effect on control. 
  6075.  
  6076.  
  6077. ΓòÉΓòÉΓòÉ 20.1.3. Sketch Control Style Bits ΓòÉΓòÉΓòÉ
  6078.  
  6079.  SKS_BORDER 
  6080.       The control displays a border around its input area. 
  6081.  
  6082.  SKS_3DBORDER 
  6083.       The control displays a 3-dimensional border around its input area. 
  6084.  
  6085.  
  6086. ΓòÉΓòÉΓòÉ 20.2. Control Messages ΓòÉΓòÉΓòÉ
  6087.  
  6088. Control messages are sent to the sketch entry control to alter its processing 
  6089. characteristics. These message are sent in the following manner: 
  6090.  
  6091.     WinSendMsg(hWndSiCtl,
  6092.                MessageID,
  6093.                mp1,
  6094.                mp2);
  6095. Where: 
  6096.  
  6097.      hWndSiCtl  =  The handle of the sketch entry control window.
  6098.      MessageID  =  The ID of the control message.
  6099.      mp1        =  Message data as defined by the control message.
  6100.      mp2        =  Message data as defined by the control message.
  6101.  
  6102. The owner of a sketch entry control sends these messages to the window to 
  6103. query, set, or change the state of the window. The messages should be sent by 
  6104. the owner to the sketch entry control as follows: 
  6105.  
  6106.  
  6107.    mRc = (MRESULT) WinSendMsg(hWndSiCtl, SKM_xxx, mp1, mp2);
  6108.  
  6109. The following control messages are sent to the sketch entry control to alter 
  6110. the controls processing characteristic: 
  6111.  
  6112.  o SKM_DELETE_ALL_STROKES 
  6113.  
  6114.  o SKM_GET_BITMAP 
  6115.  
  6116.  o SKM_UNDO_LAST_STROKE 
  6117.  
  6118.  o SKM_QUERY_BITMAP_SIZE 
  6119.  
  6120.  o SKM_RENDER_TO_CLIPBOARD 
  6121.  
  6122.  o SKM_QUERY_CTL_DRAW_POINTER 
  6123.  
  6124.  o SKM_QUERY_CTL_INK_COLOR 
  6125.  
  6126.  o SKM_QUERY_CTL_INK_WIDTH 
  6127.  
  6128.  o SKM_QUERY_CTL_INVISIBLE_MODE 
  6129.  
  6130.  o SKM_QUERY_CTL_STROKE_COUNT 
  6131.  
  6132.  o SKM_QUERY_STROKE_DATA 
  6133.  
  6134.  o SKM_QUERY_STROKE_INK_COLOR 
  6135.  
  6136.  o SKM_QUERY_STROKE_INK_WIDTH 
  6137.  
  6138.  o SKM_QUERY_STROKE_LENGTH 
  6139.  
  6140.  o SKM_SET_CTL_AUXDATA_MODE 
  6141.  
  6142.  o SKM_SET_CTL_DRAW_POINTER 
  6143.  
  6144.  o SKM_SET_CTL_INK_COLOR 
  6145.  
  6146.  o SKM_SET_CTL_INK_WIDTH 
  6147.  
  6148.  o SKM_SET_CTL_INVISIBLE_MODE 
  6149.  
  6150.  o SKM_SET_STROKE_INK_COLOR 
  6151.  
  6152.  o SKM_SET_STROKE_INK_WIDTH 
  6153.  
  6154.  o SKM_ADD_STROKE 
  6155.  
  6156.  
  6157. ΓòÉΓòÉΓòÉ 20.3. SKM_DELETE_ALL_STROKES ΓòÉΓòÉΓòÉ
  6158.  
  6159. This messages is sent to the control to request deletion of all strokes in the 
  6160. stroke database.  If the delete was successful TRUE will be returned in 
  6161. response to the message; otherwise, FALSE will be returned. 
  6162.  
  6163.  Parameters 
  6164.  
  6165.           param1 (ULONG) 
  6166.                     0, reserved value. 
  6167.  
  6168.           param2 (ULONG) 
  6169.                     0, reserved value. 
  6170.  
  6171.  Return Codes 
  6172.  
  6173.           fSuccess (BOOL) 
  6174.                     Indicates success or failure of operation. 
  6175.  
  6176.              TRUE      The clear operation was successfully performed. 
  6177.  
  6178.              FALSE     An error occurred.  For example, there is no stroke 
  6179.                        available. 
  6180.  
  6181.  
  6182. ΓòÉΓòÉΓòÉ 20.4. SKM_GET_BITMAP ΓòÉΓòÉΓòÉ
  6183.  
  6184. This message creates a screen resolution bit map image from the sketch control 
  6185. and returns its handle. The sketch control responds to this message by 
  6186. rendering the screen resolution image to a bit map and returning the bit map 
  6187. handle to the application.  The bit map will use the format of the display 
  6188. screen. 
  6189.  
  6190.  Parameters 
  6191.  
  6192.           param1 (ULONG) 
  6193.                     0, reserved value. 
  6194.  
  6195.           param2 (ULONG) 
  6196.                     0, reserved value. 
  6197.  
  6198.  Return Codes 
  6199.  
  6200.           hBitMap (HBITMAP) 
  6201.                     Handle of the bit map. 
  6202.  
  6203.              NULL      The operation failed or an error occurred. 
  6204.  
  6205.  
  6206. ΓòÉΓòÉΓòÉ 20.5. SKM_UNDO_LAST_STROKE ΓòÉΓòÉΓòÉ
  6207.  
  6208. This message tells the sketch control to clear the ink of the last stroke and 
  6209. to delete it from the database. 
  6210.  
  6211.  Parameters 
  6212.  
  6213.           param1 (ULONG) 
  6214.                     0, reserved value. 
  6215.  
  6216.           param2 (ULONG) 
  6217.                     0, reserved value. 
  6218.  
  6219.  Return Codes 
  6220.  
  6221.           fSuccess (BOOL) 
  6222.                     Indicates success or failure of operation. 
  6223.  
  6224.              TRUE      The clear operation was successfully performed. 
  6225.  
  6226.              FALSE     An error occurred.  For example, there is no stroke 
  6227.                        available. 
  6228.  
  6229.  
  6230. ΓòÉΓòÉΓòÉ 20.6. SKM_QUERY_BITMAP_SIZE ΓòÉΓòÉΓòÉ
  6231.  
  6232. This message returns the size of the bit map that could be returned with the 
  6233. SKM_GET_BITMAP or the SKM_RENDER_TO_CLIPBOARD messages.  The returned values 
  6234. are dependent on whether the control has a border.  If the control does not 
  6235. contain a border, the bit map's size is the same size as the control's window. 
  6236. If the control does contain a border, the bit map's size will be reduced by 2 
  6237. pixels in the X and Y directions. 
  6238.  
  6239.  Parameters 
  6240.  
  6241.           param1 (ULONG) 
  6242.                     0, reserved value. 
  6243.  
  6244.           param2 (ULONG) 
  6245.                     0, reserved value. 
  6246.  
  6247.  Return Codes 
  6248.  
  6249.           size (ULONG) 
  6250.                     Indicates the size of the bit map or failure of the 
  6251.                     operation. 
  6252.  
  6253.              LOUSHORT       Size in pixels of the bit map in the X direction. 
  6254.  
  6255.              HIUSHORT       Size in pixels of the bit map in the Y direction. 
  6256.  
  6257.              FALSE          An error occurred. 
  6258.  
  6259.  
  6260. ΓòÉΓòÉΓòÉ 20.7. SKM_RENDER_TO_CLIPBOARD ΓòÉΓòÉΓòÉ
  6261.  
  6262. This message renders the screen resolution bit map image from the sketch 
  6263. control to the clipboard.  The bit map is copied to the clipboard in the bit 
  6264. count format corresponding to the capabilities of the screen device. The size 
  6265. of the bit map is the size of sketch input control window. 
  6266.  
  6267.  Parameters 
  6268.  
  6269.           param1 (ULONG) 
  6270.                     0, reserved value. 
  6271.  
  6272.           param2 (ULONG) 
  6273.                     0, reserved value. 
  6274.  
  6275.  Return Codes 
  6276.  
  6277.           fSuccess (BOOL) 
  6278.                     Indicates success or failure of the operation. 
  6279.  
  6280.              TRUE      The operation was successful. 
  6281.  
  6282.              FALSE     The operation failed or an error occurred. 
  6283.  
  6284.  
  6285. ΓòÉΓòÉΓòÉ 20.8. SKM_QUERY_CTL_DRAW_POINTER ΓòÉΓòÉΓòÉ
  6286.  
  6287. This message returns the handle of the current drawing pointer. 
  6288.  
  6289.  Parameters 
  6290.  
  6291.           param1 (ULONG) 
  6292.                     0, reserved value. 
  6293.  
  6294.           param2 (ULONG) 
  6295.                     0, reserved value. 
  6296.  
  6297.  Return Codes 
  6298.  
  6299.           hptrDrawPointer (HPOINTER) 
  6300.                     Drawing pointer handle. 
  6301.  
  6302.           Note:  The drawing pointer might have been set to NULL. 
  6303.  
  6304.  
  6305. ΓòÉΓòÉΓòÉ 20.9. SKM_QUERY_CTL_INK_COLOR ΓòÉΓòÉΓòÉ
  6306.  
  6307. This message queries the control's current ink color. 
  6308.  
  6309.  Parameters 
  6310.  
  6311.           param1 (ULONG) 
  6312.                     0, reserved value. 
  6313.  
  6314.           param2 (ULONG) 
  6315.                     0, reserved value. 
  6316.  
  6317.  Return Codes 
  6318.  
  6319.           lInkColor (LONG) 
  6320.                     Indicates the color of the control ink as follows: 
  6321.  
  6322.              CLR_DEFAULT 
  6323.              CLR_WHITE 
  6324.              CLR_BLACK 
  6325.              CLR_BACKGROUND 
  6326.              CLR_BLUE 
  6327.              CLR_RED 
  6328.              CLR_PINK 
  6329.              CLR_GREEN 
  6330.              CLR_CYAN 
  6331.              CLR_YELLOW 
  6332.              CLR_NEUTRAL 
  6333.              CLR_DARKGRAY 
  6334.              CLR_DARKBLUE 
  6335.              CLR_DARKRED 
  6336.              CLR_DARKPINK 
  6337.              CLR_DARKGREEN 
  6338.              CLR_DARKCYAN 
  6339.              CLR_BROWN 
  6340.              CLR_PALEGRAY 
  6341.  
  6342.           CLR_ERROR 
  6343.                     An error occurred. 
  6344.  
  6345.  
  6346. ΓòÉΓòÉΓòÉ 20.10. SKM_QUERY_CTL_INK_WIDTH ΓòÉΓòÉΓòÉ
  6347.  
  6348. This message returns the control's current ink width. 
  6349.  
  6350.  Parameters 
  6351.  
  6352.           param1 (ULONG) 
  6353.                     0, reserved value. 
  6354.  
  6355.           param2 (ULONG) 
  6356.                     0, reserved value. 
  6357.  
  6358.  Return Codes 
  6359.  
  6360.           ulInkWidth (ULONG) 
  6361.                     Control ink width. 
  6362.  
  6363.           NULL 
  6364.                     An error occurred. 
  6365.  
  6366.  
  6367. ΓòÉΓòÉΓòÉ 20.11. SKM_QUERY_CTL_INVISIBLE_MODE ΓòÉΓòÉΓòÉ
  6368.  
  6369. This message returns the value of the invisible mode flag. 
  6370.  
  6371.  Parameters 
  6372.  
  6373.           param1 (ULONG) 
  6374.                     0, reserved value. 
  6375.  
  6376.           param2 (ULONG) 
  6377.                     0, reserved value. 
  6378.  
  6379.  Return Codes 
  6380.  
  6381.           ulInvisibleMode (BOOL) 
  6382.                     Indicates if the color of the ink is invisible. 
  6383.  
  6384.              TRUE      Invisible mode is On, all strokes are invisible. 
  6385.  
  6386.              FALSE     Invisible mode is Off, all strokes are visible. 
  6387.  
  6388.  
  6389. ΓòÉΓòÉΓòÉ 20.12. SKM_QUERY_CTL_STROKE_COUNT ΓòÉΓòÉΓòÉ
  6390.  
  6391. This message is used to get the count of strokes in the stroke control. 
  6392.  
  6393.  Parameters 
  6394.  
  6395.           param1 (ULONG) 
  6396.                     0, reserved value. 
  6397.  
  6398.           param2 (ULONG) 
  6399.                     0, reserved value. 
  6400.  
  6401.  Return Codes 
  6402.  
  6403.           count (ULONG) 
  6404.                     Reports the count of strokes. 
  6405.  
  6406.  
  6407. ΓòÉΓòÉΓòÉ 20.13. SKM_QUERY_STROKE_DATA ΓòÉΓòÉΓòÉ
  6408.  
  6409. This message is used to retrieve stroke(i) from the control: 
  6410.  
  6411.  o mp1 specifies the stroke (1...n). 
  6412.  o mp2 is a pointer to a buffer to hold the contents of the stroke, including 
  6413.    any auxiliary data. 
  6414.  The buffer size is determined by sending the message SKM_QUERY_STROKE_LENGTH 
  6415.  to the control. 
  6416.  
  6417.  The memory buffer layout for Ptr->SKTCTRLSTROKEDEF is as follows: 
  6418.  
  6419.  SKTCTRLSTROKEDEF 
  6420.  
  6421.  STROKEDATA 
  6422.  
  6423.  ARRAY OF POINTL 
  6424.  
  6425.  AUXDATAINFO 
  6426.  
  6427.  AUXPOINTDATA 
  6428.  
  6429.  The structure used to retrieve stroke(i) from the stroke database is described 
  6430.  in the toolkit file, SKETCH.H. 
  6431.  
  6432.       . ------------------------------- .
  6433.     1 .                                 .
  6434.       . SKTCTRLSTROKEDEF                .
  6435.       .                                 .
  6436.       .         PSTROKEDATA             . -> 2
  6437.       . ------------------------------- .        Note:  The application must
  6438.     2 .                                 .        adjust the pointers indicated
  6439.       . STROKEDATA                      .        here, if the data is moved to a
  6440.       .                                 .        different buffer or read from
  6441.       .         PPOINTL                 . -> 3   a control file.
  6442.       .                                 .
  6443.       .         PAUXDATAINFO            . -> 4
  6444.       .         PAUXSTROKEDATA          . -> 5
  6445.       .                                 .
  6446.       .         struct _STROKEDATA *    . -> NULL
  6447.       .         struct _STROKEDATA *    . -> NULL
  6448.       . ------------------------------- .
  6449.     3 .                                 .
  6450.       . X/Y POINTL array                .
  6451.       .                                 .
  6452.       . ------------------------------- .
  6453.     4 .                                 .
  6454.       . AUXDATAINFO                     .
  6455.       .                                 .
  6456.       . ------------------------------- .
  6457.     5 .                                 .
  6458.       . AUXPOINTDATA                    .
  6459.       .                                 .
  6460.       . ------------------------------- .
  6461.  
  6462.  Parameters 
  6463.  
  6464.           param1 (ULONG) 
  6465.  
  6466.              target (ULONG) 
  6467.                   Stroke target number. 
  6468.  
  6469.           param2 (PVOID) 
  6470.  
  6471.              pSktCtrlStrokeDef(PSKTCTLSTROKEDEF) 
  6472.                   Memory buffer. 
  6473.  
  6474.                                           typedef struct _SktCtrlStrokeDef
  6475.                                           {
  6476.                                              ULONG ulStrokeColor;
  6477.                                              ULONG ulStrokeWidth;
  6478.                                              ULONG reserved;
  6479.                                              PSTROKEDATA pStroke;
  6480.                                           }SKTCTRLSTROKEDEF;
  6481.                                           typedef SKTCTRLSTROKEDEF *PSKTCTRLSTROKEDEF;   // Ptr->SKTCTRLSTROKEDEF
  6482.                                           typedef PSKTCTRLSTROKEDEF *PPSKTCTRLSTROKEDEF;
  6483.                                                                                    // Ptr->Ptr->SKTCTRLSTROKEDEF
  6484.  
  6485.  Return Codes 
  6486.  
  6487.           fSuccess (BOOL) 
  6488.                     Indicates success or failure of operation. 
  6489.  
  6490.              TRUE      Success. 
  6491.  
  6492.              FALSE     An error occurred. 
  6493.  
  6494.  
  6495. ΓòÉΓòÉΓòÉ 20.14. SKM_QUERY_STROKE_INK_COLOR ΓòÉΓòÉΓòÉ
  6496.  
  6497. This message returns the color attribute of stroke(i) in the stroke database. 
  6498.  
  6499.  o mp1 specifies the stroke (1...n) to query. 
  6500.  
  6501.  Parameters 
  6502.  
  6503.           param1 (ULONG) 
  6504.  
  6505.              target (ULONG) 
  6506.                   Stroke target number. 
  6507.  
  6508.           param2 (ULONG) 
  6509.                     0, reserved value. 
  6510.  
  6511.  Return Codes 
  6512.  
  6513.           lInkColor (LONG) 
  6514.                     Indicates the color of the stroke (1...n) ink as follows: 
  6515.  
  6516.              CLR_DEFAULT 
  6517.              CLR_WHITE 
  6518.              CLR_BLACK 
  6519.              CLR_BACKGROUND 
  6520.              CLR_BLUE 
  6521.              CLR_RED 
  6522.              CLR_PINK 
  6523.              CLR_GREEN 
  6524.              CLR_CYAN 
  6525.              CLR_YELLOW 
  6526.              CLR_NEUTRAL 
  6527.              CLR_DARKGRAY 
  6528.              CLR_DARKBLUE 
  6529.              CLR_DARKRED 
  6530.              CLR_DARKPINK 
  6531.              CLR_DARKGREEN 
  6532.              CLR_DARKCYAN 
  6533.              CLR_BROWN 
  6534.              CLR_PALEGRAY 
  6535.  
  6536.           CLR_ERROR 
  6537.                     An error occurred. 
  6538.  
  6539.  
  6540. ΓòÉΓòÉΓòÉ 20.15. SKM_QUERY_STROKE_INK_WIDTH ΓòÉΓòÉΓòÉ
  6541.  
  6542. This message returns the width attribute of stroke(i) in the stroke database. 
  6543.  
  6544.  o mp1 specifies the stroke (1...n) to query. 
  6545.  
  6546.  Parameters 
  6547.  
  6548.           param1 (ULONG) 
  6549.  
  6550.              target (ULONG) 
  6551.                   Stroke target number. 
  6552.  
  6553.           param2 (ULONG) 
  6554.                     0, reserved value. 
  6555.  
  6556.  Return Codes 
  6557.  
  6558.           ulInkWidth (ULONG)       Stroke ink width. 
  6559.  
  6560.           NULL                     An error occurred. 
  6561.  
  6562.  
  6563. ΓòÉΓòÉΓòÉ 20.16. SKM_QUERY_STROKE_LENGTH ΓòÉΓòÉΓòÉ
  6564.  
  6565. This message is used to retrieve the size in bytes of stroke(i).  A return code 
  6566. of 0 signals an error, such as stroke not available. 
  6567.  
  6568. The size consists of the following structures: 
  6569.  
  6570.  SKTCTRLSTROKEDEF 
  6571.  
  6572.  STROKEDATA 
  6573.  
  6574.  ARRAY OF POINTL 
  6575.  
  6576.  AUXDATAINFO 
  6577.  
  6578.  AUXPOINTDATA 
  6579.  
  6580.  Parameters 
  6581.  
  6582.           param1 (ULONG) 
  6583.  
  6584.              target (ULONG) 
  6585.                   Stroke target number. 
  6586.  
  6587.           param2 (ULONG) 
  6588.                     0, reserved value. 
  6589.  
  6590.  Return Codes 
  6591.  
  6592.           size (ULONG) 
  6593.                     Indicates size of the stroke.  If the length is 0, then an 
  6594.                     error occurred. 
  6595.  
  6596.  
  6597. ΓòÉΓòÉΓòÉ 20.17. SKM_SET_CTL_AUXDATA_MODE ΓòÉΓòÉΓòÉ
  6598.  
  6599. This message informs the control that subsequent strokes will retrieve the 
  6600. specified pen stroke auxiliary data, if the data can be returned by the device 
  6601. (pen, touch, mouse).  The flags ADF_* are defined in the header file PENPM.H. 
  6602. A value of 0 results in no auxiliary data being returned. 
  6603.  
  6604.  Parameters 
  6605.  
  6606.           param1 (ULONG) 
  6607.  
  6608.                                              /* WRTLOCATORDEVINFO.ulValidityFlags Values  */
  6609.  
  6610.                                              ADF_TIMESTAMP       0x00000001 /* Point time stamp                 */
  6611.                                              ADF_FLAGS           0x00000002 /* Point flags                      */
  6612.                                              ADF_SCREENZ         0x00000004 /* Display Z-axis value             */
  6613.                                                                             /* The Z value is 0-4096 for height */
  6614.                                                                             /* and 0 to -4096 for pressure      */
  6615.                                              ADF_ANGLE           0x00000008 /* Device angle                     */
  6616.                                              ADF_ROTATION        0x00000010 /* Device rotation                  */
  6617.                                              ADF_BUTTON          0x00000020 /* Button status                    */
  6618.                                              ADF_OEM             0x00000040 /* OEM specific data byte count     */
  6619.                                              ADF_OEM_COUNT_MASK  0x000F0000 /* OEM valid count                  */
  6620.                                              ADF_USER            0x00000080 /* For program use                  */
  6621.                                              ADF_ALL             0x000000FF /* All fields                       */
  6622.  
  6623.           param2 (ULONG) 
  6624.                     0, reserved value. 
  6625.  
  6626.  Return Codes 
  6627.  
  6628.           fSuccess (BOOL) 
  6629.                     Indicates success or failure of operation. 
  6630.  
  6631.              TRUE      Success. 
  6632.  
  6633.              FALSE     An error occurred. 
  6634.  
  6635.  
  6636. ΓòÉΓòÉΓòÉ 20.18. SKM_SET_CTL_DRAW_POINTER ΓòÉΓòÉΓòÉ
  6637.  
  6638. This message sets the drawing pointer handle and returns the previous pointer. 
  6639.  
  6640. The sketch control responds to this message by using a new drawing pointer 
  6641. specified on mp1 to replace the current drawing pointer. 
  6642.  
  6643.  Parameters 
  6644.  
  6645.           param1 (HPOINTER) 
  6646.  
  6647.              hptrDrawPointer 
  6648.                   Drawing pointer handle. 
  6649.  
  6650.           param2 (HPOINTER) 
  6651.                     0, reserved value. 
  6652.  
  6653.  Return Codes 
  6654.  
  6655.           hptrPrevious (HPOINTER) 
  6656.                     The handle of the previous drawing pointer. 
  6657.  
  6658.           Note:  The previous drawing pointer might have been set to NULL. 
  6659.  
  6660.  
  6661. ΓòÉΓòÉΓòÉ 20.19. SKM_SET_CTL_INK_COLOR ΓòÉΓòÉΓòÉ
  6662.  
  6663. This message sets the drawing stroke color for the control.  Strokes created 
  6664. after this message will have the newly set color. 
  6665.  
  6666.  Parameters 
  6667.  
  6668.           param1 (ULONG) 
  6669.  
  6670.              lInkColor (LONG) 
  6671.                   Indicates the color of the ink as follows: 
  6672.  
  6673.                 CLR_DEFAULT 
  6674.                 CLR_WHITE 
  6675.                 CLR_BLACK 
  6676.                 CLR_BACKGROUND 
  6677.                 CLR_BLUE 
  6678.                 CLR_RED 
  6679.                 CLR_PINK 
  6680.                 CLR_GREEN 
  6681.                 CLR_CYAN 
  6682.                 CLR_YELLOW 
  6683.                 CLR_NEUTRAL 
  6684.                 CLR_DARKGRAY 
  6685.                 CLR_DARKBLUE 
  6686.                 CLR_DARKRED 
  6687.                 CLR_DARKPINK 
  6688.                 CLR_DARKGREEN 
  6689.                 CLR_DARKCYAN 
  6690.                 CLR_BROWN 
  6691.                 CLR_PALEGRAY 
  6692.  
  6693.           param2 (ULONG) 
  6694.                     0, reserved value. 
  6695.  
  6696.  Return Codes 
  6697.  
  6698.           fSuccess (BOOL) 
  6699.                     Indicates success or failure of the operation. 
  6700.  
  6701.              TRUE      The ink color was set successfully. 
  6702.  
  6703.              FALSE     The ink color cannot be set or an error occurred. 
  6704.  
  6705.  
  6706. ΓòÉΓòÉΓòÉ 20.20. SKM_SET_CTL_INK_WIDTH ΓòÉΓòÉΓòÉ
  6707.  
  6708. This message sets the drawing stroke ink width for the control.  Strokes 
  6709. created after this message will have the newly set width. 
  6710.  
  6711.  Parameters 
  6712.  
  6713.           param1 (ULONG) 
  6714.  
  6715.              ulInkWidth 
  6716.                   Ink width in pels. The choices are 1 or 2 pels.  The default 
  6717.                   is 1 pel. 
  6718.  
  6719.           param2 (ULONG) 
  6720.                     0, reserved value. 
  6721.  
  6722.  Return Codes 
  6723.  
  6724.           fSuccess (BOOL) 
  6725.                     Indicates success or failure of the operation. 
  6726.  
  6727.              TRUE      The ink width was set successfully. 
  6728.  
  6729.              FALSE     The ink width cannot be set or an error occurred. 
  6730.  
  6731.  
  6732. ΓòÉΓòÉΓòÉ 20.21. SKM_SET_CTL_INVISIBLE_MODE ΓòÉΓòÉΓòÉ
  6733.  
  6734. This message turns On or Off the invisible mode of the control. This lets an 
  6735. application hide a signature or password entered by a user. 
  6736.  
  6737.  Parameters 
  6738.  
  6739.           param1 (BOOL) 
  6740.                     Selects visible or invisible ink. 
  6741.  
  6742.              TRUE      Turn invisible mode On.  All current and new strokes in 
  6743.                        the control will be invisible. 
  6744.  
  6745.              FALSE     Turn invisible mode Off.  All current and new strokes in 
  6746.                        the control will be visible. 
  6747.  
  6748.           param2 (ULONG) 
  6749.                     0, reserved value. 
  6750.  
  6751.  Return Codes 
  6752.  
  6753.           fSuccess (BOOL) 
  6754.                     Indicates success or failure of the operation. 
  6755.  
  6756.              TRUE      The mode was successfully set. 
  6757.  
  6758.              FALSE     An error occurred setting the mode. 
  6759.  
  6760.  
  6761. ΓòÉΓòÉΓòÉ 20.22. SKM_SET_STROKE_INK_COLOR ΓòÉΓòÉΓòÉ
  6762.  
  6763. This message is used to reset the color attribute of stroke(i) in the stroke 
  6764. database: 
  6765.  
  6766.  o mp1 specifies the stroke (1...n). 
  6767.  o mp2 is the stroke ink color. 
  6768.  
  6769.  Parameters 
  6770.  
  6771.           param1 (ULONG) 
  6772.  
  6773.              target (ULONG) 
  6774.                   Stroke target number. 
  6775.  
  6776.           param2 (LONG) 
  6777.  
  6778.              lInkColor 
  6779.                   Stroke ink color 
  6780.  
  6781.                 CLR_DEFAULT 
  6782.                 CLR_WHITE 
  6783.                 CLR_BLACK 
  6784.                 CLR_BACKGROUND 
  6785.                 CLR_BLUE 
  6786.                 CLR_RED 
  6787.                 CLR_PINK 
  6788.                 CLR_GREEN 
  6789.                 CLR_CYAN 
  6790.                 CLR_YELLOW 
  6791.                 CLR_NEUTRAL 
  6792.  
  6793.                 CLR_DARKGRAY 
  6794.                 CLR_DARKBLUE 
  6795.                 CLR_DARKRED 
  6796.                 CLR_DARKPINK 
  6797.                 CLR_DARKGREEN 
  6798.                 CLR_DARKCYAN 
  6799.                 CLR_BROWN 
  6800.                 CLR_PALEGRAY 
  6801.  
  6802.  Return Codes 
  6803.  
  6804.           fSuccess (BOOL) 
  6805.                     Indicates success or failure of operation. 
  6806.  
  6807.              TRUE      Success. 
  6808.  
  6809.              FALSE     An error occurred. 
  6810.  
  6811.  
  6812. ΓòÉΓòÉΓòÉ 20.23. SKM_SET_STROKE_INK_WIDTH ΓòÉΓòÉΓòÉ
  6813.  
  6814. This message is used to reset the ink width attribute of stroke(i) in the 
  6815. stroke database: 
  6816.  
  6817.  o mp1 specifies the stroke (1...n). 
  6818.  o mp2 is the stroke ink width. 
  6819.  
  6820.  Parameters 
  6821.  
  6822.           param1 (ULONG) 
  6823.  
  6824.              target (ULONG) 
  6825.                   Stroke target number. 
  6826.  
  6827.           param2 (ULONG) 
  6828.  
  6829.              ulInkWidth 
  6830.                   Ink width units (pels). 
  6831.  
  6832.                   The choices are 1 or 2 pels.  The default ink width is 1 pel. 
  6833.  
  6834.  Return Codes 
  6835.  
  6836.           fSuccess (BOOL) 
  6837.                     Indicates success or failure of operation. 
  6838.  
  6839.              TRUE      Success. 
  6840.  
  6841.              FALSE     An error occurred. 
  6842.  
  6843.  
  6844. ΓòÉΓòÉΓòÉ 20.24. SKM_ADD_STROKE ΓòÉΓòÉΓòÉ
  6845.  
  6846. This message is used to add a stroke to the control: 
  6847.  
  6848.  o mp2 is a pointer to a buffer to hold the contents of the stroke, including 
  6849.    any auxiliary data. 
  6850.  
  6851.  The buffer size is determined by sending the message SKM_QUERY_STROKE_LENGTH 
  6852.  to the control. 
  6853.  
  6854.  The memory buffer layout for Ptr->SKTCTRLSTROKEDEF is as follows: 
  6855.  
  6856.  SKTCTRLSTROKEDEF 
  6857.  
  6858.  STROKEDATA 
  6859.  
  6860.  ARRAY OF POINTL 
  6861.  
  6862.  AUXDATAINFO 
  6863.  
  6864.  AUXPOINTDATA 
  6865.  
  6866.  The structure used to retrieve stroke(i) from the stroke database is described 
  6867.  in the toolkit file, SKETCH.H. 
  6868.  
  6869.       . ------------------------------- .
  6870.     1 .                                 .
  6871.       . SKTCTRLSTROKEDEF                .
  6872.       .                                 .
  6873.       .         PSTROKEDATA             . -> 2
  6874.       . ------------------------------- .        Note:  The application must
  6875.     2 .                                 .        adjust the pointers indicated
  6876.       . STROKEDATA                      .        here, if the data is from a
  6877.       .                                 .        different buffer than the one
  6878.       .         PPOINTL                 . -> 3   given by SKM_QUERY_STROKE_DATA.
  6879.       .                                 .
  6880.       .         PAUXDATAINFO            . -> 4
  6881.       .         PAUXSTROKEDATA          . -> 5
  6882.       .                                 .
  6883.       .         struct _STROKEDATA *    . -> NULL
  6884.       .         struct _STROKEDATA *    . -> NULL
  6885.       . ------------------------------- .
  6886.     3 .                                 .
  6887.       . X/Y POINTL array                .
  6888.       .                                 .
  6889.       . ------------------------------- .
  6890.     4 .                                 .
  6891.       . AUXDATAINFO                     .
  6892.       .                                 .
  6893.       . ------------------------------- .
  6894.     5 .                                 .
  6895.       . AUXPOINTDATA                    .
  6896.       .                                 .
  6897.       . ------------------------------- .
  6898.  
  6899.  Parameters 
  6900.  
  6901.           param1 (ULONG) 
  6902.                     Reserved. 
  6903.  
  6904.           param2 (PVOID) 
  6905.  
  6906.              pSktCtrlStrokeDef (PSKTCTLSTROKEDEF) 
  6907.                   Memory buffer. 
  6908.  
  6909.                                           typedef struct _SktCtrlStrokeDef
  6910.                                           {
  6911.                                              ULONG ulStrokeColor;
  6912.                                              ULONG ulStrokeWidth;
  6913.                                              ULONG reserved;
  6914.                                              PSTROKEDATA pStroke;
  6915.                                           }SKTCTRLSTROKEDEF;
  6916.                                           typedef SKTCTRLSTROKEDEF *PSKTCTRLSTROKEDEF;   // Ptr->SKTCTRLSTROKEDEF
  6917.                                           typedef PSKTCTRLSTROKEDEF *PPSKTCTRLSTROKEDEF;
  6918.                                                                                     // Ptr->Ptr->SKTCTRLSTROKEDEF
  6919.  
  6920.  Return Codes 
  6921.  
  6922.           fSuccess (ULONG) 
  6923.                     Indicates success or failure of operation. 
  6924.  
  6925.              TRUE      Success. 
  6926.  
  6927.              FALSE     An error occurred. 
  6928.  
  6929.  
  6930. ΓòÉΓòÉΓòÉ 20.25. Notification Messages ΓòÉΓòÉΓòÉ
  6931.  
  6932. Notification messages are initiated by the sketch control window to notify its 
  6933. owner of significant events. These messages are sent by the control to the 
  6934. owner as follows: 
  6935.  
  6936.  
  6937.     WinSendMsg(hWndOwner,
  6938.                WM_CONTROL,
  6939.                MPFROM2SHORT(ID, NotifyCode),
  6940.                mp2);
  6941.  
  6942. Where: 
  6943.  
  6944.  
  6945.      hWndOwner   =  The owner of the sketch control window.
  6946.      ID          =  The ID assigned to the control at creation.
  6947.      NotifyCode  =  An event notification code.
  6948.      mp2         =  Notify code specific information.
  6949.  
  6950. The following notification messages are defined for the sketch control: 
  6951.  
  6952.  o SKN_FOCUS_ACTIVATE 
  6953.  
  6954.  o SKN_FOCUS_DEACTIVATE 
  6955.  
  6956.  o SKN_STROKE_ADD 
  6957.  
  6958.  o SKN_STROKE_UNDO 
  6959.  
  6960.  o SKN_CONTROL_CLEARED 
  6961.  
  6962.  o SKN_INK_COLOR_CHANGE 
  6963.  
  6964.  o SKN_INK_WIDTH_CHANGE 
  6965.  
  6966.  
  6967. ΓòÉΓòÉΓòÉ 20.26. SKN_FOCUS_ACTIVATE ΓòÉΓòÉΓòÉ
  6968.  
  6969. Informs the parent the control has been given input focus. 
  6970.  
  6971.  Parameters 
  6972.  
  6973.           mp2 (ULONG) 
  6974.                     0, reserved value. 
  6975.  
  6976.  Return Codes 
  6977.  
  6978.           None. 
  6979.  
  6980.  
  6981. ΓòÉΓòÉΓòÉ 20.27. SKN_FOCUS_DEACTIVATE ΓòÉΓòÉΓòÉ
  6982.  
  6983. Informs the parent the control has lost input focus. 
  6984.  
  6985.  Parameters 
  6986.  
  6987.           mp2 (ULONG) 
  6988.                     0, reserved value. 
  6989.  
  6990.  
  6991.  
  6992.  Return Codes 
  6993.  
  6994.           None. 
  6995.  
  6996.  
  6997. ΓòÉΓòÉΓòÉ 20.28. SKN_STROKE_ADD ΓòÉΓòÉΓòÉ
  6998.  
  6999. Sent to the parent when a stroke is about to be added to the stroke database. 
  7000. If the parent returns TRUE to the message, the stroke will not be added. If the 
  7001. parent returns FALSE, the stroke will be added. 
  7002.  
  7003.  Parameters 
  7004.  
  7005.           mp2 (ULONG) 
  7006.  
  7007.              count (ULONG) 
  7008.                   Stroke number to add. 
  7009.  
  7010.  Return Codes 
  7011.  
  7012.           None. 
  7013.  
  7014.  
  7015. ΓòÉΓòÉΓòÉ 20.29. SKN_STROKE_UNDO ΓòÉΓòÉΓòÉ
  7016.  
  7017. Sent to the parent when a stroke is about to be deleted from the stroke 
  7018. database.  If the parent returns TRUE to the message, the stroke will not be 
  7019. deleted.  If the parent returns FALSE, the stroke will be deleted. 
  7020.  
  7021.  Parameters 
  7022.  
  7023.           mp2 (ULONG) 
  7024.  
  7025.              count (ULONG) 
  7026.                   Stroke number to undo. 
  7027.  
  7028.  Return Codes 
  7029.  
  7030.           None. 
  7031.  
  7032.  
  7033. ΓòÉΓòÉΓòÉ 20.30. SKN_CONTROL_CLEARED ΓòÉΓòÉΓòÉ
  7034.  
  7035. Sent to the parent whenever the stroke database is about to be cleared of all 
  7036. strokes. If the parent returns TRUE to the message, the strokes will not be 
  7037. deleted.  If the parent returns FALSE, all strokes will be deleted from the 
  7038. stroke database. 
  7039.  
  7040.  Parameters 
  7041.  
  7042.           mp2 (ULONG) 
  7043.  
  7044.              count (ULONG) 
  7045.                   Number of strokes in the database. 
  7046.  
  7047.  Return Codes 
  7048.  
  7049.           None. 
  7050.  
  7051.  
  7052. ΓòÉΓòÉΓòÉ 20.31. SKN_INK_COLOR_CHANGE ΓòÉΓòÉΓòÉ
  7053.  
  7054. Sent to the parent whenever the ink color for the drawing stroke is changed. 
  7055.  
  7056.  Parameters 
  7057.  
  7058.           mp2 (LONG) 
  7059.  
  7060.              lInkColor 
  7061.                   Drawing stroke ink. 
  7062.  
  7063.  Return Codes 
  7064.  
  7065.           None. 
  7066.  
  7067.  
  7068. ΓòÉΓòÉΓòÉ 20.32. SKN_INK_WIDTH_CHANGE ΓòÉΓòÉΓòÉ
  7069.  
  7070. Sent to the parent whenever the width for the ink is changed. 
  7071.  
  7072.  Parameters 
  7073.  
  7074.           mp2 (ULONG) 
  7075.  
  7076.              ulInkWidth 
  7077.                   Drawing stroke width. 
  7078.  
  7079.  Return Codes 
  7080.  
  7081.           None. 
  7082.  
  7083.  
  7084. ΓòÉΓòÉΓòÉ 21. Handwriting Input Control Programming Interface ΓòÉΓòÉΓòÉ
  7085.  
  7086. Setup and modification of a handwriting input control follows the standard OS/2 
  7087. PM paradigm for controls. The initial display attributes are controlled by a 
  7088. word of style bits. Subsequent modification of the operation of the control is 
  7089. accomplished through control messages. When the control needs to notify its 
  7090. parent of an event, the control sends the parent a notification message. 
  7091.  
  7092. During the shell initialization of the OS/2 operating system, the DLL for the 
  7093. handwriting entry control will be loaded and initialized.  The class of the 
  7094. control will be publicly registered and will have the value HWXENTRY. 
  7095.  
  7096.  
  7097. ΓòÉΓòÉΓòÉ 21.1. Handwriting Input Control Style Bits ΓòÉΓòÉΓòÉ
  7098.  
  7099. The following control style bits are specific to the handwriting input control: 
  7100.  
  7101.  HX_3DBORDER 
  7102.       The control displays a three-dimensional border around the edge of its 
  7103.       client area. The three-dimensional effect is created by painting white 
  7104.       lines on the top and left edges of the control's client area and black 
  7105.       lines on the bottom and right edges of the control. This makes the 
  7106.       control appear to be raised above its parent. 
  7107.  
  7108.  HX_BORDER 
  7109.       The control displays a black border around the edge of its client area. 
  7110.  
  7111.       Note:  If both border style bits are set, HX_BORDER takes precedence. 
  7112.  
  7113.  
  7114. ΓòÉΓòÉΓòÉ 21.2. Notification Messages ΓòÉΓòÉΓòÉ
  7115.  
  7116. Notification messages are initiated by the handwriting control window to notify 
  7117. its owner of significant events. These messages are sent by the control to the 
  7118. owner as follows: 
  7119.  
  7120.  
  7121.     WinSendMsg(hOwnerWnd,
  7122.                WM_CONTROL,
  7123.                MPFROM2SHORT(ID, NotifyCode),
  7124.                mp2);
  7125.  
  7126. Where: 
  7127.  
  7128.  
  7129.      hOwnerWnd  = The parent of the handwriting control window.
  7130.      ID         = The ID assigned to the control at creation.
  7131.      mp1        = An event notification code.
  7132.      mp2        = Notify code specific information.
  7133.  
  7134. The following notification message ID's are defined for the handwriting 
  7135. control: 
  7136.  
  7137.  HXN_OVERFLOW 
  7138.       Informs the owner of the control that the current operation has caused 
  7139.       the text area of the control to overflow.  The text limit for a 
  7140.       handwriting control is 300 characters.  Overflow text is lost. 
  7141.  
  7142.  HXN_SETFOCUS 
  7143.       Informs the owner of the control that the control has gained the focus. 
  7144.  
  7145.  HXN_KILLFOCUS 
  7146.       Informs the owner of the control that the control has lost focus. 
  7147.  
  7148.  HXN_CONTENTS_CHANGED 
  7149.       Sent to the control when the text contents of the control has changed. 
  7150.  
  7151.  HXN_STROKE_ADDED 
  7152.       Informs the owner that the control has received a pen stroke that is 
  7153.       destined to be sent to the recognition system.  If the owner returns TRUE 
  7154.       to the message, the control takes no further action.  If the owner 
  7155.       returns FALSE, the control sends the pen stroke to the recognition 
  7156.       system. 
  7157.  
  7158.  HXN_DELETE_PENDING 
  7159.       Informs the owner the control intends to delete a range of characters due 
  7160.       to a user gesture.  If the owner returns TRUE to the message, the control 
  7161.       takes no further action.  If the owner returns FALSE to the message, the 
  7162.       control deletes the characters in the range. 
  7163.  
  7164.       Message parameter 2 (mp2) contains two 16-byte fields to denote the range 
  7165.       as follows: 
  7166.  
  7167.     o HIUSHORT (mp2) - Start of range of deleted characters. 
  7168.     o LOUSHORT (mp2) - End of range of deleted characters. 
  7169.  
  7170.  HXN_INSERT_PENDING 
  7171.       Informs the owner the control intends to insert spaces into the control. 
  7172.       If the owner returns TRUE to the message, the spaces are not inserted. 
  7173.       If the owner returns FALSE to the message, the spaces are inserted. 
  7174.  
  7175.       Message parameter 2 (mp2) contains the following values: 
  7176.  
  7177.     o usPosition (USHORT) - Position in the current text where spaces will be 
  7178.       inserted. 
  7179.     o usCount (USHORT) - Number of spaces that will be inserted. 
  7180.  
  7181.  HXN_GESTURE_PENDING 
  7182.       Informs the owner of the control that the user has just entered a gesture 
  7183.       in the control.  If the owner returns TRUE to the message, the gesture is 
  7184.       not executed.  If the owner returns FALSE to the message, the gesture is 
  7185.       executed. 
  7186.  
  7187.       Message parameter 2 (mp2) contains the gesture ID.  Possible values for 
  7188.       mp2 are: 
  7189.  
  7190.     o VE_SPACE 
  7191.     o VE_SCRATCHOUT 
  7192.     o VE_DELETECHAR 
  7193.  
  7194.  
  7195. ΓòÉΓòÉΓòÉ 21.2.1. Mouse Pointer Notification Message ΓòÉΓòÉΓòÉ
  7196.  
  7197. A WM_CONTROLPOINTER message is sent to the owner of the control, when the 
  7198. pointing-device pointer moves over the control's window.  This message allows 
  7199. the owner to set the pointing device pointer. 
  7200.  
  7201. Parameters 
  7202.  
  7203.  mp1 
  7204.  
  7205.     usControlID (USHORT) 
  7206.          Control identifier. 
  7207.  
  7208.     hCurrPointer (HPOINTER) 
  7209.          Handle to pointer currently used by the control. 
  7210.  
  7211.  mp2 
  7212.  
  7213.     NULL (USHORT) 
  7214.          Unused 
  7215.  
  7216.     hNewPointer (HPOINTER) 
  7217.          Handle to new pointer used by the control. 
  7218.  
  7219.  This message also allows the owner of the control to change the mouse pointer. 
  7220.  The mouse pointer is changed if a valid handler to a mouse pointer resource is 
  7221.  returned on completion of the processing of the message.  If the mouse pointer 
  7222.  is changed, the window procedure would pass this message to the default window 
  7223.  procedure. 
  7224.  
  7225.  
  7226. ΓòÉΓòÉΓòÉ 21.2.2. Help Notification Message ΓòÉΓòÉΓòÉ
  7227.  
  7228. A WM_HELP message is posted to the owner of the control when a help gesture is 
  7229. drawn on the control.  The gesture must be drawn larger than a character cell, 
  7230. so that it will be interpreted as a gesture instead of recognition data. 
  7231.  
  7232. Parameters 
  7233.  
  7234.  mp1 
  7235.  
  7236.     usControlID (USHORT) 
  7237.          Control identifier. 
  7238.  
  7239.     NULL (USHORT) 
  7240.          Unused. 
  7241.  
  7242.  mp2 
  7243.  
  7244.     usSource (USHORT) 
  7245.          Command source, always CMDSRC_OTHER. 
  7246.  
  7247.     usPointer (USHORT) 
  7248.          Pointer Device indicator, always TRUE. 
  7249.  
  7250.  If the owner passes this message to the default window procedure, the help 
  7251.  notification message is passed to the owner's parent window, if it exists and 
  7252.  is not the desktop.  Otherwise, the help notification message sets the return 
  7253.  value to FALSE. 
  7254.  
  7255.  
  7256. ΓòÉΓòÉΓòÉ 21.3. Handwriting Input Control Display Colors ΓòÉΓòÉΓòÉ
  7257.  
  7258. The following four colors can be used to display a handwriting input control: 
  7259.  
  7260.  Control Background Color 
  7261.       This color is used by the control to paint its background. This color is 
  7262.       derived from the OS/2 PM system color SYSCLR_BACKGROUND. 
  7263.  
  7264.  Control Character Grid Color 
  7265.       This color is used by the control to paint the character grid. This color 
  7266.       is derived from the OS/2 PM system color CLR_DARKGRAY. 
  7267.  
  7268.  Control Text Color 
  7269.       This color is used by the control to paint the text. This color is 
  7270.       derived from the OS/2 PM system color SYSCLR_WINDOWTEXT. 
  7271.  
  7272.  Control Error Text Color 
  7273.       This color is used by the control to paint the characters which are in 
  7274.       error or not recognized. This color is derived from the OS/2 PM system 
  7275.       color CLR_DARKGARY. 
  7276.  
  7277.  
  7278. ΓòÉΓòÉΓòÉ 22. Virtual Keyboard Playback API ΓòÉΓòÉΓòÉ
  7279.  
  7280. Pop-Up Keyboard provides a set of Virtual Keyboard Playback (Vkp) API functions 
  7281. to let other PM applications control the Pop-Up Keyboard tool.  The following 
  7282. is a list of available APIs. 
  7283.  
  7284.  o VkpDeleteKeyboard 
  7285.  
  7286.  o VkpHideKeyboard 
  7287.  
  7288.  o VkpIsKbHidden 
  7289.  
  7290.  o VkpIsKbRunning 
  7291.  
  7292.  o VkpLoadKeyboard 
  7293.  
  7294.  o VkpCloseKb 
  7295.  
  7296.  o VkpQueryKbPos 
  7297.  
  7298.  o VkpSetKbPos 
  7299.  
  7300.  
  7301. ΓòÉΓòÉΓòÉ 22.1. VkpDeleteKeyboard ΓòÉΓòÉΓòÉ
  7302.  
  7303.  Syntax   rc = VkpDeleteKeyboard (PSZ pszKbd, HWND hwnd); 
  7304.  
  7305.  Purpose 
  7306.  
  7307.           This function deletes a keyboard data file from within the Pop-Up 
  7308.           Keyboard's memory. The supplied name must match a keyboard data file 
  7309.           kept within the Pop-Up Keyboard. If the requested keyboard data file 
  7310.           is the current keyboard being shown, then the default keyboard will 
  7311.           be used to replace the one being deleted. 
  7312.  
  7313.  Parameters 
  7314.  
  7315.           pszKbd (PSZ) - input 
  7316.                     A null-terminated string indicating the name of the 
  7317.                     keyboard data file to be deleted and unloaded. The file 
  7318.                     name must be a valid keyboard data file previously loaded 
  7319.                     into the Pop-Up Keyboard. 
  7320.  
  7321.           hwnd (HWND) - input 
  7322.                     The window handle of the window requesting the deletion of 
  7323.                     a keyboard from the Pop-Up Keyboard. 
  7324.  
  7325.           rc (APIRET) - return 
  7326.  
  7327.  Returns 
  7328.  
  7329.           Return codes indicating success or type of failure: 
  7330.  
  7331.           VKP_NO_ERROR                       Successful. 
  7332.  
  7333.           VKPERR_VKB_NOT_READY               Pop-Up Keyboard is not active. 
  7334.  
  7335.           VKPERR_INVALID_PARM                Invalid parameter passed to 
  7336.                                              function. 
  7337.  
  7338.  Remarks 
  7339.  
  7340.           None. 
  7341.  
  7342.  
  7343. ΓòÉΓòÉΓòÉ 22.2. VkpHideKeyboard ΓòÉΓòÉΓòÉ
  7344.  
  7345.  Syntax   rc = VkpHideKeyboard (HWND hwnd); 
  7346.  
  7347.  Purpose 
  7348.  
  7349.           This function places the Pop-Up Keyboard in a hidden mode if it is 
  7350.           currently visible. 
  7351.  
  7352.  Parameters 
  7353.  
  7354.           hwnd (HWND) - input 
  7355.                     The window handle of the window requesting the Pop-Up 
  7356.                     Keyboard to hide itself. 
  7357.  
  7358.           rc (APIRET) - return 
  7359.  
  7360.  Returns 
  7361.  
  7362.           Return codes indicating success or type of failure: 
  7363.  
  7364.           VKP_NO_ERROR                       Successful. 
  7365.  
  7366.           VKPERR_VKB_NOT_READY               Pop-Up Keyboard is not active. 
  7367.  
  7368.           VKPERR_INVALID_PARM                Invalid parameter passed to 
  7369.                                              function. 
  7370.  
  7371.  Remarks 
  7372.  
  7373.           None. 
  7374.  
  7375.  
  7376. ΓòÉΓòÉΓòÉ 22.3. VkpIsKbHidden ΓòÉΓòÉΓòÉ
  7377.  
  7378.  Syntax   rc = VkpIsKbHidden (PBOOL fHidden); 
  7379.  
  7380.  Purpose 
  7381.  
  7382.           This function determines if the Pop-up Keyboard is currently hidden 
  7383.           from view. 
  7384.  
  7385.  Parameters 
  7386.  
  7387.           fHidden (PBOOL) - output 
  7388.                     Pointer to a BOOL which on output contains one of the two 
  7389.                     following values: 
  7390.  
  7391.              True      Indicates that the Pop-Up Keyboard is in a hidden mode. 
  7392.  
  7393.              False     Indicates that the Pop-Up Keyboard is currently visible. 
  7394.  
  7395.           rc (APIRET) - return 
  7396.  
  7397.  Returns 
  7398.  
  7399.           Return codes indicating success or type of failure: 
  7400.  
  7401.           VKP_NO_ERROR                       Successful. 
  7402.  
  7403.           VKPERR_VKB_NOT_READY               Pop-Up Keyboard is not active. 
  7404.  
  7405.           VKPERR_WQWP_FAILED                 Cannot determine window position. 
  7406.  
  7407.           VKPERR_INVALID_PARM                Invalid parameter passed to 
  7408.                                              function. 
  7409.  
  7410.  Remarks 
  7411.  
  7412.           None. 
  7413.  
  7414.  
  7415. ΓòÉΓòÉΓòÉ 22.4. VkpIsKbRunning ΓòÉΓòÉΓòÉ
  7416.  
  7417.  Syntax   rc = VkpIsKbRunning (PBOOL fRunning); 
  7418.  
  7419.  Purpose 
  7420.  
  7421.           This function determines if the Pop-Up Keyboard is currently active. 
  7422.  
  7423.  Parameters 
  7424.  
  7425.           fRunning (PBOOL) - output 
  7426.                     Pointer to a BOOL which on output contains one of the two 
  7427.                     following values: 
  7428.  
  7429.              True      Indicates that the Pop-Up Keyboard is active. 
  7430.  
  7431.              False     Indicates that the Pop-Up Keyboard is not available for 
  7432.                        use. 
  7433.  
  7434.           rc (APIRET) - return 
  7435.  
  7436.  Returns 
  7437.  
  7438.           Return codes indicating success or type of failure: 
  7439.  
  7440.           VKP_NO_ERROR                       Successful. 
  7441.  
  7442.           VKPERR_INVALID_PARM                Invalid parameter passed to 
  7443.                                              function. 
  7444.  
  7445.  Remarks 
  7446.  
  7447.           None. 
  7448.  
  7449.  
  7450. ΓòÉΓòÉΓòÉ 22.5. VkpLoadKeyboard ΓòÉΓòÉΓòÉ
  7451.  
  7452.  Syntax   rc = VkpLoadKeyboard (PSZ pszKbdFname, HWND hwnd); 
  7453.  
  7454.  Purpose 
  7455.  
  7456.           This function displays the new keyboard from the input name.  The 
  7457.           given keyboard data file will be loaded from disk if needed. 
  7458.  
  7459.  Parameters 
  7460.  
  7461.           pszKbdFname (PSZ) - input 
  7462.                     An ASCIIZ string that contains the file name of the 
  7463.                     keyboard data file to be set as the current keyboard of the 
  7464.                     Pop-Up Keyboard. The location of the keyboard data file 
  7465.                     must be either given explicitly in the supplied file name 
  7466.                     or in the subdirectories assigned to the environment 
  7467.                     variable DPATH. 
  7468.  
  7469.                     A NULL value will indicate that the default keyboard should 
  7470.                     be set as the current keyboard. 
  7471.  
  7472.           hwnd (HWND) - input 
  7473.                     Window handle whose frame should be considered the owner of 
  7474.                     the Pop-Up Keyboard. 
  7475.  
  7476.           rc (APIRET) - return 
  7477.  
  7478.  Returns 
  7479.  
  7480.           Return codes indicating success or type of failure: 
  7481.  
  7482.           VKP_NO_ERROR                       Successful. 
  7483.  
  7484.           VKPERR_KBD_LOAD_FAILED             The keyboard load failed. 
  7485.  
  7486.           VKPERR_INVALID_PARM                Invalid parameter passed to 
  7487.                                              function. 
  7488.  
  7489.  Remarks 
  7490.  
  7491.           None. 
  7492.  
  7493.  
  7494. ΓòÉΓòÉΓòÉ 22.6. VkpCloseKb ΓòÉΓòÉΓòÉ
  7495.  
  7496.  Syntax   rc = VkpCloseKb (HWND hwnd); 
  7497.  
  7498.  Purpose 
  7499.  
  7500.           This function enables an application to close the Pop-Up Keyboard 
  7501.           tool. 
  7502.  
  7503.  Parameters 
  7504.  
  7505.           hwnd (HWND) - input 
  7506.                     Window handle of the window requesting the closure of the 
  7507.                     Pop-Up Keyboard. 
  7508.  
  7509.           rc (APIRET) - return 
  7510.  
  7511.  Returns 
  7512.  
  7513.           Return codes indicating success or type of failure: 
  7514.  
  7515.           VKP_NO_ERROR                       Successful. 
  7516.  
  7517.           VKPERR_VKB_NOT_READY               Pop-Up Keyboard is not active. 
  7518.  
  7519.           VKPERR_INVALID_OWNER               The HWND is not the current owner 
  7520.                                              of the Pop-Up Keyboard. 
  7521.  
  7522.           VKPERR_INVALID_PARM                Invalid parameter passed to 
  7523.                                              function. 
  7524.  
  7525.  Remarks 
  7526.  
  7527.           None. 
  7528.  
  7529.  
  7530. ΓòÉΓòÉΓòÉ 22.7. VkpQueryKbPos ΓòÉΓòÉΓòÉ
  7531.  
  7532.  Syntax   rc = VkpQueryKbPos (PSWP pswp); 
  7533.  
  7534.  Purpose 
  7535.  
  7536.           This function returns the current position of the Pop-Up Keyboard 
  7537.           frame in DESKTOP coordinates. 
  7538.  
  7539.  Parameters 
  7540.  
  7541.           pswp (PSWP) - output 
  7542.                     A pointer to a data structure of type SWP, that will 
  7543.                     receive the current position and size of the Pop-Up 
  7544.                     Keyboard window. 
  7545.  
  7546.           rc (APIRET) - return 
  7547.  
  7548.  Returns 
  7549.  
  7550.           Return codes indicating success or type of failure: 
  7551.  
  7552.           VKP_NO_ERROR                       Successful. 
  7553.  
  7554.           VKPERR_VKB_NOT_READY               Pop-Up Keyboard is not active. 
  7555.  
  7556.           VKPERR_WQWP_FAILED                 Cannot determine window position. 
  7557.  
  7558.           VKPERR_INVALID_PARM                Invalid parameter passed to 
  7559.                                              function. 
  7560.  
  7561.  Remarks 
  7562.  
  7563.           None. 
  7564.  
  7565.  
  7566. ΓòÉΓòÉΓòÉ 22.8. VkpSetKbPos ΓòÉΓòÉΓòÉ
  7567.  
  7568.  Syntax   rc = VkpSetKbPos (LONG x, LONG y, LONG cx, LONG cy, ULONG fs, 
  7569.  
  7570.                            HWND hwnd);
  7571.  
  7572.  Purpose 
  7573.  
  7574.           This function sets the Pop-Up Keyboard's position on the Desktop 
  7575.           based on the value passed. 
  7576.  
  7577.  Parameters 
  7578.  
  7579.           x (LONG) - input 
  7580.                     This value specifies the x position of the Pop-Up Keyboard 
  7581.                     relative to its lower-left corner.  This value is valid 
  7582.                     only if the SWP_MOVE flag is specified in the fs parameter. 
  7583.  
  7584.           y (LONG) - input 
  7585.                     This value specifies the y position of the Pop-Up Keyboard 
  7586.                     relative to its lower-left corner.  This value is valid 
  7587.                     only if the SWP_MOVE flag is specified in the fs parameter. 
  7588.  
  7589.           cx (LONG) - input 
  7590.                     This value specifies the horizontal size of the Pop-Up 
  7591.                     Keyboard.  If the given size is less that the set minimal 
  7592.                     size of the keyboard, the minimal size will be used.  This 
  7593.                     value is valid only if the SWP_SIZE flag is specified in 
  7594.                     the fs parameter. 
  7595.  
  7596.           cy (LONG) - input 
  7597.                     This value specifies the vertical size of the Pop-Up 
  7598.                     Keyboard.  If the given size is less that the set minimal 
  7599.                     size of the keyboard, the minimal size will be used.  This 
  7600.                     value is valid only if the SWP_SIZE flag is specified in 
  7601.                     the fs parameter. 
  7602.  
  7603.           fs (ULONG) - input 
  7604.                     This parameter specifies the Pop-Up Keyboard positioning 
  7605.                     options.  A subset of the flags specified by the 
  7606.                     Developer's Toolkit for OS/2 is used.  Any combination of 
  7607.                     the following can be used: 
  7608.  
  7609.              SWP_HIDE 
  7610.              SWP_MINIMIZE 
  7611.              SWP_MOVE 
  7612.              SWP_RESTORE 
  7613.              SWP_SHOW 
  7614.              SWP_SIZE 
  7615.  
  7616.           hwnd (HWND) - input 
  7617.                     The window handle of the window which is requesting to 
  7618.                     change the appearance of the Pop-Up Keyboard. 
  7619.  
  7620.           rc (APIRET) - return 
  7621.  
  7622.  Returns 
  7623.  
  7624.           Return codes indicating success or type of failure: 
  7625.  
  7626.           VKP_NO_ERROR                       Successful. 
  7627.  
  7628.           VKPERR_VKB_NOT_READY               Pop-Up Keyboard is not active. 
  7629.  
  7630.           VKPERR_INVALID_PARM                Invalid parameter passed to 
  7631.                                              function. 
  7632.  
  7633.  Remarks 
  7634.  
  7635.           None. 
  7636.  
  7637.  
  7638. ΓòÉΓòÉΓòÉ 23. Pen for OS/2 Setup Objects ΓòÉΓòÉΓòÉ
  7639.  
  7640. Several Workplace Shell objects make up the Pen for OS/2 system extension Setup 
  7641. Objects.  The interface to the Writing Subsystem consists of several objects in 
  7642. the System Setup folder and Pen for OS/2 folder.  These objects provide access 
  7643. to device-specific settings.  Also, the Pen Object class provides the user with 
  7644. the ability to edit the gesture mappings and overrides by program object. 
  7645.  
  7646.  
  7647. ΓòÉΓòÉΓòÉ 23.1. Overview of the Pen for OS/2 Setup Objects ΓòÉΓòÉΓòÉ
  7648.  
  7649. The current System Setup folder contains two objects representing the system 
  7650. input devices:  sound and mouse.  These objects allow the user to adjust 
  7651. certain device-specific parameters. 
  7652.  
  7653. In the Pen for OS/2 system extension, the current sound and mouse objects are 
  7654. replaced by subclasses of themselves (PenSound and PenMouse).  The new sound 
  7655. and mouse objects have an additional Settings page that allows the user to set 
  7656. Writing Subsystem parameters that are specific to the mouse and sound devices. 
  7657.  
  7658. Also in Pen for OS/2, the PenPenSubSystem object class allows the user to set 
  7659. Writing Subsystem and Recognition Subsystem parameters that globally affect the 
  7660. Pen for OS/2 subsystem, which means that all devices are affected. The 
  7661. relationship of the PenPenSubsystem class to the Pen for OS/2 system extension 
  7662. is analogous to the relationship between the wpSystem class to the OS/2 system. 
  7663. The following five additional object classes are provided to allow the user to 
  7664. set device-specific settings, such as button assignments and tap rates: 
  7665.  
  7666.  o PenButtonDevice 
  7667.  o PenLocator 
  7668.  o PenLocatorPen 
  7669.  o PenLocatorFinger 
  7670.  o PenDisplay 
  7671.  
  7672.  Finally, the PenObject class (which replaces the WPObject class) allows for 
  7673.  information to be associated with all object instances of the WPProgram and 
  7674.  WPProgramFile classes.  This data represents the user assignments of gestures 
  7675.  and the Writing Subsystem overrides to be used for any program object. 
  7676.  
  7677.  Pen for OS/2 system extension device objects are Workplace objects that 
  7678.  provide a means of communication between a computer and another piece of 
  7679.  equipment. The Locator object enables the configuration of barrel button 
  7680.  settings and hardware that is of the absolute locator device type (LOCTYPE_PEN 
  7681.  and LOCTYPE_FINGER). The Display object enables the configuration of LCD 
  7682.  display devices and bezel buttons and provides a means for the user to set the 
  7683.  timeout for the backlight. For more information, see Pen for OS/2 Device 
  7684.  Driver Reference. 
  7685.  
  7686.  
  7687. ΓòÉΓòÉΓòÉ 23.2. Programming Interfaces ΓòÉΓòÉΓòÉ
  7688.  
  7689. The programming interface to the new objects will be through Workplace Shell 
  7690. published methods.  The following documentation on the methods and overrides 
  7691. for these new methods is provided for the application programmer.  Refer to the 
  7692. OS/2 System Object Model Guide and Reference (SOM) for more information on how 
  7693. to subclass SOM and WPS objects. 
  7694.  
  7695. The Pen for OS/2 program introduces the following new classes into the OS/2 
  7696. Workplace Shell class hierarchy. 
  7697.  
  7698.  
  7699.       SOMObject
  7700.         Γöé
  7701.         ΓööΓöÇ WPObject (replaced by PenObject)
  7702.              Γöé
  7703.              ΓööΓöÇ WPAbstract
  7704.                   Γöé
  7705.                   Γö£ΓöÇ WPSound (replaced by PenSound)
  7706.                   Γöé
  7707.                   Γö£ΓöÇ WPMouse (replaced by PenMouse)
  7708.                   Γöé
  7709.                   Γö£ΓöÇ PenButtonDevice
  7710.                   Γöé    Γöé
  7711.                   Γöé    Γö£ΓöÇ PenLocator
  7712.                   Γöé    Γöé    Γöé
  7713.                   Γöé    Γöé    Γö£ΓöÇ PenLocatorPen
  7714.                   Γöé    Γöé    Γöé
  7715.                   Γöé    Γöé    ΓööΓöÇ PenLocatorFinger
  7716.                   Γöé    Γöé
  7717.                   Γöé    ΓööΓöÇ PenDisplay
  7718.                   Γöé
  7719.                   ΓööΓöÇ PenPenSubSystem
  7720. Pen for OS/2 Classes Into OS/2 Workplace Shell Class Hierarchy 
  7721.  
  7722. This document describes the programming interface to the following Pen for OS/2 
  7723. classes: 
  7724.  
  7725.  o PenObject 
  7726.  o PenSound 
  7727.  o PenMouse 
  7728.  o PenPenSubSystem 
  7729.  
  7730.  Refer to the Pen for OS/2 Device Driver Reference, for programming information 
  7731.  regarding the following Pen for OS/2 classes: 
  7732.  
  7733.  o PenButtonDevice 
  7734.  o PenLocator 
  7735.  o PenLocatorPen 
  7736.  o PenLocatorFinger 
  7737.  o PenDisplay 
  7738.  
  7739.  The following files are provided with the Pen for OS/2 Developer's Toolkit: 
  7740.  
  7741.  o PENOBJ.H and PENOBJ.SC for the WPObject object replacement class. 
  7742.  o PENSOUND.H and PENSOUND.SC for the WPSound object replacement class. 
  7743.  o WPMOUSEP.H and WPMOUSEP.SC for the WPMouse object replacement class. 
  7744.  o WPPENSYS.H and WPPENSYS.SC for the Customization object class. 
  7745.  o PENBTNDV.H and PENBTNDV.SC for the button device object class. 
  7746.  o WPDISPLAY.H and WPDISPLAY.SC for the display object class. 
  7747.  o WPLOCATR.H and WPLOCATR.SC for the locator object class. 
  7748.  o WPLOCPEN.H and WPLOCPEN.SC for the locator pen object class. 
  7749.  o WPLOCFGR.H and WPLOCFGR.SC for the locator finger object class. 
  7750.  
  7751.  
  7752. ΓòÉΓòÉΓòÉ 23.3. PenObject Object Class ΓòÉΓòÉΓòÉ
  7753.  
  7754. The PenObject object class will include these published methods and overrides: 
  7755.  
  7756.  The penAddObjectEventPage method 
  7757.          This method is called to allow the object to add the Gesture page to 
  7758.          its Settings notebook. This method can be called only from within an 
  7759.          override of the wpAddSettingsPages method.  The penAddObjectEventPage 
  7760.          method is overridden to replace or remove the Gesture page. 
  7761.  
  7762.  The penAddOverridesPage method 
  7763.          This method is called to allow the object to add the Overrides page to 
  7764.          its Settings notebook. This method can be called only from within an 
  7765.          override of the wpAddSettingsPages method.  The penAddOverridesPage 
  7766.          method is overridden to replace or remove the Overrides page. 
  7767.  
  7768.  The penInvokeGestureHelp method 
  7769.          This method is called to cause the Settings notebook to be opened to 
  7770.          the Gesture page.  This method must be overridden if the 
  7771.          penAddObjectEventPage method is overridden to remove the Gesture page, 
  7772.          because the penInvokeGestureHelp method refers to the Gesture page. 
  7773.  
  7774.  Override to the wpAddSettingsPages method 
  7775.          This method is overridden to insert the additional Settings pages. 
  7776.          When overriding, use the BKA_* notebook flags. 
  7777.  
  7778.  Override to the wpInitData method 
  7779.          This method is overridden to initialize the object for the Pen for 
  7780.          OS/2 system extension.  When overriding, call the parent first. 
  7781.  
  7782.  Override to the wpUnInitData method 
  7783.          This method is overridden to uninitialize (remove settings) the object 
  7784.          for the Pen for OS/2 system extension.  When overriding, call the 
  7785.          parent last. 
  7786.  
  7787.  Override to the wpCreateAnother method 
  7788.          This method is overridden to initialize the object for the Pen for 
  7789.          OS/2 system extension.  When overriding, call the parent first. 
  7790.  
  7791.  Override to the wpSaveState method 
  7792.          This method is overridden to save Pen for OS/2 system information for 
  7793.          the object.  When overriding, call the parent last. 
  7794.  
  7795.  Override to the wpRestoreState method 
  7796.          This method is overridden to restore Pen for OS/2 system information 
  7797.          for the object.  When overriding, call the parent first. parent .* 
  7798.          last. 
  7799.  
  7800.  Override to the wpFree method 
  7801.          This method is overridden to deallocate Pen for OS/2 system 
  7802.          information for the object.  When overriding, call the parent last. 
  7803.  
  7804.  
  7805. ΓòÉΓòÉΓòÉ 23.4. penAddObjectEventPage ΓòÉΓòÉΓòÉ
  7806.  
  7807.  Syntax 
  7808.  
  7809.                     ULONG penAddObjectEventPage (PenObject * self, HWND
  7810.                             hwndNotebook, PVOID pReserved), name lookup
  7811.  
  7812.  Purpose 
  7813.  
  7814.           The penAddObjectEventPage method is called to allow the object to add 
  7815.           the first Gesture page to its Settings notebook. 
  7816.  
  7817.  Parameters 
  7818.  
  7819.           self (PenObject *) - input 
  7820.                     The pointer to the instance object. 
  7821.  
  7822.           hwndNoteBook (HWND) - input 
  7823.                     The handle of the notebook in which to insert the page. 
  7824.  
  7825.           pReserved (PVOID) - input 
  7826.                     Reserved. 
  7827.  
  7828.  Returns 
  7829.  
  7830.           Page identifier: 
  7831.  
  7832.           0         Error occurred. 
  7833.  
  7834.           PageId    Identifier for the inserted page. 
  7835.  
  7836.  Remarks 
  7837.  
  7838.           None. 
  7839.  
  7840.  Usage 
  7841.  
  7842.           This method can be called only from within an override of the 
  7843.           wpAddSettingsPages method. 
  7844.  
  7845.  Override 
  7846.  
  7847.           This method is overridden to replace or remove the first Gesture 
  7848.           page.  To remove the page, return SETTINGS_PAGE_REMOVED, without 
  7849.           calling the parent. 
  7850.  
  7851.  Related Methods 
  7852.  
  7853.           o penInvokeGestureHelp 
  7854.  
  7855.  
  7856. ΓòÉΓòÉΓòÉ 23.5. penInvokeGestureHelp ΓòÉΓòÉΓòÉ
  7857.  
  7858.  Syntax   ULONG penInvokeGestureHelp (PenObject * self), name lookup 
  7859.  
  7860.  Purpose 
  7861.  
  7862.           The penInvokeGestureHelp method is called to cause the Settings 
  7863.           notebook to be opened to the Gesture page. 
  7864.  
  7865.  Parameters 
  7866.  
  7867.           self (PenObject *) - input 
  7868.                     The pointer to the instance object. 
  7869.  
  7870.  Returns 
  7871.  
  7872.           Success indicator: 
  7873.  
  7874.           1         Successful completion. 
  7875.  
  7876.           0         Error occurred. 
  7877.  
  7878.  Remarks 
  7879.  
  7880.           None. 
  7881.  
  7882.  Usage 
  7883.  
  7884.           This method may be called at any time. 
  7885.  
  7886.  Override 
  7887.  
  7888.           If the Gesture page is removed from the object, this method should be 
  7889.           overridden also.  This will prevent the Gesture page from being 
  7890.           invoked through gesturing. 
  7891.  
  7892.  Related Methods 
  7893.  
  7894.           o penAddObjectEventPage 
  7895.  
  7896.  
  7897. ΓòÉΓòÉΓòÉ 23.6. penAddOverridesPage ΓòÉΓòÉΓòÉ
  7898.  
  7899.  Syntax   ULONG penAddOverridesPage (PenObject * self, HWND hwndNotebook) 
  7900.  
  7901.  Purpose 
  7902.  
  7903.           The penAddOverridesPage method is called to allow the object to add 
  7904.           the Overrides page to its Settings notebook. 
  7905.  
  7906.  Parameters 
  7907.  
  7908.           self (PenObject *) - input 
  7909.                     The pointer to the instance object. 
  7910.  
  7911.           hwndNoteBook (HWND) - input 
  7912.                     The handle of the notebook in which to insert the page. 
  7913.  
  7914.  Returns 
  7915.  
  7916.           Page identifier: 
  7917.  
  7918.           0         Error occurred. 
  7919.  
  7920.           PageId    Identifier for the inserted page. 
  7921.  
  7922.  Remarks 
  7923.  
  7924.           None. 
  7925.  
  7926.  Usage 
  7927.  
  7928.           This method can be called only from within an override of the 
  7929.           wpAddSettingsPages method. 
  7930.  
  7931.  Override 
  7932.  
  7933.           This method is overridden to replace or remove the Overrides page. 
  7934.           To remove the page, return SETTINGS_PAGE_REMOVED, without calling the 
  7935.           parent. 
  7936.  
  7937.  Related Methods 
  7938.  
  7939.           None. 
  7940.  
  7941.  
  7942. ΓòÉΓòÉΓòÉ 23.7. PenSound Object Class ΓòÉΓòÉΓòÉ
  7943.  
  7944. The PenSound object class will include these published methods and overrides: 
  7945.  
  7946.  The penAddPenPauseBeepPage method 
  7947.          This method is called to allow the object to add the Pause Beep page 
  7948.          to its Settings notebook. This method can be called only from within 
  7949.          an override of the wpAddSettingsPages method.  The 
  7950.          penAddPenPauseBeepPage method is overridden to replace or remove the 
  7951.          Pause Beep page. 
  7952.  
  7953.  Override to the wpAddSettingsPages method 
  7954.          This method is overridden to insert the additional Settings pages. 
  7955.          When overriding, call the parent first to insert pages added at the 
  7956.          top of the notebook, or call the parent last to insert pages added at 
  7957.          the bottom of the notebook. 
  7958.  
  7959.  Override to the wpInitData method 
  7960.          This method is overridden to initialize Pen for OS/2 system 
  7961.          information.  When overriding, call the parent first. 
  7962.  
  7963.  Override to the wpSaveState method 
  7964.          This method is overridden to save Pen for OS/2 system information. 
  7965.          When overriding, call the parent last. 
  7966.  
  7967.  Override to the wpRestoreState method 
  7968.          This method is overridden to restore Pen for OS/2 system information. 
  7969.          When overriding, call the parent first. 
  7970.  
  7971.  
  7972. ΓòÉΓòÉΓòÉ 23.8. penAddPenPauseBeepPage ΓòÉΓòÉΓòÉ
  7973.  
  7974.  Syntax   ULONG penAddPenPauseBeepPage (PenSound * self, HWND hwndNotebook) 
  7975.  
  7976.  Purpose 
  7977.  
  7978.           The penAddPenPauseBeepPage method is called to allow the object to 
  7979.           add the Pause Beep page to its Settings notebook. 
  7980.  
  7981.  Parameters 
  7982.  
  7983.           self (PenSound *) - input 
  7984.                     The pointer to the instance object. 
  7985.  
  7986.           hwndNoteBook (HWND) - input 
  7987.                     The handle of the notebook in which to insert the page. 
  7988.  
  7989.  Returns 
  7990.  
  7991.           Page identifier: 
  7992.  
  7993.           0         Error occurred. 
  7994.  
  7995.           PageId    Identifier for the inserted page. 
  7996.  
  7997.  Remarks 
  7998.  
  7999.           None. 
  8000.  
  8001.  Usage 
  8002.  
  8003.           This method can be called only from within an override of the 
  8004.           wpAddSettingsPages method. 
  8005.  
  8006.  Override 
  8007.  
  8008.           This method is overridden to replace or remove the Pause Beep page. 
  8009.           To remove the page, return SETTINGS_PAGE_REMOVED, without calling the 
  8010.           parent. 
  8011.  
  8012.  Related Methods 
  8013.  
  8014.           None. 
  8015.  
  8016.  
  8017. ΓòÉΓòÉΓòÉ 23.9. PenMouse Object Class ΓòÉΓòÉΓòÉ
  8018.  
  8019. The PenMouse object class will include these published methods and overrides: 
  8020.  
  8021.  The penAddMousePenTimingPage method 
  8022.          This method is called to allow the object to add the Pen Timing page 
  8023.          to its Settings notebook. This method can be called only from within 
  8024.          an override of the wpAddSettingsPages method.  The 
  8025.          penAddMousePenTimingPage method is overridden to replace or remove the 
  8026.          Pen Timing page. 
  8027.  
  8028.  Override to the wpAddSettingsPages method 
  8029.          This method is overridden to insert the additional Settings pages. 
  8030.          When overriding, call the parent first to insert pages added at the 
  8031.          top of the notebook, or call the parent last to insert pages added at 
  8032.          the bottom of the notebook. 
  8033.  
  8034.  Override to the wpAddMouseTimingPage method 
  8035.          This method is overridden to add the Pen Timing page as page 2 of the 
  8036.          Timing page.  When overriding, call the parent last. 
  8037.  
  8038.  Override to the wpInsertSettingsPage method 
  8039.          This method is overridden to add the page number to the Timing page. 
  8040.          When overriding, call the parent first. 
  8041.  
  8042.  
  8043. ΓòÉΓòÉΓòÉ 23.10. penAddMousePenTimingPage ΓòÉΓòÉΓòÉ
  8044.  
  8045.  Syntax 
  8046.  
  8047.                     ULONG penAddMousePenTimingPage (PenMouse * self, HWND
  8048.                             hwndNotebook)
  8049.  
  8050.  Purpose 
  8051.  
  8052.           The penAddMousePenTimingPage method is called to allow the object to 
  8053.           add the Pen Timing page to its Settings notebook. 
  8054.  
  8055.  Parameters 
  8056.  
  8057.           self (PenMouse *) - input 
  8058.                     The pointer to the instance object. 
  8059.  
  8060.           hwndNoteBook (HWND) - input 
  8061.                     The handle of the notebook in which to insert the page. 
  8062.  
  8063.  Returns 
  8064.  
  8065.           Page identifier: 
  8066.  
  8067.           0         Error occurred. 
  8068.  
  8069.           PageId    Identifier for the inserted page. 
  8070.  
  8071.  Remarks 
  8072.  
  8073.           None. 
  8074.  
  8075.  Usage 
  8076.  
  8077.           This method can be called only from within an override of the 
  8078.           wpAddSettingsPages method. 
  8079.  
  8080.  Override 
  8081.  
  8082.           This method is overridden to replace or remove the Pen Timing page. 
  8083.           To remove the page, return SETTINGS_PAGE_REMOVED, without calling the 
  8084.           parent. 
  8085.  
  8086.  Related Methods 
  8087.  
  8088.           None. 
  8089.  
  8090.  
  8091. ΓòÉΓòÉΓòÉ 23.11. PenPenSubSystem Object Class ΓòÉΓòÉΓòÉ
  8092.  
  8093. The PenPenSubSystem object is a new class and is a child of the WPAbstract 
  8094. class.  It will have these published methods and overrides: 
  8095.  
  8096.  The penAddPenFeedback2Page method 
  8097.          This method is called to allow the object to add the Feedback page to 
  8098.          its Settings notebook. This method can be called only from within an 
  8099.          override of the wpAddSettingsPages method.  The penAddPenFeedback2Page 
  8100.          method is overridden to replace or remove the Feedback page. 
  8101.  
  8102.  The penAddPenTimeouts1Page method 
  8103.          This method is called to allow the object to add the Timeouts page to 
  8104.          its Settings notebook. This method can be called only from within an 
  8105.          override of the wpAddSettingsPages method.  The penAddPenTimeouts1Page 
  8106.          method is overridden to replace or remove the Timeouts page. 
  8107.  
  8108.  The penAddObjectEventPage method 
  8109.          This method is called to allow the object to add the first Gesture 
  8110.          page to its Settings notebook. This method can be called only from 
  8111.          within an override of the wpAddSettingsPages method.  The 
  8112.          penAddObjectEventPage method is overridden to replace or remove the 
  8113.          first Gesture page. 
  8114.  
  8115.  The penAddObjectEventPage2 method 
  8116.          This method is called to allow the object to add the second through 
  8117.          the fourth Gesture pages to its Settings notebook.  This method can be 
  8118.          called only from within an override of the wpAddSettingsPages method. 
  8119.          The penAddObjectEventPage2 method is overridden to replace or remove 
  8120.          the second through the fourth Gesture pages.  If the 
  8121.          penAddObjectEventPage method is overridden to remove the first Gesture 
  8122.          page, then to complete the procedure you would override this method to 
  8123.          remove the second through the fourth Gesture pages. 
  8124.  
  8125.  The penInvokeGestureHelp method 
  8126.          This method is called to cause the Settings notebook to be opened to 
  8127.          the Gesture page.  This method must be overridden if the 
  8128.          penAddObjectEventPage method is overridden to remove the Gesture page, 
  8129.          because the penAddObjectEventPage method refers to the Gesture page. 
  8130.  
  8131.  The penAddTrainingPage method 
  8132.          This method is called to allow the object to add the Training page to 
  8133.          its Settings notebook. This method can be called only from within an 
  8134.          override of the wpAddSettingsPages method.  The penAddTrainingPage 
  8135.          method is overridden to replace or remove the Training page. 
  8136.  
  8137.  Override to the wpAddSettingsPages method 
  8138.          This method is overridden in order to insert the additional Settings 
  8139.          pages.  When overriding, call the parent first to insert pages added 
  8140.          at the top of the notebook, or call the parent last to insert pages 
  8141.          added at the bottom of the notebook. 
  8142.  
  8143.  Override to the wpAddObjectWindowPage method 
  8144.          This method is overridden in order to remove the Window page from the 
  8145.          Settings notebook.  It returns SETTINGS_PAGE_REMOVED, without calling 
  8146.          the parent. 
  8147.  
  8148.  Override to the wpFilterPopupMenu method 
  8149.          This method is overridden to filter out unwanted menu options.  When 
  8150.          overriding, call the parent first. 
  8151.  
  8152.  Override to the wpclsQueryDefaultHelp class method 
  8153.          This method is overridden in order to set the help library for the 
  8154.          class. 
  8155.  
  8156.  Override to the wpclsQueryDefaultView class method 
  8157.          This method is overridden in order to set the default view for the 
  8158.          class to OPEN_SETTINGS.  When overriding, return a valid view. 
  8159.  
  8160.  Override to the wpclsQueryIconData class method 
  8161.          This method is overridden to set the icon for the class.  When 
  8162.          overriding, the correct size of the ICONINFO structure must be 
  8163.          returned. 
  8164.  
  8165.  Override to the wpclsQueryStyle class method 
  8166.          This method is overridden in order to set the default object style for 
  8167.          the class.  When overriding, call the parent first. 
  8168.  
  8169.  Override to the wpclsQueryTitle class method 
  8170.          This method is overridden in order to set the default title for the 
  8171.          class.  When overriding, return a pointer of a valid string. 
  8172.  
  8173.  
  8174. ΓòÉΓòÉΓòÉ 23.12. penAddFeedback2Page ΓòÉΓòÉΓòÉ
  8175.  
  8176.  Syntax 
  8177.  
  8178.                     ULONG penAddFeedBack2Page (PenPenSubSystem * self, HWND
  8179.                             hwndNotebook)
  8180.  
  8181.  Purpose 
  8182.  
  8183.           The penAddPenFeedback2Page method is called to allow the object to 
  8184.           add the Feedback page to its Settings notebook. 
  8185.  
  8186.  Parameters 
  8187.  
  8188.           self (PenPenSubSystem *) - input 
  8189.                     The pointer to the instance object. 
  8190.  
  8191.           hwndNoteBook (HWND) - input 
  8192.                     The handle of the notebook in which to insert the page. 
  8193.  
  8194.  Returns 
  8195.  
  8196.           Page identifier: 
  8197.  
  8198.           0         Error occurred. 
  8199.  
  8200.           PageId    Identifier for the inserted page. 
  8201.  
  8202.  Remarks 
  8203.  
  8204.           None. 
  8205.  
  8206.  Usage 
  8207.  
  8208.           This method can be called only from within an override of the 
  8209.           wpAddSettingsPages method. 
  8210.  
  8211.  Override 
  8212.  
  8213.           This method is overridden to replace or remove the Feedback page. To 
  8214.           remove the page, return SETTINGS_PAGE_REMOVED, without calling the 
  8215.           parent. 
  8216.  
  8217.  Related Methods 
  8218.  
  8219.           None. 
  8220.  
  8221.  
  8222. ΓòÉΓòÉΓòÉ 23.13. penAddTimeouts1Page ΓòÉΓòÉΓòÉ
  8223.  
  8224.  Syntax 
  8225.  
  8226.                     ULONG penAddTimeouts1Page (PenPenSubSystem * self, HWND
  8227.                             hwndNotebook)
  8228.  
  8229.  Purpose 
  8230.  
  8231.           The penAddPenTimeouts1Page method is called to allow the object to 
  8232.           add the Timeouts page to its Settings notebook. 
  8233.  
  8234.  Parameters 
  8235.  
  8236.           self (PenPenSubSystem *) - input 
  8237.                     The pointer to the instance object. 
  8238.  
  8239.           hwndNoteBook (HWND) - input 
  8240.                     The handle of the notebook in which to insert the page. 
  8241.  
  8242.  Returns 
  8243.  
  8244.           Page identifier: 
  8245.  
  8246.           0         Error occurred. 
  8247.  
  8248.           PageId    Identifier for the inserted page. 
  8249.  
  8250.  Remarks 
  8251.  
  8252.           None. 
  8253.  
  8254.  Usage 
  8255.  
  8256.           This method can be called only from within an override of the 
  8257.           wpAddSettingsPages method. 
  8258.  
  8259.  Override 
  8260.  
  8261.           This method is overridden to replace or remove the Timeouts page. To 
  8262.           remove the page, return SETTINGS_PAGE_REMOVED, without calling the 
  8263.           parent. 
  8264.  
  8265.  Related Methods 
  8266.  
  8267.           None. 
  8268.  
  8269.  
  8270. ΓòÉΓòÉΓòÉ 23.14. penAddObjectEventPage ΓòÉΓòÉΓòÉ
  8271.  
  8272.  Syntax 
  8273.  
  8274.                     ULONG penAddObjectEventPage (PenPenSubSystem * self,
  8275.                             HWND hwndNotebook, PVOID pReserved), name lookup
  8276.  
  8277.  Purpose 
  8278.  
  8279.           The penAddObjectEventPage method is called to allow the object to add 
  8280.           the first Gesture page to its Settings notebook. 
  8281.  
  8282.  Parameters 
  8283.  
  8284.           self (PenPenSubSystem *) - input 
  8285.                     The pointer to the instance object. 
  8286.  
  8287.           hwndNoteBook (HWND) - input 
  8288.                     The handle of the notebook in which to insert the page. 
  8289.  
  8290.           pReserved (PVOID) - input 
  8291.                     Reserved. 
  8292.  
  8293.  Returns 
  8294.  
  8295.           Page identifier: 
  8296.  
  8297.           0         Error occurred. 
  8298.  
  8299.           PageId    Identifier for the inserted page. 
  8300.  
  8301.  Remarks 
  8302.  
  8303.           None. 
  8304.  
  8305.  Usage 
  8306.  
  8307.           This method can be called only from within an override of the 
  8308.           wpAddSettingsPages method. 
  8309.  
  8310.  Override 
  8311.  
  8312.           This method is overridden to replace or remove the first Gesture 
  8313.           page. If this method is overridden to remove the first Gesture page, 
  8314.           then to complete the procedure you would override the 
  8315.           penAddObjectEventPage2 method to remove the second through the fourth 
  8316.           Gesture pages.  To remove the page, return SETTINGS_PAGE_REMOVED, 
  8317.           without calling the parent.  The penInvokeGestureHelp method must 
  8318.           also be overridden if this page is removed. 
  8319.  
  8320.  Related Methods 
  8321.  
  8322.           o penAddObjectEventPage2 
  8323.           o penInvokeGestureHelp 
  8324.  
  8325.  
  8326. ΓòÉΓòÉΓòÉ 23.15. penAddObjectEventPage2 ΓòÉΓòÉΓòÉ
  8327.  
  8328.  Syntax 
  8329.  
  8330.                     ULONG penAddObjectEventPage2 (PenPenSubSystem * self,
  8331.                             HWND hwndNotebook, PVOID pReserved), name lookup
  8332.  
  8333.  Purpose 
  8334.  
  8335.           The penAddObjectEventPage method is called to allow the object to add 
  8336.           the second through the fourth Gesture pages to its Settings notebook. 
  8337.  
  8338.  Parameters 
  8339.  
  8340.           self (PenPenSubSystem *) - input 
  8341.                     The pointer to the instance object. 
  8342.  
  8343.           hwndNoteBook (HWND) - input 
  8344.                     The handle of the notebook in which to insert the page. 
  8345.  
  8346.           pReserved (PVOID) - input 
  8347.                     Reserved. 
  8348.  
  8349.  Returns 
  8350.  
  8351.           Page identifier: 
  8352.  
  8353.           0         Error occurred. 
  8354.  
  8355.           PageId    Identifier for the inserted page. 
  8356.  
  8357.  Remarks 
  8358.  
  8359.           None. 
  8360.  
  8361.  Usage 
  8362.  
  8363.           This method can be called only from within an override of the 
  8364.           wpAddSettingsPages method. 
  8365.  
  8366.  Override 
  8367.  
  8368.           This method is overridden to replace or remove the second through the 
  8369.           fourth Gesture pages.  If the penAddObjectEventPage method is 
  8370.           overridden to remove the first Gesture page, then to complete the 
  8371.           procedure you would override the penAddObjectEventPage2 method to 
  8372.           remove the second through the fourth Gesture pages.  To remove the 
  8373.           pages, return SETTINGS_PAGE_REMOVED, without calling the parent. 
  8374.  
  8375.  Related Methods 
  8376.  
  8377.           o penAddObjectEventPage 
  8378.  
  8379.  
  8380. ΓòÉΓòÉΓòÉ 23.16. penInvokeGestureHelp ΓòÉΓòÉΓòÉ
  8381.  
  8382.  Syntax 
  8383.  
  8384.                     ULONG penInvokeGestureHelp (PenPenSubSystem* self, HOBJECT hObject),
  8385.                             name lookup
  8386.  
  8387.           The penInvokeGestureHelp method is called to cause the Settings 
  8388.           notebook to be opened to the Gesture page. 
  8389.  
  8390.  Parameters 
  8391.  
  8392.           self (PenPenSubSystem *) - input 
  8393.                     The pointer to the instance object. 
  8394.  
  8395.           hObject (HOBJECT) - input 
  8396.                     Contains one of the following values: 
  8397.  
  8398.              REBHOBJ_OS2 
  8399.              REDHOBJ_WIN 
  8400.              REDHOBJ_DOS 
  8401.              REDHOBJ_PM 
  8402.  
  8403.  Returns 
  8404.  
  8405.           Success indicator: 
  8406.  
  8407.           1         Successful completion. 
  8408.  
  8409.           0         Error occurred. 
  8410.  
  8411.  Remarks 
  8412.  
  8413.           None. 
  8414.  
  8415.  Usage 
  8416.  
  8417.           This method may be called at any time. 
  8418.  
  8419.  Override 
  8420.  
  8421.           If the Gesture page is removed from the object, then this method 
  8422.           should be overridden to prevent Gesture from being invoked.  Return 
  8423.           the value 1, without calling the parent. 
  8424.  
  8425.  Related Methods 
  8426.  
  8427.           o penAddObjectEventPage 
  8428.  
  8429.  
  8430. ΓòÉΓòÉΓòÉ 23.17. penAddTrainingPage ΓòÉΓòÉΓòÉ
  8431.  
  8432.  Syntax 
  8433.  
  8434.                     ULONG penAddTrainingPage (PenPenSubSystem * self, HWND
  8435.                             hwndNotebook)
  8436.  
  8437.  Purpose 
  8438.  
  8439.           The penAddTrainingPage method is called to allow the object to add 
  8440.           the Training page to its Settings notebook. 
  8441.  
  8442.  Parameters 
  8443.  
  8444.           self (PenPenSubSystem *) - input 
  8445.                     The pointer to the instance object. 
  8446.  
  8447.           hwndNoteBook (HWND) - input 
  8448.                     The handle of the notebook in which to insert the page. 
  8449.  
  8450.  Returns 
  8451.  
  8452.           Success indicator: 
  8453.  
  8454.           0         Error occurred. 
  8455.  
  8456.           PageId    Identifier for the inserted page. 
  8457.  
  8458.  Remarks 
  8459.  
  8460.           None. 
  8461.  
  8462.  Usage 
  8463.  
  8464.           This method can be called only from within an override of the 
  8465.           wpAddSettingsPages method. 
  8466.  
  8467.  Override 
  8468.  
  8469.           This method is overridden to replace or remove the Training page. To 
  8470.           remove the page, return SETTINGS_PAGE_REMOVED, without calling the 
  8471.           parent. 
  8472.  
  8473.  Related Methods 
  8474.  
  8475.           None. 
  8476.  
  8477.  
  8478. ΓòÉΓòÉΓòÉ 24. Appendix A. Pen for OS/2 Libraries and Header Files ΓòÉΓòÉΓòÉ
  8479.  
  8480. The Pen for OS/2 system extension libraries and header files are described in 
  8481. this section. 
  8482.  
  8483.  
  8484. ΓòÉΓòÉΓòÉ 24.1. Toolkit Installation ΓòÉΓòÉΓòÉ
  8485.  
  8486. The Pen for OS/2 Toolkit installation provides the header files, the import 
  8487. library files and the class definitions files. 
  8488.  
  8489.  
  8490. ΓòÉΓòÉΓòÉ 24.2. Compiler Options ΓòÉΓòÉΓòÉ
  8491.  
  8492. Pen for OS/2 declares structures as packed on a word boundary.  The application 
  8493. needs to use the same pack definition in the compile statement or pack on a 
  8494. byte boundary. 
  8495.  
  8496.  
  8497. ΓòÉΓòÉΓòÉ 24.3. Header Files ΓòÉΓòÉΓòÉ
  8498.  
  8499. Pen for OS/2 header files are listed and a brief description is provided: 
  8500.  
  8501.  PENPM.H          This header file is included in all modules that use Pen for 
  8502.                   OS/2. 
  8503.  
  8504.  PENPMORD.H       This header contains a list of ordinal entry points for the 
  8505.                   different functions of Pen for OS/2. 
  8506.  
  8507.  
  8508. ΓòÉΓòÉΓòÉ 24.4. Pen for OS/2 Object Class Hierarchy ΓòÉΓòÉΓòÉ
  8509.  
  8510. The following diagram lists a portion of the predefined object classes in a 
  8511. hierarchical order. 
  8512.  
  8513. ΓöÇΓöÇSOMObject
  8514.     ΓööΓöÇWPObject
  8515.         Γö£ΓöÇPenObject
  8516.         ΓööΓöÇWPAbstract
  8517.             Γö£ΓöÇPenPenSubSystem
  8518.             Γö£ΓöÇPenButtonDevice
  8519.             Γöé   Γö£ΓöÇPenLocator
  8520.             Γöé   Γöé   Γö£ΓöÇPenLocatorPen
  8521.             Γöé   Γöé   ΓööΓöÇPenLocatorFinger
  8522.             Γöé   ΓööΓöÇPenDisplay
  8523.             Γö£ΓöÇWPSound
  8524.             Γöé   ΓööΓöÇPenSound
  8525.             ΓööΓöÇWPMouse
  8526.                 ΓööΓöÇPenMouse
  8527.  
  8528. The following table provides the class branch, the file extensions, the file 
  8529. class, and the parent. 
  8530.  
  8531. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8532. Γöé CLASS-STEM Γöé FILE EXTENSIONS Γöé CLASS            Γöé PARENT           Γöé
  8533. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8534. Γöé PENOBJ     Γöé .H     Γöé .SC    Γöé PenObject        Γöé WPObject         Γöé
  8535. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8536. Γöé WPPENSYS   Γöé .H     Γöé .SC    Γöé PenPenSubSystem  Γöé WPAbstract       Γöé
  8537. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8538. Γöé PENBTNDV   Γöé .H     Γöé .SC    Γöé PenButtonDevice  Γöé WPAbstract       Γöé
  8539. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8540. Γöé WPMOUSEP   Γöé .H     Γöé .SC    Γöé PenMouse         Γöé WPMouse          Γöé
  8541. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8542. Γöé PENSOUND   Γöé .H     Γöé .SC    Γöé PenSound         Γöé WPSound          Γöé
  8543. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8544. Γöé WPLOCPEN   Γöé .H     Γöé .SC    Γöé PenLocatorPen    Γöé PenLocator       Γöé
  8545. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8546. Γöé WPLOCFGR   Γöé .H     Γöé .SC    Γöé PenLocatorFinger Γöé PenLocator       Γöé
  8547. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8548. Γöé WPLOCATR   Γöé .H     Γöé .SC    Γöé PenLocator       Γöé PenButtonDevice  Γöé
  8549. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8550. Γöé WPDISPLY   Γöé .H     Γöé .SC    Γöé PenDisplay       Γöé PenButtonDevice  Γöé
  8551. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8552.  
  8553.  
  8554. ΓòÉΓòÉΓòÉ 24.5. Library Support ΓòÉΓòÉΓòÉ
  8555.  
  8556. The Pen for OS/2 library provides libraries for your application to link to Pen 
  8557. for OS/2. 
  8558.  
  8559.  
  8560. ΓòÉΓòÉΓòÉ 24.5.1. Stub Linkage ΓòÉΓòÉΓòÉ
  8561.  
  8562. The stub linkage provided is PENPMST.LIB. This stub library maps all Pen for 
  8563. OS/2 entry points for the Wrtxxx, Redxxx, and Vkpxxx calls defined in 
  8564. PENPM.DLL.  The stub library checks if Pen for OS/2 is installed and jumps to 
  8565. the dynamically loaded function code or returns an error, 
  8566. WRTERR_PEN_NOT_INSTALLED, to the caller if Pen for OS/2 is not installed. 
  8567.  
  8568.  
  8569. ΓòÉΓòÉΓòÉ 24.5.2. Load-Time Linkage ΓòÉΓòÉΓòÉ
  8570.  
  8571. The load-time linkage provided is PENPM.LIB.  This import library is used on 
  8572. load-time linkage for any module making use of Pen for OS/2 defined in 
  8573. PENPM.DLL.  The APIs provided are Pen Writing Subsystem (Wrtxxx), Recognition 
  8574. Event Delivery (Redxxx), Virtual Keyboard Playback (Vkpxxx), and Workplace 
  8575. Methods (M_Penxxx and Penxxx). 
  8576.  
  8577.  
  8578. ΓòÉΓòÉΓòÉ 24.5.3. Run-Time Linkage ΓòÉΓòÉΓòÉ
  8579.  
  8580. Run-time linking allows an application to load PENPM.DLL when it is required. 
  8581. The application uses the DosLoadModule function to load the DLL and uses the 
  8582. DosQueryProcAddr function to obtain a pointer to the desired Pen for OS/2 
  8583. function.  The function can also be referenced by its ordinal value defined in 
  8584. PENPMORD.H. 
  8585.  
  8586.  
  8587. ΓòÉΓòÉΓòÉ 24.6. Library Usage ΓòÉΓòÉΓòÉ
  8588.  
  8589. This section provides instruction on linking the Pen for OS/2 libraries 
  8590. dependent on your system. 
  8591.  
  8592.  
  8593. ΓòÉΓòÉΓòÉ 24.6.1. Mixed Mode Applications ΓòÉΓòÉΓòÉ
  8594.  
  8595. A pen-aware application that supports Pen for OS/2 that also needs to run when 
  8596. Pen for OS/2 is not installed should link with the static-stub library 
  8597. PENPMST.LIB and should issue the function call WrtWaitActive to determine if 
  8598. Pen for OS/2 is up and running. 
  8599.  
  8600. If Pen for OS/2 is not installed, the function call WrtWaitActive with a 
  8601. timeout of a few seconds, (for example, 15 seconds) will return 
  8602. WRTERR_PEN_NOT_INSTALLED and any other function call defined in the static-stub 
  8603. library PENPMST.LIB will return an error.  The application could, for example, 
  8604. grey out pen-aware menu controls when Pen for OS/2 is not installed and take 
  8605. other appropriate actions. 
  8606.  
  8607. If Pen for OS/2 is installed, the function call WrtWaitActive (ulTimeout) with 
  8608. a timeout of a few seconds, (for example, 15 seconds) will return immediately 
  8609. and any other function call defined in the static-stub library PENPMST.LIB will 
  8610. call the appropriate API. 
  8611.  
  8612.  
  8613. ΓòÉΓòÉΓòÉ 24.6.2. Pen-aware Applications ΓòÉΓòÉΓòÉ
  8614.  
  8615. A pen-aware application that requires Pen for OS/2 in order to run should link 
  8616. with PENPM.LIB. The application should also issue the function call 
  8617. WrtWaitActive to determine if Pen for OS/2 is up and running. If Pen for OS/2 
  8618. is installed, the function call WrtWaitActive (ulTimeout) with a timeout of a 
  8619. few seconds, (for example, 15 seconds) will return immediately and any other 
  8620. function call defined in the library PENPM.LIB will be available to the 
  8621. application. An attempt to run a program that has been linked with PENPM.LIB on 
  8622. a system without Pen for OS/2 will result in the OS/2 loader failing to load 
  8623. the program. 
  8624.  
  8625.  
  8626. ΓòÉΓòÉΓòÉ 25. Appendix B. Notices ΓòÉΓòÉΓòÉ
  8627.  
  8628. References in this publication to IBM products, programs, or services do not 
  8629. imply that IBM intends to make these available in all countries in which IBM 
  8630. operates. Any reference to an IBM product, program or service is not intended 
  8631. to state or imply that only IBM's product, program, or service may be used. Any 
  8632. functionally equivalent product, program, or service that does not infringe any 
  8633. of IBM's intellectual property rights or other legally protectable rights may 
  8634. be used instead of the IBM product, program, or service. Evaluation and 
  8635. verification of operation in conjunction with other products, programs, or 
  8636. services, except those expressly designated by IBM, are the user's 
  8637. responsibility. 
  8638.  
  8639. IBM may have patents or pending patent applications covering subject matter in 
  8640. this document. The furnishing of this document does not give you any license to 
  8641. these patents. You can send license inquiries, in writing, to the IBM Director 
  8642. of Commercial Relations, IBM Corporation, Purchase, NY 10577. 
  8643.  
  8644.  
  8645. ΓòÉΓòÉΓòÉ 25.1. Trademarks ΓòÉΓòÉΓòÉ
  8646.  
  8647. The following terms, denoted by an asterisk (*) in this publication, are 
  8648. trademarks of the IBM Corporation in the United States or other countries: 
  8649.  
  8650.  IBM 
  8651.  OS/2 
  8652.  Presentation Manager 
  8653.  Workplace Shell 
  8654.  
  8655.  The following terms, denoted by a double asterisk (**) in this publication are 
  8656.  trademarks of other companies as follows: 
  8657.  
  8658.  WACOM                    Wacom Co., Ltd. 
  8659.  Windows                  Microsoft Corporation 
  8660.  
  8661.  
  8662. ΓòÉΓòÉΓòÉ 26. Glossary ΓòÉΓòÉΓòÉ
  8663.  
  8664. This glossary includes terms and definitions from: 
  8665.  
  8666.  o The American National Dictionary for Information Systems, ANSI X3.172-1990, 
  8667.    copyright 1990 by the American National Standards Institute (ANSI).  Copies 
  8668.    may be purchased from the American National Standards Institute, 11 West 42 
  8669.    Street, New York, New York 10036.  Definitions are identified by the symbol 
  8670.    (A) after the definition. 
  8671.  
  8672.  o The ANSI/EIA Standard-440-A:  Fiber Optic Terminology.  Copies may be 
  8673.    purchased from the Electronic Industries Association, 2001 Pennsylvania 
  8674.    Avenue, N.W., Washington DC 20006.  Definitions are identified by the symbol 
  8675.    (E) after the definition. 
  8676.  
  8677.  o The Information Technology Vocabulary, developed by Subcommittee 1, Joint 
  8678.    Technical Committee 1, of the International Organization for Standardization 
  8679.    and the International Electrotechnical Commission (ISO/IEC JTC1/SC1). 
  8680.    Definitions of published parts of this vocabulary are identified by the 
  8681.    symbol (I) after the definition; definitions from draft international 
  8682.    standards, committee drafts, and working papers being developed by ISO/IEC 
  8683.    JTC1/SC1 are identified by the symbol (T) after the definition, indicating 
  8684.    that final agreement has not yet been reached among the participating 
  8685.    National Bodies of SC1. 
  8686.  
  8687.  A 
  8688.  
  8689.  accelerator. A key or combination of keys that invokes an application-defined 
  8690.     function. 
  8691.  
  8692.  active window. The window that a user is currently interacting with.  The 
  8693.     window that is active has a highlighted border and title bar.  Contrast 
  8694.     with inactive window. 
  8695.  
  8696.  American National Standard Code for Information Interchange (ASCII). The 
  8697.     standard code, using a coded character set consisting of 7-bit coded 
  8698.     characters (8-bits including parity check), that is used for information 
  8699.     interchange among data processing systems, data communication systems, and 
  8700.     associated equipment.  The ASCII set consists of control characters and 
  8701.     graphic characters. (A) 
  8702.  
  8703.  API. Application programming interface. 
  8704.  
  8705.  application programming interface (API). A functional interface supplied by 
  8706.     the operating system or by a separately orderable licensed program that 
  8707.     allows an application program written in a high-level language to use 
  8708.     specific data or functions of the operating system or the licensed program. 
  8709.  
  8710.  array.  (1) An arrangement of data in one or more dimensions:  a list, a 
  8711.     table, or a multidimensional arrangement of items.  (2) In programming 
  8712.     languages, an aggregate that consists of data objects, with identical 
  8713.     attributes, each of which may be uniquely referenced by subscripting. (I) 
  8714.  
  8715.  ASCII. American National Standard Code for Information Interchange 
  8716.  
  8717.  ASCIIZ format. A string of ASCII characters ending with a null character. 
  8718.  
  8719.  assignment. A unique setting that can be changed.  See also button assignment 
  8720.     and gesture assignment. 
  8721.  
  8722.  attribute. A named property of an entity. 
  8723.  
  8724.  B 
  8725.  
  8726.  backlight. The fluorescent lighting on a liquid crystal display (LCD). 
  8727.  
  8728.  barrel buttons. Buttons on the side of a pen device, used to request or 
  8729.     initiate an action. 
  8730.  
  8731.  bezel buttons. Buttons built into the case (bezel) of a pen-based computer or 
  8732.     peripheral device, used to request or initiate an action. 
  8733.  
  8734.  bit map. A representation of an image by an array of bits. 
  8735.  
  8736.  bounding box. The smallest rectangle that fully encloses a gesture. 
  8737.  
  8738.  buffer.  (1) A routine or storage used to compensate for a difference in rate 
  8739.     of flow of data, or time of occurrence of events, when transferring data 
  8740.     from one device to another. (A)  (2) A portion of storage used to hold 
  8741.     input or output data temporarily. 
  8742.  
  8743.  button. A mechanism used to request or initiate an action.  See also barrel 
  8744.     buttons and bezel buttons. 
  8745.  
  8746.  button assignment. An assignment that defines the action or actions performed 
  8747.     as a result of activating a button or combination of buttons. 
  8748.  
  8749.  byte. A string that consists of a number of bits, usually 8, that are treated 
  8750.     as a unit and represent a character. 
  8751.  
  8752.  C 
  8753.  
  8754.  cache.  (1) A special-purpose buffer storage, smaller and faster than main 
  8755.     storage, used to hold a copy of instructions and data obtained from main 
  8756.     storage and likely to be needed next by the processor. (T)  (2) A buffer 
  8757.     storage that contains frequently accessed instructions and data; it is used 
  8758.     to reduce access time. 
  8759.  
  8760.  calibration. The adjustment of a piece of equipment so that it meets normal 
  8761.     operational standards.  For example, calibration could refer to adjusting 
  8762.     the alignment of a pen. 
  8763.  
  8764.  call.  (1) The action of bringing a computer program, a routine, or a 
  8765.     subroutine into effect, usually by specifying the entry conditions and 
  8766.     jumping to an entry point. (I) (A)  (2) To transfer control to a procedure, 
  8767.     program, routine, or subroutine. 
  8768.  
  8769.  cathode ray tube display (CRT display).  (1) A device that presents data in 
  8770.     visual form by means of controlled electron beams. (A)  (2) The data 
  8771.     display produced by the device in (1). (A) 
  8772.  
  8773.  child class. See subclass. 
  8774.  
  8775.  child process. A process, started by a parent process, that shares the 
  8776.     resources of the parent process. 
  8777.  
  8778.  child window. A window that appears within the border of its parent window 
  8779.     (either a primary window or another child window).  When the parent window 
  8780.     is resized, moved or destroyed, the child window is also resized, moved or 
  8781.     destroyed. However, the child window can be moved or resized independently 
  8782.     from the parent window, within the boundries of the parent window. 
  8783.     Contrast with parent window. 
  8784.  
  8785.  class. The description of a set of objects and their behavior.  New classes 
  8786.     can be defined in terms of existing classes through a technique known as 
  8787.     inheritance. 
  8788.  
  8789.  class method. An action that can be performed on a class object. Class methods 
  8790.     also are called factory methods. 
  8791.  
  8792.  class object. The run-time implementation of a class. 
  8793.  
  8794.  click. To press and release a mouse button without moving the pointer off the 
  8795.     choice.  See double-click. 
  8796.  
  8797.  client area. The part of the window inside the border that is below the menu 
  8798.     bar.  It is the user's work space, where a user types information and 
  8799.     selects choices from selection fields.  In primary windows, it is where an 
  8800.     application programmer presents the objects that a user works on. 
  8801.  
  8802.  client window. The window in which the application displays output and 
  8803.     receives input.  This window is located inside the frame window, under the 
  8804.     window title bar and any menu bar, and within any scroll bars. 
  8805.  
  8806.  clipboard. An area of computer memory or storage that temporarily holds data. 
  8807.     Date in the clipboard is available to other applications. 
  8808.  
  8809.  coalesce.  (1) To combine two or more sets of items into one set of any form. 
  8810.     (I)  (2) To combine two or more files into one file. 
  8811.  
  8812.  composite window. A window composed of other windows (such as a frame window, 
  8813.     frame-control windows, and a client window) that are kept together as a 
  8814.     unit and that interact with each other. 
  8815.  
  8816.  configure. To describe to a system the devices, optional features, and 
  8817.     programs installed on the system. 
  8818.  
  8819.  control ball. In computer graphics, a ball, rotatable about its center, that 
  8820.     is used as an input device, normally as a locator. (I) (A) Synonymous with 
  8821.     track ball. 
  8822.  
  8823.  copy. To place onto the clipboard a duplicate of what has been selected. 
  8824.  
  8825.  CRT display. Cathode ray tube display. 
  8826.  
  8827.  D 
  8828.  
  8829.  database. A collection of data with a given structure for accepting, storing, 
  8830.     and providing, on demand, data for multiple users. (T) 
  8831.  
  8832.  DCB. Device control block. 
  8833.  
  8834.  desktop. A folder that fills the entire screen and holds all the objects with 
  8835.     which the user can interact to perform operations on the system. 
  8836.  
  8837.  device control block (DCB). A data structure that contains data and addresses 
  8838.     for indirect calls for a logical device. 
  8839.  
  8840.  device driver. A program that enables the computer to communicate with a 
  8841.     specific peripheral device, such as a pen, videodisc player, or CD drive. 
  8842.  
  8843.  device ID. A unique identification number assigned to a logical device. A 
  8844.     device ID is unique across an entire system. 
  8845.  
  8846.  device object. An object that provides a means of communication between a 
  8847.     computer and another piece of equipment, such as a pen or display. 
  8848.  
  8849.  dialog.  (1) The interaction between a user and a computer.  (2) In an 
  8850.     interactive system, a series of related inquiries and responses similar to 
  8851.     a conversation between two people. 
  8852.  
  8853.  dialog box. A movable window, fixed in size, containing controls that a user 
  8854.     uses to provide information required by an application so that it can 
  8855.     continue to process a user request. 
  8856.  
  8857.  digitizer. An electronic device that transmits coordinate data to software 
  8858.     running on a computer. 
  8859.  
  8860.  DLL. Dynamic link library. 
  8861.  
  8862.  double-click. To press and release a mouse button twice within a time frame 
  8863.     defined by the user, without moving the pointer off the choice. See click. 
  8864.  
  8865.  double-tap. To touch a touch-sensitive screen with a pointing device twice in 
  8866.     rapid succession within a small area. 
  8867.  
  8868.  drag. To use a pointing device to move an object. 
  8869.  
  8870.  drop. To fix the position of an object that is being dragged by releasing the 
  8871.     select button on the pointing device. 
  8872.  
  8873.  dynamic link library (DLL). A file containing executable code and data bound 
  8874.     to a program at load time or run time, rather than during linking.  The 
  8875.     code and data in a dynamic link library can be shared by several 
  8876.     applications simultaneously. 
  8877.  
  8878.  E 
  8879.  
  8880.  emulation. The use of one system to imitate another system so that the 
  8881.     imitating system accepts the same data, runs the same programs, and 
  8882.     achieves the same results as the imitated system.  Emulation is usually 
  8883.     achieved by means of hardware or firmware. (T) 
  8884.  
  8885.  F 
  8886.  
  8887.  flag.  (1) A variable indicating that a certain condition holds. (T)  (2) A 
  8888.     character that signals the occurrence of some condition, such as the end of 
  8889.     a word. 
  8890.  
  8891.  frame-control window. A control window, owned by the frame window, that 
  8892.     accepts simple input from the user and notifies the frame window or client 
  8893.     window when it receives input. 
  8894.  
  8895.  frame window. The window used as a base when constructing a primary window or 
  8896.     composite window.  The frame window coordinates the action of frame 
  8897.     controls and the client window, enabling them to act as a single unit. 
  8898.  
  8899.  function.  (1) A specific purpose of an entity, or its characteristic action. 
  8900.     (A)  (2) A machine action such as a carriage return or a line feed. (A) 
  8901.     (3) A subroutine that returns the value of a single variable and that 
  8902.     usually has a single exit;  for example, subroutines that compute 
  8903.     mathematical functions, such as sine, cosine, logarithm, or that compute 
  8904.     the maximum of a set of numbers. (T) 
  8905.  
  8906.  G 
  8907.  
  8908.  gesture. A hand-drawn symbol or uppercase letter which, when recognized by the 
  8909.     system, invokes an action or a series of actions.  Gestures denote an 
  8910.     action and a target for the action. 
  8911.  
  8912.  gesture assignment. An assignment that defines the action or actions performed 
  8913.     as a result of a gesture. 
  8914.  
  8915.  gesture mode. An input mode in which the system interprets pen input as 
  8916.     gestures. Contrast with mouse-emulation mode. 
  8917.  
  8918.  H 
  8919.  
  8920.  header.  (1) System-defined control information that precedes user data.  (2) 
  8921.     The portion of a message that contains control information for the message 
  8922.     such as one or more destination fields, name of originating station, input 
  8923.     sequence number, character string indicating the type of message, and 
  8924.     priority level for the message. 
  8925.  
  8926.  hot key.  (1) The key combination used to change from one session to another 
  8927.     on the workstation.  (2) To jump, or hot key, from a host session to an 
  8928.     application on the workstation, or from the workstation to the host 
  8929.     session. 
  8930.  
  8931.  hot spot. The area of a display screen that is activated to accept user input. 
  8932.     Synonymous with touch area. 
  8933.  
  8934.  I 
  8935.  
  8936.  inactive window. A window you that a user is not currently interacting with. 
  8937.  
  8938.  inheritance.  (1) In the OS/2 Presentation Manager interface, the technique of 
  8939.     specifying the shape and behavior of one window (called a child window) as 
  8940.     incremental differences from another window (called the parent window). 
  8941.     (2) In System Object Model, implications of derivation of new classes from 
  8942.     existing classes. Child classes inherit methods from parent and ancestor 
  8943.     classes. 
  8944.  
  8945.  ink. The trail resulting from writing with the pen. 
  8946.  
  8947.  J 
  8948.  
  8949.  joy stick. In computer graphics, a lever that can pivot in all directions and 
  8950.     that is used as a locator device. (T) 
  8951.  
  8952.  K 
  8953.  
  8954.  kernel. The part of an operating system that performs basic functions, such as 
  8955.     allocating hardware resources. 
  8956.  
  8957.  L 
  8958.  
  8959.  LCD. Liquid crystal display. 
  8960.  
  8961.  LED. Light-emitting diode. 
  8962.  
  8963.  lift-off point. Location plotted by the digitizer where a pointing device is 
  8964.     removed from a touch-sensitive surface. 
  8965.  
  8966.  logical device.  (1) A file for conducting input or output with a physical 
  8967.     device.  (2) A file for mapping user I/O between virtual and real devices. 
  8968.  
  8969.  M 
  8970.  
  8971.  message.  (1) A packet of data used for communication between the Presentation 
  8972.     Manager interface and Presentation Manager applications.  (2) Information 
  8973.     not requested by a user but displayed in response to an unexpected event, 
  8974.     or when something undesirable could occur. 
  8975.  
  8976.  method. An action that can be performed on an object. 
  8977.  
  8978.  mouse-emulation mode. An input mode in which the system interprets pen input 
  8979.     as mouse input. 
  8980.  
  8981.  O 
  8982.  
  8983.  object.  (1) A graphic symbol that a user works with to perform a task.  (2) 
  8984.     In System Object Model, a set of data and the actions that can be performed 
  8985.     on that data. 
  8986.  
  8987.  object definition. See class. 
  8988.  
  8989.  OEM. Original equipment manufacturer. 
  8990.  
  8991.  Original equipment manufacturer (OEM). A manufacturer of equipment that may be 
  8992.     marketed by another manufacturer. 
  8993.  
  8994.  P 
  8995.  
  8996.  parent class. A class from which another another class inherits.  See 
  8997.     inheritance. 
  8998.  
  8999.  parent process. A process that creates other processes.  Contrast with child 
  9000.     process. 
  9001.  
  9002.  parent window. In the OS/2 operating system, a window that creates a child 
  9003.     window.  The child window is drawn within the parent window. If the parent 
  9004.     window is moved, resized, or destroyed, the child window also will be 
  9005.     moved, resized, or destroyed. However, the child window can be moved and 
  9006.     resized independently from the parent window, within the boundaries of the 
  9007.     parent window. 
  9008.  
  9009.  pause. An action where the pen remains motionless for an interval of time 
  9010.     while it is in the proximity zone or touching a touch-sensitive surface. 
  9011.     This interval of time starts a new action (for example, mouse-emulation 
  9012.     mode). 
  9013.  
  9014.  pause and drag. To pause and then move the pointing device so that the pointer 
  9015.     travels to a different location on the screen.  Dragging ends when the 
  9016.     pointing device is removed from the touch-sensitive surface.  See pause. 
  9017.  
  9018.  pel. Picture element. 
  9019.  
  9020.  pen. A pointing and input device used with a touch-sensitive device. 
  9021.  
  9022.  pen-aware programs. Programs that are written or modified to use a pen or a 
  9023.     finger as the standard input device rather than a keyboard or a mouse. 
  9024.  
  9025.  pen-unaware programs. Programs that are written to use a keyboard or mouse and 
  9026.     are not written to use a pen. 
  9027.  
  9028.  picture element. In computer graphics, the smallest element of a display 
  9029.     surface that can be independently assigned color and intensity. (T) 
  9030.  
  9031.  pixel. Picture element. 
  9032.  
  9033.  pointer.  (1) A data element that indicates the location of another data 
  9034.     element. (T)  (2) In computer graphics, a manually operated functional unit 
  9035.     used to specify an addressable point.  A pointer may be used to conduct 
  9036.     interactive graphic operations, such as selection of one member of a 
  9037.     predetermined set of display elements, or indication of a position on a 
  9038.     display space while generating coordinate data. (T)  (3) An identifier that 
  9039.     indicates the location of an item of data. (A)  (4) The symbol displayed on 
  9040.     the screen that a user moves with a pointing device, such as a mouse.  (5) 
  9041.     A physical or symbolic identifier of a unique target.  (6) In the C 
  9042.     language, a variable that holds the address of a data object or a function. 
  9043.  
  9044.  pointing device. An instrument, such as a pen, mouse, track ball or joy stick, 
  9045.     used to move a pointer on the screen. 
  9046.  
  9047.  pop-up window. See dialog box. 
  9048.  
  9049.  privilege level. A protection method supported by the hardware architecture of 
  9050.     IBM personal computer systems.  This method consists of four privilege 
  9051.     levels know as rings (numbered 0 through 3). Only certain types of programs 
  9052.     are allowed to execute at each privilege level. 
  9053.  
  9054.  program-file object. An object that starts a program.  Program files commonly 
  9055.     have extensions of .EXE, .COM, .CMD, or .BAT. 
  9056.  
  9057.  program group. Several programs that can be acted upon as a single entity. 
  9058.  
  9059.  program object. An object representing the file that starts a program.  You 
  9060.     can change the settings for this object to specify the gesture assignments 
  9061.     for the particular program. 
  9062.  
  9063.  proximity zone. In pen environments, an area where pen action is sensed by a 
  9064.     touch-sensitive device without the pen touching the touch-sensitive 
  9065.     surface. The zone varies depending on the technology of the digitizer, but 
  9066.     it is usually no more than 6.35 mm (0.25 in.) from the surface. 
  9067.  
  9068.  puck. A device used to select a particular location on a tablet. 
  9069.  
  9070.  Q 
  9071.  
  9072.  query.  (1) A request for data from a database, based on specified conditions; 
  9073.     for example, a request for availability of a seat on a flight reservation 
  9074.     system. (T)  (2) The process by which a master station asks a slave station 
  9075.     to identify itself and to give its status. (T)  (3) A request for 
  9076.     information from a file based on specific conditions; for example, a 
  9077.     request for a list of all customers whose balance is greater than $1000. 
  9078.  
  9079.  R 
  9080.  
  9081.  resolution. In computer graphics, a measure of the sharpness of an image, 
  9082.     expressed as the number of lines and columns on the display screen or the 
  9083.     number of pels per unit of area. 
  9084.  
  9085.  return code.  (1) A code used to influence the execution of succeeding 
  9086.     instructions. (A)  (2) A value returned to a program to indicate the 
  9087.     results of an operation requested by that program. 
  9088.  
  9089.  ring level. See privilege level. 
  9090.  
  9091.  S 
  9092.  
  9093.  screen. The physical surface of a display device upon which information is 
  9094.     shown to a user. 
  9095.  
  9096.  scroll. To move a display image vertically or horizontally to view data that 
  9097.     otherwise cannot be observed within the boundaries of the display screen. 
  9098.  
  9099.  settings. Characteristics of objects that the user can view and sometimes 
  9100.     alter. 
  9101.  
  9102.  setup object. An object that provides a means of communication between a user 
  9103.     and a piece of equipment or a system. 
  9104.  
  9105.  shift. An action during mouse-emulation mode in which the default mouse button 
  9106.     1 down action emulates another button or combination of buttons for the 
  9107.     duration of the stroke. 
  9108.  
  9109.  shutdown. The procedure required before turning off the computer to ensure 
  9110.     that data and configuration information are not lost. 
  9111.  
  9112.  slider. A control that represents a quantity and its relationship to the range 
  9113.     of possible values for that quantity.  For example, a slider might indicate 
  9114.     a time range from 0 to 10 minutes. See also slider arm. 
  9115.  
  9116.  slider arm. The visual indicator in a slider that shows that the numerical 
  9117.     value can be changed by manipulating it.  See slider. 
  9118.  
  9119.  SOM. System Object Model. 
  9120.  
  9121.  source directory. The directory from which information is read.  Contrast with 
  9122.     target directory. 
  9123.  
  9124.  spreadsheet. A worksheet arranged in rows and columns, in which a change in 
  9125.     the contents of one cell can cause electronic recomputation of one or more 
  9126.     cells, based on user defined relations among the cells. (A) 
  9127.  
  9128.  string.  (1) A sequence of elements of the same nature, such as characters 
  9129.     considered as a whole. (T)  (2) In programming languages, the form of data 
  9130.     used for storing and manipulating text. 
  9131.  
  9132.  stroke. The collection of points between the point where the pen touches a 
  9133.     touch-sensitive surface and the point where the pen is removed from the 
  9134.     surface. 
  9135.  
  9136.  subclass. A class that is derived from another class.  The subclass inherits 
  9137.     the data and methods of the parent class and can define new methods or 
  9138.     override existing methods to define new behavior not inherited from the 
  9139.     parent class. See inheritance. 
  9140.  
  9141.  syntax  (1) The relationship among characters or groups of characters, 
  9142.     independent of their meanings or the manner of their interpretation and 
  9143.     use. (I)  (A)   (2) The structure of expressions in a language. (A)  (3) 
  9144.     The rules governing the structure of a language. (A) (4) The relationship 
  9145.     among symbols. (A) (5) The rules for the construction of a statement. 
  9146.  
  9147.  System Object Model. A mechanism for language-neutral, object-oriented 
  9148.     programming in the OS/2 environment. 
  9149.  
  9150.  T 
  9151.  
  9152.  tablet.  (1) A special flat surface with a mechanism for indicating positions 
  9153.     thereon, normally used as a locator. (I)  (2) See also puck. 
  9154.  
  9155.  tap. To briefly touch a touch-sensitive surface with a pointing device and 
  9156.     then quickly remove it. 
  9157.  
  9158.  target. The location to which the information is destined. 
  9159.  
  9160.  target directory. The directory to which information is written.  Contrast 
  9161.     with source directory. 
  9162.  
  9163.  template. A pattern to help the user identify the location of keys on a 
  9164.     keyboard, functions assigned to keys on a keyboard, or switches and lights 
  9165.     on a control panel. 
  9166.  
  9167.  toggle. To switch between two modes; for example, to switch between selected 
  9168.     and deselected mode. 
  9169.  
  9170.  Tool Bar. A bar containing choices that represent tools.  When you select a 
  9171.     choice from the bar, the defined action for the choice occurs. 
  9172.  
  9173.  touch area. Synonym for hot spot. 
  9174.  
  9175.  touch-down point. Location plotted by a digitizer where contact is made with a 
  9176.     touch-sensitive device. 
  9177.  
  9178.  touch-sensitive. Pertaining to a device such as a keypad or screen that 
  9179.     generates coordinate data when a pointing device approaches or contacts the 
  9180.     surface, thereby allowing a user to interact directly with a computer 
  9181.     without entering commands from a keyboard. 
  9182.  
  9183.  touch screen. A display device that allows the user to interact with a 
  9184.     computer system by touching an area on its screen. Syninymous with 
  9185.     touch-sensitive screen. 
  9186.  
  9187.  track ball. Synonym for control ball. 
  9188.  
  9189.  U 
  9190.  
  9191.  unit number. A number used by a device driver to select a specific logical 
  9192.     device. A unit number is unique only within the scope of the driver. 
  9193.  
  9194.  V 
  9195.  
  9196.  VGA. Video graphics array. 
  9197.  
  9198.  W 
  9199.  
  9200.  window. An area of the screen with visible boundaries within which information 
  9201.     is displayed.  A window can be smaller than or the same size as the screen. 
  9202.     Windows can appear to overlap on the screen. 
  9203.  
  9204.  window class. The grouping of windows whose processing needs conform to the 
  9205.     services provided by one window procedure. 
  9206.  
  9207.  window class style. The set of properties that apply to every window in a 
  9208.     window class. 
  9209.  
  9210.  
  9211. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  9212.  
  9213. When you place a bookmark on a topic, it is added to a list of bookmarks you 
  9214. have previously set.  You can view the list, and you can remove one or all 
  9215. bookmarks from the list.  If you have not set any bookmarks, the list is empty. 
  9216.  
  9217. To set a bookmark, do the following: 
  9218.  
  9219.   1. Select a topic from the Contents. 
  9220.  
  9221.   2. When that topic appears, choose the Bookmark option from the Services 
  9222.      menu. 
  9223.  
  9224.   3. If you want to change the name used for the bookmark, type the new name in 
  9225.      the field. 
  9226.  
  9227.   4. Select the Place radio button  (or press the Up or Down Arrow key to 
  9228.      select it). 
  9229.  
  9230.   5. Select OK.  The bookmark is then added to the bookmark list. 
  9231.  
  9232.  
  9233. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  9234.  
  9235. You can specify a word or phrase to be searched.  You can also limit the search 
  9236. to a set of topics by first marking the topics in the Contents list. 
  9237.  
  9238. To search for a word or phrase in all topics, do the following: 
  9239.  
  9240.   1. Choose the Search option from the Services pull-down. 
  9241.  
  9242.   2. Type the word or words to be searched. 
  9243.  
  9244.   3. Select All sections. 
  9245.  
  9246.   4. Select Search to begin the search. 
  9247.  
  9248.   5. The list of topics where the word or phrase appears is displayed. 
  9249.  
  9250.  
  9251. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  9252.  
  9253. You can print one or more topics.  You can also print a set of topics by first 
  9254. marking the topics on the Contents list. 
  9255.  
  9256. To print the document Contents list, do the following: 
  9257.  
  9258.   1. Select Print from the Services menu. 
  9259.  
  9260.   2. Select Contents. 
  9261.  
  9262.   3. Select Print. 
  9263.  
  9264.   4. The Contents list is printed on your printer. 
  9265.  
  9266.  
  9267. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  9268.  
  9269. You can copy a topic you are viewing into a temporary file named TEXT.TMP.  You 
  9270. can later edit that file by using an editor such as the System Editor. 
  9271.  
  9272. To copy a topic, do the following: 
  9273.  
  9274.   1. Expand the Contents list and select a topic. 
  9275.  
  9276.   2. When the topic appears, select Copy to file from the Services menu. 
  9277.  
  9278.  The system copies the text pertaining to that topic into the temporary 
  9279.  TEXT.TMP file. 
  9280.  
  9281.  For information on any of the other choices in the Services menu, highlight 
  9282.  the choice and press the F1 key. 
  9283.  
  9284.  
  9285. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  9286.  
  9287. You can control the appearance of the Contents list. 
  9288.  
  9289. To expand the Contents and show all levels for all topics, select Expand all 
  9290. from the Options menu. 
  9291.  
  9292. For information on any of the other choices in the Options menu, highlight the 
  9293. choice and press the F1 key. 
  9294.  
  9295.  
  9296. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  9297.  
  9298. Trademark of the IBM Corporation. 
  9299.  
  9300.  
  9301. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  9302.  
  9303. Trademark of the Microsoft Corporation. 
  9304.  
  9305.  
  9306. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  9307.  
  9308. WACOM is a trademark of Wacom Co., Ltd.