home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 May / VPR9705A.ISO / VPR_DATA / PROGRAM / CBTRIAL / SETUP / DATA.Z / PENWIN.H < prev    next >
C/C++ Source or Header  |  1997-02-14  |  107KB  |  2,379 lines

  1. /****************************************************************************\
  2. *                                                                            *
  3. * PENWIN.H -  Pen Windows functions, types, and definitions                  *
  4. *                                                                            *
  5. *             Version 2.0                                                    *
  6. *                                                                            *
  7. *             Copyright (c) 1992-1995 Microsoft Corp. All rights reserved.   *
  8. *                                                                            *
  9. *******************************************************************************
  10. *
  11. * The following symbols control inclusion of various parts of this file;
  12. * (indented identifiers are included by the previous main identifier):
  13. *
  14. * #define:         To prevent inclusion of:
  15. *
  16. * PENVER           Pen Windows version number (0x0200).  To exclude
  17. *                   definitions introduced in version 2.0 (or above)
  18. *                   #define PENVER 0x0100 before #including <penwin.h>
  19. *
  20. * NOPENALC         Alphabet Code definitions and macros
  21. * NOPENAPPS        Pen Applications: Screen Keyboard
  22. * NOPENCTL         H/BEDIT, IEDIT, and pen-enabled USER controls, including:
  23. *   NOPENBEDIT      : Boxed Edit Control
  24. *   NOPENIEDIT      : Ink Edit Control
  25. *   NOPENHEDIT      : (H)Edit control
  26. * NOPENDATA        PenData APIs and definitions
  27. * NOPENDICT        Dictionary support
  28. * NOPENDRIVER      Pen Driver definitions, incl OEM
  29. * NOPENHRC         Handwriting Recognizer APIs and definitions
  30. * NOPENINKPUT      Inking and Input APIs and definitions
  31. * NOPENMISC        Miscellaneous Info and Utility APIs and definitions
  32. * NOPENMSGS        Pen Messages and definitions
  33. * NOPENNLS         National Language Support
  34. * NOPENRC1         Recognition Context APIs and definitions (1.0)
  35. * NOPENRES         Pen resources, including:
  36. *   NOPENBMP        : Pen-related bitmaps
  37. *   NOPENCURS       : Pen-related cursors
  38. * NOPENTARGET      Targeting APIs and definitions
  39. * NOPENVIRTEVENT   Virtual Event layer APIs
  40. *
  41. * _WIN32           non-Win32 components, subincludes:
  42. *                   : NOPENAPPS, NOPENDICT, NOPENRC1, NOPENVIRTEVENT
  43. *
  44. * "FBC" in the comments means that the feature exists only for
  45. * backward compatibility. It should not be used by new applications.
  46. \****************************************************************************/
  47.  
  48. #ifndef _INC_PENWIN
  49. #define _INC_PENWIN
  50. #pragma option -b
  51.  
  52. #pragma option -b.
  53. #include <windows.h>
  54. #pragma option -b
  55.  
  56. #ifdef __BORLANDC__
  57. #pragma option -b.
  58.   #include <pshpack8.h>
  59. #pragma option -b
  60. #endif
  61.  
  62. #ifndef _WIN32
  63. #ifndef RC_INVOKED
  64. #pragma pack(1)
  65. #endif /* RC_INVOKED */
  66. #endif //!_WIN32
  67.  
  68. #ifdef __cplusplus
  69. extern "C" {
  70. #endif /* __cplusplus */
  71.  
  72. #ifndef PENVER      /* may be pre-defined; otherwise assume version 2.0 */
  73.     #define PENVER  0x0200
  74. #endif //!PENVER
  75.  
  76. #ifdef _WIN32
  77.     #define NOPENAPPS
  78.     #define NOPENDICT
  79.     #define NOPENRC1
  80.     #define NOPENVIRTEVENT
  81.     #define NOPENAPIFUN
  82. #endif //_WIN32
  83.  
  84. #ifndef NOPENAPPS   // not available in WIN32
  85. #ifndef RC_INVOKED
  86. #pragma option -b.
  87.     #include <skbapi.h>
  88. #pragma option -b
  89. #endif /* !RC_INVOKED */
  90. #endif /*!NOPENAPPS */
  91.  
  92. // other subsets:
  93.  
  94. #ifdef NOPENCTL
  95.     #define NOPENBEDIT
  96.     #define NOPENIEDIT
  97. #endif /* NOPENCTL */
  98.  
  99. #ifdef NOPENRES
  100.     #define NOPENBMP
  101.     #define NOPENCURS
  102. #endif /* NOPENRES */
  103.  
  104. //////////////////////////////////////////////////////////////////////////////
  105. /****** Definitions 1: for everything including RC compiler *****************/
  106.  
  107. //---------------------------------------------------------------------------
  108. #ifndef NOPENALC
  109.  
  110. // Enabled Alphabet:
  111. #define ALC_DEFAULT          0x00000000L // nothing
  112. #define ALC_LCALPHA          0x00000001L // a..z
  113. #define ALC_UCALPHA          0x00000002L // A..Z
  114. #define ALC_NUMERIC          0x00000004L // 0..9
  115. #define ALC_PUNC             0x00000008L // !-;`"?()&.,; and backslash
  116. #define ALC_MATH             0x00000010L // %^*()-+={}<>,/.
  117. #define ALC_MONETARY         0x00000020L // ,.$ or local
  118. #define ALC_OTHER            0x00000040L // @#|_~[]
  119. #define ALC_ASCII            0x00000080L // restrict to 7-bit chars 20..7f
  120. #define ALC_WHITE            0x00000100L // white space
  121. #define ALC_NONPRINT         0x00000200L // sp tab ret ctrl glyphs
  122. #define ALC_DBCS             0x00000400L // allow DBCS variety of SBCS
  123. #define ALC_JIS1             0x00000800L // kanji JPN, ShiftJIS 1 only
  124. #define ALC_GESTURE          0x00004000L // gestures
  125. #define ALC_USEBITMAP        0x00008000L // use rc.rgbfAlc to enable chars
  126. #define ALC_HIRAGANA         0x00010000L // hiragana JPN
  127. #define ALC_KATAKANA         0x00020000L // katakana JPN
  128. #define ALC_KANJI            0x00040000L // kanji JPN, ShiftJIS 1+2+3
  129. #define ALC_GLOBALPRIORITY   0x10000000L
  130. #define ALC_OEM              0x0FF80000L // OEM recognizer-specific
  131. #define ALC_RESERVED         0xE0003000L // avail for future use
  132. #define ALC_NOPRIORITY       0x00000000L // for alcPriority == none
  133.  
  134. #define ALC_ALPHA\
  135.     (ALC_LCALPHA | ALC_UCALPHA)                                // 0x00000003L
  136.  
  137. #define ALC_ALPHANUMERIC\
  138.     (ALC_ALPHA | ALC_NUMERIC)                                  // 0x00000007L
  139.  
  140. #define ALC_SYSMINIMUM\
  141.     (ALC_ALPHANUMERIC | ALC_PUNC | ALC_WHITE | ALC_GESTURE)    // 0x0000410FL
  142.  
  143. #define ALC_ALL\
  144.     (ALC_SYSMINIMUM | ALC_MATH | ALC_MONETARY\
  145.     | ALC_OTHER | ALC_NONPRINT)                                // 0x0000437FL
  146.  
  147. #define ALC_KANJISYSMINIMUM\
  148.     (ALC_SYSMINIMUM | ALC_HIRAGANA | ALC_KATAKANA | ALC_JIS1)  // 0x0003490FL
  149.  
  150. #define ALC_KANJIALL\
  151.     (ALC_ALL | ALC_HIRAGANA | ALC_KATAKANA | ALC_KANJI)        // 0x0007437FL
  152.  
  153. #endif /*!NOPENALC */
  154.  
  155. //---------------------------------------------------------------------------
  156. #ifndef NOPENBEDIT
  157. // box edit styles:
  158. #define BXS_NONE             0x0000U // none
  159. #define BXS_RECT             0x0001U // use rectangle instead of cusp
  160. #define BXS_BOXCROSS         0x0004U // use cross at box center
  161. #define BXS_MASK             0x0007U // mask for above
  162.  
  163. #endif /*!NOPENBEDIT */
  164.  
  165. //---------------------------------------------------------------------------
  166. #ifndef NOPENBMP
  167.  
  168. // Public Bitmaps :
  169. #define OBM_SKBBTNUP            32767
  170. #define OBM_SKBBTNDOWN          32766
  171. #define OBM_SKBBTNDISABLED      32765
  172.  
  173. #define OBM_ZENBTNUP            32764
  174. #define OBM_ZENBTNDOWN          32763
  175. #define OBM_ZENBTNDISABLED      32762
  176.  
  177. #define OBM_HANBTNUP            32761
  178. #define OBM_HANBTNDOWN          32760
  179. #define OBM_HANBTNDISABLED      32759
  180.  
  181. #define OBM_KKCBTNUP            32758
  182. #define OBM_KKCBTNDOWN          32757
  183. #define OBM_KKCBTNDISABLED      32756
  184.  
  185. #define OBM_SIPBTNUP            32755
  186. #define OBM_SIPBTNDOWN          32754
  187. #define OBM_SIPBTNDISABLED      32753
  188.  
  189. #define OBM_PTYBTNUP            32752
  190. #define OBM_PTYBTNDOWN          32751
  191. #define OBM_PTYBTNDISABLED      32750
  192. #endif /*!NOPENBMP */
  193.  
  194. //---------------------------------------------------------------------------
  195. #ifndef NOPENCURS
  196. // Default pen cursor to indicate writing, points northwest
  197. #define IDC_PEN         MAKEINTRESOURCE(32631)
  198.  
  199. // alternate select cursor: upsidedown standard arrow, points southeast
  200. #define IDC_ALTSELECT   MAKEINTRESOURCE(32501)
  201.  
  202. #endif /*!NOPENCURS */
  203.  
  204. //---------------------------------------------------------------------------
  205. #ifndef NOPENHRC
  206. // special SYV values:
  207. #define SYV_NULL                0x00000000L
  208. #define SYV_UNKNOWN             0x00000001L
  209. #define SYV_EMPTY               0x00000003L
  210. #define SYV_BEGINOR             0x00000010L
  211. #define SYV_ENDOR               0x00000011L
  212. #define SYV_OR                  0x00000012L
  213. #define SYV_SOFTNEWLINE         0x00000020L
  214. #define SYV_SPACENULL           0x00010000L   // SyvCharacterToSymbol('\0')
  215.  
  216. // SYV values for gestures:
  217. #define SYV_SELECTFIRST         0x0002FFC0L   // . means circle in following
  218. #define SYV_LASSO               0x0002FFC1L   // lasso o-tap
  219. #define SYV_SELECTLEFT          0x0002FFC2L   // no glyph
  220. #define SYV_SELECTRIGHT         0x0002FFC3L   // no glyph
  221. #define SYV_SELECTLAST          0x0002FFCFL   // 16 SYVs reserved for selection
  222.  
  223. #define SYV_CLEARCHAR           0x0002FFD2L   // d.
  224. #define SYV_HELP                0x0002FFD3L   // no glyph
  225. #define SYV_KKCONVERT           0x0002FFD4L   // k.
  226. #define SYV_CLEAR               0x0002FFD5L   // d.
  227. #define SYV_INSERT              0x0002FFD6L   // ^.
  228. #define SYV_CONTEXT             0x0002FFD7L   // m.
  229. #define SYV_EXTENDSELECT        0x0002FFD8L   // no glyph
  230. #define SYV_UNDO                0x0002FFD9L   // u.
  231. #define SYV_COPY                0x0002FFDAL   // c.
  232. #define SYV_CUT                 0x0002FFDBL   // x.
  233. #define SYV_PASTE               0x0002FFDCL   // p.
  234. #define SYV_CLEARWORD           0x0002FFDDL   // no glyph
  235. #define SYV_USER                0x0002FFDEL   // reserved
  236. #define SYV_CORRECT             0x0002FFDFL   // check.
  237.  
  238. #define SYV_BACKSPACE           0x00020008L   // no glyph
  239. #define SYV_TAB                 0x00020009L   // t.
  240. #define SYV_RETURN              0x0002000DL   // n.
  241. #define SYV_SPACE               0x00020020L   // s.
  242.  
  243. // Application specific gestures, Circle a-z and Circle A-Z:
  244. #define SYV_APPGESTUREMASK      0x00020000L
  245. #define SYV_CIRCLEUPA           0x000224B6L   // map into Unicode space
  246. #define SYV_CIRCLEUPZ           0x000224CFL   //  for circled letters
  247. #define SYV_CIRCLELOA           0x000224D0L
  248. #define SYV_CIRCLELOZ           0x000224E9L
  249.  
  250. // SYV definitions for shapes:
  251. #define SYV_SHAPELINE           0x00040001L
  252. #define SYV_SHAPEELLIPSE        0x00040002L
  253. #define SYV_SHAPERECT           0x00040003L
  254. #define SYV_SHAPEMIN            SYV_SHAPELINE // alias
  255. #define SYV_SHAPEMAX            SYV_SHAPERECT // alias
  256.  
  257. // SYV classes:
  258. #define SYVHI_SPECIAL           0
  259. #define SYVHI_ANSI              1
  260. #define SYVHI_GESTURE           2
  261. #define SYVHI_KANJI             3
  262. #define SYVHI_SHAPE             4
  263. #define SYVHI_UNICODE           5
  264. #define SYVHI_VKEY              6
  265. #endif //!NOPENHRC
  266.  
  267. //---------------------------------------------------------------------------
  268. #ifndef NOPENIEDIT
  269.  
  270. // IEdit Pop-up Menu Command Items
  271. #define IEM_UNDO                1          // Undo
  272. #define IEM_CUT                 2          // Cut
  273. #define IEM_COPY                3          // Copy
  274. #define IEM_PASTE               4          // Paste
  275. #define IEM_CLEAR               5          // Clear
  276. #define IEM_SELECTALL           6          // Select All Strokes
  277. #define IEM_ERASE               7          // Use Eraser
  278. #define IEM_PROPERTIES          8          // DoProperties
  279. #define IEM_LASSO               9          // Use Lasso
  280. #define IEM_RESIZE              10         // Resize
  281.  
  282. #define IEM_USER                    100    // first menu item# available to app
  283.  
  284. // IEdit Style Attributes
  285. #define IES_BORDER              0x0001   // ctl has a border
  286. #define IES_HSCROLL             0x0002   // ctl is horizontally scrollable
  287. #define IES_VSCROLL             0x0004   // ctl is vertically scrollable
  288. #define IES_OWNERDRAW           0x0008   // ctl will be drawn by parent window
  289.  
  290. #endif /*!NOPENIEDIT */
  291.  
  292. #ifndef RC_INVOKED  // ... rest of file of no interest to rc compiler
  293. //////////////////////////////////////////////////////////////////////////////
  294.  
  295. /****** Definitions 2: RC compiler excluded ********************************/
  296.  
  297. //---------------------------------------------------------------------------
  298. #ifndef NOPENDATA
  299.  
  300. // PenData API constants:
  301.  
  302. // ANIMATEINFO callback options:
  303. #define AI_CBSTROKE             0xFFFF  // Animate callback after every stroke
  304.  
  305. // ANIMATEINFO options:
  306. #define AI_SKIPUPSTROKES        0x0001  // ignore upstrokes in animation
  307.  
  308. // CompressPenData() API options:
  309. #define CMPD_COMPRESS           0x0001
  310. #define CMPD_DECOMPRESS         0x0002
  311.  
  312. // CreatePenDataRegion types:
  313. #define CPDR_BOX                1       // bounding box
  314. #define CPDR_LASSO              2       // lasso
  315.  
  316. // CreatePenData (CPD) and Pen Hardware (PHW) Flags;
  317. // The order of PHW flags is important:
  318. #define CPD_DEFAULT             0x047F  // CPD_TIME | PHW_ALL
  319. #define CPD_USERBYTE            0x0100  // alloc 8 bits/stroke
  320. #define CPD_USERWORD            0x0200  // alloc 16 bits/stroke
  321. #define CPD_USERDWORD           0x0300  // alloc 32 bits/stroke
  322. #define CPD_TIME                0x0400  // maintain abs time info per stroke
  323.  
  324. // DrawPenDataEx() flags/options:
  325. #define DPD_HDCPEN              0x0001  // use pen selected in HDC
  326. #define DPD_DRAWSEL             0x0002  // draw the selection
  327.  
  328. // ExtractPenDataPoints options (EPDP_xx):
  329. #define EPDP_REMOVE             0x0001  // Remove points from the pendata
  330.  
  331. // ExtractPenDataStrokes options and modifiers (EPDS_xx):
  332. #define EPDS_SELECT             1       // selected strokes
  333. #define EPDS_STROKEINDEX        2       // index
  334. #define EPDS_USER               3       // user-specific value
  335. #define EPDS_PENTIP             4       // complete pentip
  336. #define EPDS_TIPCOLOR           5       // pentip color
  337. #define EPDS_TIPWIDTH           6       // pentip width
  338. #define EPDS_TIPNIB             7       // pentip nib style
  339. #define EPDS_INKSET             8       // inkset match
  340.  
  341. #define EPDS_EQ                 0x0000  // default: same as
  342. #define EPDS_LT                 0x0010  // all strokes less than
  343. #define EPDS_GT                 0x0020  // all strokes greater than
  344. #define EPDS_NOT                0x0040  // all strokes not matching
  345. #define EPDS_NE                 0x0040  // alias
  346. #define EPDS_GTE                0x0050  // alias for NOT LT
  347. #define EPDS_LTE                0x0060  // alias for NOT GT
  348.  
  349. #define EPDS_REMOVE             0x8000  // remove matching strokes from source
  350.  
  351. // GetPenDataAttributes options (GPA_xx):
  352. #define GPA_MAXLEN              1   // length of longest stroke
  353. #define GPA_POINTS              2   // total number of points
  354. #define GPA_PDTS                3   // PDTS_xx bits
  355. #define GPA_RATE                4   // get sampling rate
  356. #define GPA_RECTBOUND           5   // bounding rect of all points
  357. #define GPA_RECTBOUNDINK        6   // ditto, adj for fat ink
  358. #define GPA_SIZE                7   // size of pendata in bytes
  359. #define GPA_STROKES             8   // total number of strokes
  360. #define GPA_TIME                9   // absolute time at creation of pendata
  361. #define GPA_USER                10  // number of user bytes available: 0, 1, 2, 4
  362. #define GPA_VERSION             11  // version number of pendata
  363.  
  364. // GetStrokeAttributes options (GSA_xx):
  365. #define GSA_PENTIP              1   // get stroke pentip (color, width, nib)
  366. #define GSA_PENTIPCLASS         2   // same as GSA_PENTIP
  367. #define GSA_USER                3   // get stroke user value
  368. #define GSA_USERCLASS           4   // get stroke's class user value
  369. #define GSA_TIME                5   // get time of stroke
  370. #define GSA_SIZE                6   // get size of stroke in points and bytes
  371. #define GSA_SELECT              7   // get selection status of stroke
  372. #define GSA_DOWN                8   // get up/down state of stroke
  373. #define GSA_RECTBOUND           9   // get the bounding rectangle of the stroke
  374.  
  375. // GetStrokeTableAttributes options (GSA_xx):
  376. #define GSA_PENTIPTABLE         10  // get table-indexed pentip
  377. #define GSA_SIZETABLE           11  // get count of Stroke Class Table entries
  378. #define GSA_USERTABLE           12  // get table-indexed user value
  379.  
  380. #ifndef IX_END
  381. #define IX_END                  0xFFFF  // to or past last available index
  382. #endif //!IX_END
  383.  
  384. // PenTip:
  385. #define PENTIP_NIBDEFAULT       ((BYTE)0)       // default pen tip nib style
  386. #define PENTIP_HEIGHTDEFAULT    ((BYTE)0)       // default pen tip nib height
  387. #define PENTIP_OPAQUE           ((BYTE)0xFF)    // default opaque ink
  388. #define PENTIP_HILITE           ((BYTE)0x80)
  389. #define PENTIP_TRANSPARENT      ((BYTE)0)
  390.  
  391. // General PenData API return values (PDR_xx):
  392. #define PDR_NOHIT               3       // hit test failed
  393. #define PDR_HIT                 2       // hit test succeeded
  394. #define PDR_OK                  1       // success
  395. #define PDR_CANCEL              0       // callback cancel or impasse
  396.  
  397. #define PDR_ERROR               (-1)    // parameter or unspecified error
  398. #define PDR_PNDTERR             (-2)    // bad pendata
  399. #define PDR_VERSIONERR          (-3)    // pendata version error
  400. #define PDR_COMPRESSED          (-4)    // pendata is compressed
  401. #define PDR_STRKINDEXERR        (-5)    // stroke index error
  402. #define PDR_PNTINDEXERR         (-6)    // point index error
  403. #define PDR_MEMERR              (-7)    // memory error
  404. #define PDR_INKSETERR           (-8)    // bad inkset
  405. #define PDR_ABORT               (-9)    // pendata has become invalid, e.g.
  406. #define PDR_NA                  (-10)   // option not available (pw kernel)
  407.  
  408. #define PDR_USERDATAERR         (-16)   // user data error
  409. #define PDR_SCALINGERR          (-17)   // scale error
  410. #define PDR_TIMESTAMPERR        (-18)   // timestamp error
  411. #define PDR_OEMDATAERR          (-19)   // OEM data error
  412. #define PDR_SCTERR              (-20)   // SCT error (full)
  413.  
  414. // PenData Scaling (PDTS):
  415. #define PDTS_LOMETRIC           0       // 0.01mm
  416. #define PDTS_HIMETRIC           1       // 0.001mm
  417. #define PDTS_HIENGLISH          2       // 0.001"
  418. #define PDTS_STANDARDSCALE      2       // PDTS_HIENGLISH   alias
  419. #define PDTS_DISPLAY            3       // display pixel
  420. #define PDTS_ARBITRARY          4       // app-specific scaling
  421. #define PDTS_SCALEMASK          0x000F  // scaling values in low nibble
  422.  
  423. // CompactPenData() API trim options:
  424. #define PDTT_DEFAULT            0x0000
  425. #define PDTT_PENINFO            0x0100
  426. #define PDTT_UPPOINTS           0x0200
  427. #define PDTT_OEMDATA            0x0400
  428. #define PDTT_COLLINEAR          0x0800
  429. #define PDTT_COLINEAR           0x0800  // alt sp alias
  430. #define PDTT_DECOMPRESS         0x4000  // decompress the data
  431. #define PDTT_COMPRESS           0x8000
  432. #define PDTT_ALL                0x0F00  // PENINFO|UPPOINTS|OEMDATA|COLLINEAR
  433.  
  434. #define PHW_NONE                0x0000  // no OEMdata
  435. #define PHW_PRESSURE            0x0001  // report pressure in OEMdata if avail
  436. #define PHW_HEIGHT              0x0002  // ditto height
  437. #define PHW_ANGLEXY             0x0004  // ditto xy angle
  438. #define PHW_ANGLEZ              0x0008  // ditto z angle
  439. #define PHW_BARRELROTATION      0x0010  // ditto barrel rotation
  440. #define PHW_OEMSPECIFIC         0x0020  // ditto OEM-specific value
  441. #define PHW_PDK                 0x0040  // report per-point PDK_xx in OEM data
  442. #define PHW_ALL                 0x007F  // report everything
  443.  
  444. // compact pen data trim options: matches PDTT_values (see above)
  445. #define PDTS_COMPRESS2NDDERIV   0x0010  // compress using 2nd deriv
  446. #define PDTS_COMPRESSMETHOD     0x00F0  // sum of compress method flags
  447. #define PDTS_NOPENINFO          0x0100  // removes PENINFO struct from header
  448. #define PDTS_NOUPPOINTS         0x0200  // remove up pts
  449. #define PDTS_NOOEMDATA          0x0400  // remove OEM data
  450. #define PDTS_NOCOLLINEAR        0x0800  // remove successive identical pts
  451. #define PDTS_NOCOLINEAR         0x0800  // alt sp alias
  452. #define PDTS_NOTICK             0x1000  // remove timing info (2.0)
  453. #define PDTS_NOUSER             0x2000  // remove user info (2.0)
  454. #define PDTS_NOEMPTYSTROKES     0x4000  // remove empty strokes (2.0)
  455. #define PDTS_COMPRESSED         0x8000  // perform lossless compression
  456.  
  457. // SetStrokeAttributes options (SSA_xx):
  458. #define SSA_PENTIP              1       // set stroke tip (color, width, nib)
  459. #define SSA_PENTIPCLASS         2       // set stroke's class pentip
  460. #define SSA_USER                3       // set stroke user value
  461. #define SSA_USERCLASS           4       // set stroke's class user value
  462. #define SSA_TIME                5       // set time of stroke
  463. #define SSA_SELECT              6       // set selection status of stroke
  464. #define SSA_DOWN                7       // set up/down state of stroke
  465.  
  466. // SetStrokeTableAttributes options (SSA_xx):
  467. #define SSA_PENTIPTABLE         8       // set table-indexed pentip
  468. #define SSA_USERTABLE           9       // set table-indexed user value
  469.  
  470. // PenTip flag bits:
  471. #define TIP_ERASECOLOR          1       // erase specific color pentip.rgb
  472.  
  473. // TrimPenData() API options:
  474. #define TPD_RECALCSIZE          0x0000  // no trim, used for resize calc
  475. #define TPD_USER                0x0080  // per-stroke user info
  476. #define TPD_TIME                0x0100  // per-stroke timing info
  477. #define TPD_UPPOINTS            0x0200  // x-y data up points
  478. #define TPD_COLLINEAR           0x0400  // colinear and coincident points
  479. #define TPD_COLINEAR            0x0400  // alt sp alias
  480. #define TPD_PENINFO             0x0800  // PenInfo struct and all OEM
  481. #define TPD_PHW                 0x1000  // OEM & pdk except stroke tick or user
  482. #define TPD_OEMDATA             0x1000  // ditto
  483. #define TPD_EMPTYSTROKES        0x2000  // strokes with zero points
  484. #define TPD_EVERYTHING          0x3FFF  // everything (incl PHW_xx) except down pts
  485.  
  486. #endif /*!NOPENDATA */
  487.  
  488. //---------------------------------------------------------------------------
  489. #ifndef NOPENDICT   // not available in WIN32
  490.  
  491. // Dictionary:
  492. #define cbDictPathMax           255
  493. #define DIRQ_QUERY              1
  494. #define DIRQ_DESCRIPTION        2
  495. #define DIRQ_CONFIGURE          3
  496. #define DIRQ_OPEN               4
  497. #define DIRQ_CLOSE              5
  498. #define DIRQ_SETWORDLISTS       6
  499. #define DIRQ_STRING             7
  500. #define DIRQ_SUGGEST            8
  501. #define DIRQ_ADD                9
  502. #define DIRQ_DELETE             10
  503. #define DIRQ_FLUSH              11
  504. #define DIRQ_RCCHANGE           12
  505. #define DIRQ_SYMBOLGRAPH        13
  506. #define DIRQ_INIT               14
  507. #define DIRQ_CLEANUP            15
  508. #define DIRQ_COPYRIGHT          16
  509. #define DIRQ_USER               4096
  510. #endif /*!NOPENDICT */
  511.  
  512. //---------------------------------------------------------------------------
  513. #ifndef NOPENDRIVER
  514.  
  515. // Pen driver:
  516. #define BITPENUP                0x8000
  517.  
  518. // Pen Driver messages:
  519. #define DRV_SetPenDriverEntryPoints     DRV_RESERVED+1
  520. #define DRV_SetEntryPoints              DRV_RESERVED+1  // alias
  521. #define DRV_RemovePenDriverEntryPoints  DRV_RESERVED+2
  522. #define DRV_RemoveEntryPoints           DRV_RESERVED+2  // alias
  523. #define DRV_SetPenSamplingRate          DRV_RESERVED+3
  524. #define DRV_SetPenSamplingDist          DRV_RESERVED+4
  525. #define DRV_GetName                     DRV_RESERVED+5
  526. #define DRV_GetVersion                  DRV_RESERVED+6
  527. #define DRV_GetPenInfo                  DRV_RESERVED+7
  528. #define DRV_PenPlayStart                DRV_RESERVED+8
  529. #define DRV_PenPlayBack                 DRV_RESERVED+9
  530. #define DRV_PenPlayStop                 DRV_RESERVED+10
  531. #define DRV_GetCalibration              DRV_RESERVED+11
  532. #define DRV_SetCalibration              DRV_RESERVED+12
  533. #define DRV_Reserved1                   DRV_RESERVED+13
  534. #define DRV_Reserved2                   DRV_RESERVED+14
  535. #define DRV_Query                       DRV_RESERVED+15
  536. #define DRV_GetPenSamplingRate          DRV_RESERVED+16
  537. #define DRV_Calibrate                   DRV_RESERVED+17
  538.  
  539. // Pen Driver Playback constants:
  540. #define PLAY_VERSION_10_DATA 0
  541. #define PLAY_VERSION_20_DATA 1
  542.  
  543. // Pen Driver return values:
  544. #define DRV_FAILURE             0x00000000
  545. #define DRV_SUCCESS             0x00000001
  546. #define DRV_BADPARAM1           0xFFFFFFFF
  547. #define DRV_BADPARAM2           0xFFFFFFFE
  548. #define DRV_BADSTRUCT           0xFFFFFFFD
  549.  
  550. // Pen Driver register messages flags:
  551. #define PENREG_DEFAULT          0x00000002
  552. #define PENREG_WILLHANDLEMOUSE  0x00000001
  553.  
  554. #define MAXOEMDATAWORDS         6             // rgwOemData[MAXOEMDATAWORDS]
  555.  
  556. // Pen Collection Mode termination conditions:
  557. // (note update doc for PCMINFO struct if change these)
  558. #define PCM_PENUP               0x00000001L   // stop on penup
  559. #define PCM_RANGE               0x00000002L   // stop on leaving range
  560. #define PCM_INVERT              0x00000020L   // stop on tap of opposite end
  561. #define PCM_RECTEXCLUDE         0x00002000L   // click in exclude rect
  562. #define PCM_RECTBOUND           0x00004000L   // click outside bounds rect
  563. #define PCM_TIMEOUT             0x00008000L   // no activity for timeout ms
  564. // new for 2.0:
  565. #define PCM_RGNBOUND            0x00010000L   // click outside bounding region
  566. #define PCM_RGNEXCLUDE          0x00020000L   // click in exclude region
  567. #define PCM_DOPOLLING           0x00040000L   // polling mode
  568. #define PCM_TAPNHOLD            0x00080000L   // check for Tap And Hold
  569. #define PCM_ADDDEFAULTS         RC_LDEFAULTFLAGS /* 0x80000000L */
  570.  
  571. // Pen Device Capabilities:
  572. #define PDC_INTEGRATED          0x00000001L   // display==digitizer
  573. #define PDC_PROXIMITY           0x00000002L   // detect non-contacting pen
  574. #define PDC_RANGE               0x00000004L   // event on out-of-range
  575. #define PDC_INVERT              0x00000008L   // pen opposite end detect
  576. #define PDC_RELATIVE            0x00000010L   // pen driver coords
  577. #define PDC_BARREL1             0x00000020L   // barrel button 1 present
  578. #define PDC_BARREL2             0x00000040L   // ditto 2
  579. #define PDC_BARREL3             0x00000080L   // ditto 3
  580.  
  581. // Pen Driver Kit states:
  582. #define PDK_NULL                0x0000  // default to no flags set
  583. #define PDK_UP                  0x0000  // PDK_NULL alias
  584. #define PDK_DOWN                0x0001  // pentip switch ON due to contact
  585. #define PDK_BARREL1             0x0002  // barrel1 switch depressed
  586. #define PDK_BARREL2             0x0004  // ditto 2
  587. #define PDK_BARREL3             0x0008  // ditto 3
  588. #define PDK_SWITCHES            0x000f  // sum of down + barrels 1,2,3
  589. #define PDK_TRANSITION          0x0010  // set by GetPenHwData
  590. #define PDK_UNUSED10            0x0020
  591. #define PDK_UNUSED20            0x0040
  592. #define PDK_INVERTED            0x0080  // other end of pen used as tip
  593. #define PDK_PENIDMASK           0x0F00  // bits 8..11 physical pen id (0..15)
  594. #define PDK_UNUSED1000          0x1000
  595. #define PDK_INKSTOPPED          0x2000  // Inking stopped
  596. #define PDK_OUTOFRANGE          0x4000  // pen left range (OEM data invalid)
  597. #define PDK_DRIVER              0x8000  // pen (not mouse) event
  598.  
  599. #define PDK_TIPMASK             0x0001  // mask for testing PDK_DOWN
  600.  
  601. // OEM-specific values for Pen Driver:
  602. #define PDT_NULL                0
  603. #define PDT_PRESSURE            1       // pressure supported
  604. #define PDT_HEIGHT              2       // height above tablet
  605. #define PDT_ANGLEXY             3       // xy (horiz) angle supported
  606. #define PDT_ANGLEZ              4       // z (vert) angle supported
  607. #define PDT_BARRELROTATION      5       // barrel is rotated
  608. #define PDT_OEMSPECIFIC         16      // max
  609.  
  610. // Denotes the ID of the current packet
  611. #define PID_CURRENT             (UINT)(-1)
  612.  
  613. // Recognition and GetPenHwData Returns:
  614. #define REC_OEM                 (-1024) // first recognizer-specific debug val
  615. #define REC_LANGUAGE            (-48)   // unsupported language field
  616. #define REC_GUIDE               (-47)   // invalid GUIDE struct
  617. #define REC_PARAMERROR          (-46)   // bad param
  618. #define REC_INVALIDREF          (-45)   // invalid data ref param
  619. #define REC_RECTEXCLUDE         (-44)   // invalid rect
  620. #define REC_RECTBOUND           (-43)   // invalid rect
  621. #define REC_PCM                 (-42)   // invalid lPcm parameter
  622. #define REC_RESULTMODE          (-41)
  623. #define REC_HWND                (-40)   // invalid window to send results to
  624. #define REC_ALC                 (-39)   // invalid enabled alphabet
  625. #define REC_ERRORLEVEL          (-38)   // invalid errorlevel
  626. #define REC_CLVERIFY            (-37)   // invalid verification level
  627. #define REC_DICT                (-36)   // invalid dict params
  628. #define REC_HREC                (-35)   // invalid recognition handle
  629. #define REC_BADEVENTREF         (-33)   // invalid wEventRef
  630. #define REC_NOCOLLECTION        (-32)   // collection mode not set
  631. #define REC_DEBUG               (-32)   // beginning of debug values
  632. #define REC_POINTEREVENT        (-31)   // tap or tap&hold event
  633. #define REC_BADHPENDATA         (-9)    // invalid hpendata header or locking
  634. #define REC_OOM                 (-8)    // out of memory error
  635. #define REC_NOINPUT             (-7)    // no data collected before termination
  636. #define REC_NOTABLET            (-6)    // tablet not physically present
  637. #define REC_BUSY                (-5)    // another task is using recognizer
  638. #define REC_BUFFERTOOSMALL      (-4)    // ret by GetPenHwEventData()
  639. #define REC_ABORT               (-3)    // recog stopped by EndPenCollection()
  640. #define REC_NA                  (-2)    // function not available
  641. #define REC_OVERFLOW            (-1)    // data overflow
  642. #define REC_OK                  0       // interrim completion
  643. #define REC_TERMBOUND           1       // hit outside bounding rect
  644. #define REC_TERMEX              2       // hit inside exclusion rect
  645. #define REC_TERMPENUP           3       // pen up
  646. #define REC_TERMRANGE           4       // pen left proximity
  647. #define REC_TERMTIMEOUT         5       // no writing for timeout ms
  648. #define REC_DONE                6       // normal completion
  649. #define REC_TERMOEM             512     // first recognizer-specific retval
  650.  
  651. #endif /*!NOPENDRIVER */
  652.  
  653. //---------------------------------------------------------------------------
  654. #ifndef NOPENHRC
  655.  
  656. // Handwriting Recognizer:
  657.  
  658. // GetResultsHRC options:
  659. #define GRH_ALL                 0       // get all results
  660. #define GRH_GESTURE             1       // get only gesture results
  661. #define GRH_NONGESTURE          2       // get all but gesture results
  662.  
  663. // Gesture sets for EnableGestureSetHRC (bit flags):
  664. #define GST_SEL                 0x00000001L   // sel & lasso
  665. #define GST_CLIP                0x00000002L   // cut copy paste
  666. #define GST_WHITE               0x00000004L   // sp tab ret
  667. #define GST_KKCONVERT           0x00000008L   // kkconvert
  668. #define GST_EDIT                0x00000010L   // insert correct undo clear
  669. #define GST_SYS                 0x00000017L   // all of the above
  670. #define GST_CIRCLELO            0x00000100L   // lowercase circle
  671. #define GST_CIRCLEUP            0x00000200L   // uppercase circle
  672. #define GST_CIRCLE              0x00000300L   // all circle
  673. #define GST_ALL                 0x00000317L   // all of the above
  674.  
  675. // General HRC API return values (HRCR_xx):
  676. #define HRCR_NORESULTS          4       // No possible results  to be found
  677. #define HRCR_COMPLETE           3       // finished recognition
  678. #define HRCR_GESTURE            2       // recognized gesture
  679. #define HRCR_OK                 1       // success
  680. #define HRCR_INCOMPLETE         0       // recognizer is processing input
  681. #define HRCR_ERROR              (-1)    // invalid param or unspecified error
  682. #define HRCR_MEMERR             (-2)    // memory error
  683. #define HRCR_INVALIDGUIDE       (-3)    // invalid GUIDE struct
  684. #define HRCR_INVALIDPNDT        (-4)    // invalid pendata
  685. #define HRCR_UNSUPPORTED        (-5)    // recognizer does not support feature
  686. #define HRCR_CONFLICT           (-6)    // training conflict
  687. #define HRCR_HOOKED             (-8)    // hookasaurus ate the result
  688.  
  689. // system wordlist for AddWordsHWL:
  690. #define HWL_SYSTEM              ((HWL)1)   // magic value means system wordlist
  691.  
  692. // inkset returns:
  693. #define ISR_ERROR               (-1)    // Memory or other error
  694. #define ISR_BADINKSET           (-2)    // bad source inkset
  695. #define ISR_BADINDEX            (-3)    // bad inkset index
  696.  
  697. #ifndef IX_END
  698. #define IX_END                  0xFFFF  // to or past last available index
  699. #endif //!IX_END
  700.  
  701. #define MAXHOTSPOT              8       // max number of hotspots possible
  702.  
  703. // ProcessHRC time constants:
  704. #define PH_MAX                  0xFFFFFFFFL   // recognize rest of ink
  705. #define PH_DEFAULT              0xFFFFFFFEL   // reasonable time
  706. #define PH_MIN                  0xFFFFFFFDL   // minimum time
  707.  
  708. // ResultsHookHRC options:
  709. #define RHH_STD                 0       // GetResultsHRC
  710. #define RHH_BOX                 1       // GetBoxResultsHRC
  711.  
  712. // SetWordlistCoercionHRC options:
  713. #define SCH_NONE                0       // turn off coercion
  714. #define SCH_ADVISE              1       // macro is hint only
  715. #define SCH_FORCE               2       // some result is forced from macro
  716.  
  717. // Symbol Context Insert Modes
  718. #define SCIM_INSERT             0       // insert
  719. #define SCIM_OVERWRITE          1       // overwrite
  720.  
  721. // SetResultsHookHREC options:
  722. #define SRH_HOOKALL             (HREC)1 // hook all recognizers
  723.  
  724. // SetInternationalHRC options:
  725. #define SSH_RD                  1       // to right and down (English)
  726. #define SSH_RU                  2       // to right and up
  727. #define SSH_LD                  3       // to left and down (Hebrew)
  728. #define SSH_LU                  4       // to left and up
  729. #define SSH_DL                  5       // down and to the left (Chinese)
  730. #define SSH_DR                  6       // down and to the right (Chinese)
  731. #define SSH_UL                  7       // up and to the left
  732. #define SSH_UR                  8       // up and to the right
  733.  
  734. #define SIH_ALLANSICHAR         1       // use all ANSI
  735.  
  736. // TrainHREC options:
  737. #define TH_QUERY                0       // query the user if conflict
  738. #define TH_FORCE                1       // ditto no query
  739. #define TH_SUGGEST              2       // abandon training if conflict
  740.  
  741. // Return values for WCR_TRAIN Function
  742. #define TRAIN_NONE              0x0000
  743. #define TRAIN_DEFAULT           0x0001
  744. #define TRAIN_CUSTOM            0x0002
  745. #define TRAIN_BOTH              (TRAIN_DEFAULT | TRAIN_CUSTOM)
  746.  
  747. // Control values for TRAINSAVE
  748. #define TRAIN_SAVE              0       // save changes that have been made
  749. #define TRAIN_REVERT            1       // discard changes that have been made
  750. #define TRAIN_RESET             2       // use factory settings
  751.  
  752. // ConfigRecognizer and ConfigHREC options:
  753. #define WCR_RECOGNAME           0       // ConfigRecognizer 1.0
  754. #define WCR_QUERY               1
  755. #define WCR_CONFIGDIALOG        2
  756. #define WCR_DEFAULT             3
  757. #define WCR_RCCHANGE            4
  758. #define WCR_VERSION             5
  759. #define WCR_TRAIN               6
  760. #define WCR_TRAINSAVE           7
  761. #define WCR_TRAINMAX            8
  762. #define WCR_TRAINDIRTY          9
  763. #define WCR_TRAINCUSTOM         10
  764. #define WCR_QUERYLANGUAGE       11
  765. #define WCR_USERCHANGE          12
  766.  
  767. // ConfigHREC options:
  768. #define WCR_PWVERSION           13      // ver of PenWin recognizer supports
  769. #define WCR_GETALCPRIORITY      14      // get recognizer's ALC priority
  770. #define WCR_SETALCPRIORITY      15      // set recognizer's ALC priority
  771. #define WCR_GETANSISTATE        16      // get ALLANSICHAR state
  772. #define WCR_SETANSISTATE        17      // set ALLANSICHAR if T
  773. #define WCR_GETHAND             18      // get writing hand
  774. #define WCR_SETHAND             19      // set writing hand
  775. #define WCR_GETDIRECTION        20      // get writing direction
  776. #define WCR_SETDIRECTION        21      // set writing direction
  777. #define WCR_INITRECOGNIZER      22      // init recognizer and set user name
  778. #define WCR_CLOSERECOGNIZER     23      // close recognizer
  779.  
  780. #define WCR_PRIVATE             1024
  781.  
  782. // sub-functions of WCR_USERCHANGE
  783. #define CRUC_NOTIFY             0       // user name change
  784. #define CRUC_REMOVE             1       // user name deleted
  785.  
  786. // Word List Types:
  787. #define WLT_STRING              0       // one string
  788. #define WLT_STRINGTABLE         1       // array of strings
  789. #define WLT_EMPTY               2       // empty wordlist
  790. #define WLT_WORDLIST            3       // handle to a wordlist
  791.  
  792. #endif /*!NOPENHRC */
  793.  
  794. //---------------------------------------------------------------------------
  795. #ifndef NOPENIEDIT
  796.  
  797. // IEdit Background Options
  798. #define IEB_DEFAULT             0       // default (use COLOR_WINDOW)
  799. #define IEB_BRUSH               1       // paint background with brush
  800. #define IEB_BIT_UL              2       // bitmap, upper-left aligned
  801. #define IEB_BIT_CENTER          3       // bitmap, centered in control
  802. #define IEB_BIT_TILE            4       // bitmap, tiled repeatedly in ctl
  803. #define IEB_BIT_STRETCH         5       // bitmap, stretched to fit ctl
  804. #define IEB_OWNERDRAW           6       // parent window will draw background
  805.  
  806. // IEdit Drawing Options
  807. #define IEDO_NONE               0x0000  // no drawing
  808. #define IEDO_FAST               0x0001  // ink drawn as fast as possible (def)
  809. #define IEDO_SAVEUPSTROKES      0x0002  // save upstrokes
  810. #define IEDO_RESERVED           0xFFFC  // reserved bits
  811.  
  812. // IEdit Input Options
  813. #define IEI_MOVE                0x0001  // move ink into ctl
  814. #define IEI_RESIZE              0x0002  // resize ink to fit within ctl
  815. #define IEI_CROP                0x0004  // discard ink outside of ctl
  816. #define IEI_DISCARD             0x0008  // discard all ink if any outside ctl
  817. #define IEI_RESERVED            0xFFF0  // reserved
  818.  
  819. // IEdit IE_GETINK options
  820. #define IEGI_ALL                0x0000  // get all ink from control
  821. #define IEGI_SELECTION          0x0001  // get selected ink from control
  822.  
  823. // IEdit IE_SETMODE/IE_GETMODE (mode) options
  824. #define IEMODE_READY            0       // default inking, moving, sizing mode
  825. #define IEMODE_ERASE            1       // erasing Mode
  826. #define IEMODE_LASSO            2       // lasso selection mode
  827.  
  828. // IEdit    Notification Bits
  829. #define IEN_NULL                0x0000  // null notification
  830. #define IEN_PDEVENT             0x0001  // notify about pointing device events
  831. #define IEN_PAINT               0x0002  // send painting-related notifications
  832. #define IEN_FOCUS               0x0004  // send focus-related notifications
  833. #define IEN_SCROLL              0x0008  // send scrolling notifications
  834. #define IEN_EDIT                0x0010  // send editing/change notifications
  835. #define IEN_PROPERTIES          0x0020  // send properties dialog notification
  836. #define IEN_RESERVED            0xFF80  // reserved
  837.  
  838. // IEdit Return Values
  839. #define IER_OK                  0       // success
  840. #define IER_NO                  0       // ctl cannot do request
  841. #define IER_YES                 1       // ctl can do request
  842. #define IER_ERROR               (-1)    // unspecified error; operation failed
  843. #define IER_PARAMERR            (-2)    // bogus lParam value, bad handle, etc
  844. #define IER_OWNERDRAW           (-3)    // can't set drawopts in ownerdraw ctl
  845. #define IER_SECURITY            (-4)    // security protection disallows action
  846. #define IER_SELECTION           (-5)    // nothing selected in control
  847. #define IER_SCALE               (-6)    // merge:  incompatible scaling factors
  848. #define IER_MEMERR              (-7)    // memory error
  849. #define IER_NOCOMMAND           (-8)    // tried IE_GETCOMMAND w/no command
  850. #define IER_NOGESTURE           (-9)    // tried IE_GETGESTURE w/no gesture
  851. #define IER_NOPDEVENT           (-10)   // tried IE_GETPDEVENT but no event
  852. #define IER_NOTINPAINT          (-11)   // tried IE_GETPAINTSTRUCT but no paint
  853. #define IER_PENDATA             (-12)   // can't do request with NULL hpd in ctl
  854.  
  855. // IEdit Recognition Options
  856. #define IEREC_NONE              0x0000  // No recognition
  857. #define IEREC_GESTURE           0x0001  // Gesture recognition
  858. #define IEREC_ALL               (IEREC_GESTURE)
  859. #define IEREC_RESERVED          0xFFFE  // Reserved
  860.  
  861. // IEdit Security Options
  862. #define IESEC_NOCOPY            0x0001  // copying disallowed
  863. #define IESEC_NOCUT             0x0002  // cutting disallowed
  864. #define IESEC_NOPASTE           0x0004  // pasting disallowed
  865. #define IESEC_NOUNDO            0x0008  // undoing disallowed
  866. #define IESEC_NOINK             0x0010  // inking  disallowed
  867. #define IESEC_NOERASE           0x0020  // erasing disallowed
  868. #define IESEC_NOGET             0x0040  // IE_GETINK message verboten
  869. #define IESEC_NOSET             0x0080  // IE_SETINK message verboten
  870. #define IESEC_RESERVED          0xFF00  // reserved
  871.  
  872. // IEdit IE_SETFORMAT/IE_GETFORMAT options
  873. #define IESF_ALL                0x0001  // set/get stk fmt of all ink
  874. #define IESF_SELECTION          0x0002  // set/get stk fmt of selected ink
  875. #define IESF_STROKE             0x0004  // set/get stk fmt of specified stroke
  876. //
  877. #define IESF_TIPCOLOR           0x0008  // set color
  878. #define IESF_TIPWIDTH           0x0010  // set width
  879. #define IESF_PENTIP             (IESF_TIPCOLOR|IESF_TIPWIDTH)
  880. //
  881.  
  882. // IEdit IE_SETINK options
  883. #define IESI_REPLACE            0x0000  // replace ink in control
  884. #define IESI_APPEND             0x0001  // append ink to existing control ink
  885.  
  886. // Ink Edit Control (IEdit) definitions
  887. // IEdit Notifications
  888. #define IN_PDEVENT      ((IEN_PDEVENT<<8)|0)   // pointing device event occurred
  889. #define IN_ERASEBKGND   ((IEN_NULL<<8)|1)      // control needs bkgnd erased
  890. #define IN_PREPAINT     ((IEN_PAINT<<8)|2)     // before control paints its ink
  891. #define IN_PAINT        ((IEN_NULL<<8)|3)      // control needs to be painted
  892. #define IN_POSTPAINT    ((IEN_PAINT<<8)|4)     // after control has painted
  893. #define IN_MODECHANGED  ((IEN_EDIT<<8)|5)      // mode changed
  894. #define IN_CHANGE       ((IEN_EDIT<<8)|6)      // contents changed & painted
  895. #define IN_UPDATE       ((IEN_EDIT<<8)|7)      // contents changed & !painted
  896. #define IN_SETFOCUS     ((IEN_FOCUS<<8)|8)     // IEdit is getting focus
  897. #define IN_KILLFOCUS    ((IEN_FOCUS<<8)|9)     // IEdit is losing focus
  898. #define IN_MEMERR       ((IEN_NULL<<8)|10)     // memory error
  899. #define IN_HSCROLL      ((IEN_SCROLL<<8)|11)   // horz scrolled, not painted
  900. #define IN_VSCROLL      ((IEN_SCROLL<<8)|12)   // vert scrolled, not painted
  901. #define IN_GESTURE      ((IEN_EDIT<<8)|13)     // user has gestured on control
  902. #define IN_COMMAND      ((IEN_EDIT<<8)|14)     // command selected from menu
  903. #define IN_CLOSE        ((IEN_NULL<<8)|15)     // I-Edit is being closed
  904. #define IN_PROPERTIES   ((IEN_PROPERTIES<<8)|16) // properties dialog
  905.  
  906. #endif /*!NOPENIEDIT */
  907.  
  908. //---------------------------------------------------------------------------
  909. #ifndef NOPENINKPUT
  910.  
  911. // PenIn[k]put API constants
  912.  
  913. // Default Processing
  914. #define LRET_DONE               1L
  915. #define LRET_ABORT              (-1L)
  916. #define LRET_HRC                (-2L)
  917. #define LRET_HPENDATA           (-3L)
  918. #define LRET_PRIVATE            (-4L)
  919.  
  920. // Inkput:
  921. #define PCMR_OK                 0
  922. #define PCMR_ALREADYCOLLECTING  (-1)
  923. #define PCMR_INVALIDCOLLECTION  (-2)
  924. #define PCMR_EVENTLOCK          (-3)
  925. #define PCMR_INVALID_PACKETID   (-4)
  926. #define PCMR_TERMTIMEOUT        (-5)
  927. #define PCMR_TERMRANGE          (-6)
  928. #define PCMR_TERMPENUP          (-7)
  929. #define PCMR_TERMEX             (-8)
  930. #define PCMR_TERMBOUND          (-9)
  931. #define PCMR_APPTERMINATED      (-10)
  932. #define PCMR_TAP                (-11)   // alias PCMR_TAPNHOLD_LAST
  933. #define PCMR_SELECT             (-12)   // ret because of tap & hold
  934. #define PCMR_OVERFLOW           (-13)
  935. #define PCMR_ERROR              (-14)   // parameter or unspecified error
  936. #define PCMR_DISPLAYERR         (-15)   // inking only
  937. #define PCMR_TERMINVERT         (-16)   // termination due to tapping opposite end of pen
  938.  
  939. #define PII_INKCLIPRECT         0x0001
  940. #define PII_INKSTOPRECT         0x0002
  941. #define PII_INKCLIPRGN          0x0004
  942. #define PII_INKSTOPRGN          0x0008
  943. #define PII_INKPENTIP           0x0010
  944. #define PII_SAVEBACKGROUND      0x0020
  945. #define PII_CLIPSTOP            0x0040
  946.  
  947. #define PIT_RGNBOUND            0x0001
  948. #define PIT_RGNEXCLUDE          0x0002
  949. #define PIT_TIMEOUT             0x0004
  950. #define PIT_TAPNHOLD            0x0008
  951.  
  952. #endif /*!NOPENINKPUT */
  953.  
  954. //---------------------------------------------------------------------------
  955. #ifndef NOPENMISC
  956.  
  957. // Misc RC Definitions:
  958. #define CL_NULL                 0
  959. #define CL_MINIMUM              1       // minimum confidence level
  960. #define CL_MAXIMUM              100     // max (require perfect recog)
  961. #define cwRcReservedMax         8       // rc.rgwReserved[cwRcReservedMax]
  962. #define ENUM_MINIMUM            1
  963. #define ENUM_MAXIMUM            4096
  964.  
  965. #define HKP_SETHOOK             0       // SetRecogHook()
  966. #define HKP_UNHOOK              0xFFFF
  967.  
  968. #define HWR_RESULTS             0
  969. #define HWR_APPWIDE             1
  970.  
  971. #define iSycNull                (-1)
  972. #define LPDFNULL                ((LPDF)NULL)
  973. #define MAXDICTIONARIES         16      // rc.rglpdf[MAXDICTIONARIES]
  974. #define wPntAll                 (UINT)0xFFFF
  975. #define cbRcLanguageMax         44      // rc.lpLanguage[cbRcLanguageMax]
  976. #define cbRcUserMax             32      // rc.lpUser[cbRcUserMax]
  977. #define cbRcrgbfAlcMax          32      // rc.rgbfAlc[cbRcrgbfAlcMax]
  978. #define RC_WDEFAULT             0xffff
  979. #define RC_LDEFAULT             0xffffffffL
  980. #define RC_WDEFAULTFLAGS        0x8000
  981. #define RC_LDEFAULTFLAGS        0x80000000L
  982.  
  983. // CorrectWriting() API constants:
  984. // LOWORD values:
  985. #define CWR_REPLACECR           0x0001  // replace carriage ret (\r) with space
  986. #define CWR_STRIPCR             CWR_REPLACECR  // alias for backward compatibility
  987. #define CWR_STRIPLF             0x0002  // strip linefeed (\n)
  988. #define CWR_REPLACETAB          0x0004  // replace tab with space (\t)
  989. #define CWR_STRIPTAB            CWR_REPLACETAB // alias for backward compatibility
  990. #define CWR_SINGLELINEEDIT      (CWR_REPLACECR|CWR_STRIPLF|CWR_REPLACETAB)  // all of the above
  991. #define CWR_INSERT              0x0008  // use "Insert Text" instead of "Edit Text" in the title
  992. #define CWR_TITLE               0x0010  // interpret dwParam as title string
  993. #define CWR_KKCONVERT           0x0020  // JPN initiate IME
  994. #define CWR_SIMPLE              0x0040  // simple dialog (lens)
  995. #define CWR_HEDIT               0x0080  // HEDIT CorrectWriting
  996. #define CWR_KEYBOARD            0x0100  // keyboard lens
  997. #define CWR_BOXES               0x0200  // bedit lens
  998.  
  999. // HIWORD values: keyboard types
  1000. #define CWRK_DEFAULT            0       // default keyboard type
  1001. #define CWRK_BASIC              1       // basic keyboard
  1002. #define CWRK_FULL               2       // full keyboard
  1003. #define CWRK_NUMPAD             3       // numeric keyboard
  1004. #define CWRK_TELPAD             4       // Telephone type keyboard
  1005.  
  1006. #ifdef JAPAN
  1007. #define GPMI_OK                 0L
  1008. #define GPMI_INVALIDPMI         0x8000L
  1009. #endif // JAPAN
  1010.  
  1011. // inkwidth limits
  1012. #define INKWIDTH_MINIMUM        0           // 0 invisible, 1..15 pixel widths
  1013. #define INKWIDTH_MAXIMUM        15          // max width in pixels
  1014.  
  1015. // Get/SetPenMiscInfo:
  1016. // PMI_RCCHANGE is for WM_GLOBALRCCHANGE compatability only:
  1017. #define PMI_RCCHANGE            0       // invalid for Get/SetPenMiscInfo
  1018.  
  1019. #define PMI_BEDIT               1       // boxed edit info
  1020. #define PMI_IMECOLOR            2       // input method editor color
  1021. #define PMI_CXTABLET            3       // tablet width
  1022. #define PMI_CYTABLET            4       // tablet height
  1023. #define PMI_PENTIP              6       // pen tip: color, width, nib
  1024. #define PMI_ENABLEFLAGS         7       // PWE_xx enablements
  1025. #define PMI_TIMEOUT             8       // handwriting timeout
  1026. #define PMI_TIMEOUTGEST         9       // gesture timeout
  1027. #define PMI_TIMEOUTSEL          10      // select (press&hold) timeout
  1028. #define PMI_SYSFLAGS            11      // component load configuration
  1029. #define PMI_INDEXFROMRGB        12      // color table index from RGB
  1030. #define PMI_RGBFROMINDEX        13      // RGB from color table index
  1031. #define PMI_SYSREC              14      // handle to system recognizer
  1032. #define PMI_TICKREF             15      // reference absolute time
  1033.  
  1034. #define PMI_SAVE                0x1000  // save setting to file
  1035.  
  1036. // Set/GetPenMiscInfo/PMI_ENABLEFLAGS flags:
  1037. #define PWE_AUTOWRITE           0x0001  // pen functionality where IBeam
  1038. #define PWE_ACTIONHANDLES       0x0002  // action handles in controls
  1039. #define PWE_INPUTCURSOR         0x0004  // show cursor while writing
  1040. #define PWE_LENS                0x0008  // allow lens popup
  1041.  
  1042. // GetPenMiscInfo/PMI_SYSFLAGS flags:
  1043. #define PWF_RC1                 0x0001  // Windows for Pen 1.0 RC support
  1044. #define PWF_PEN                 0x0004  // pen drv loaded & hdwe init'd
  1045. #define PWF_INKDISPLAY          0x0008  // ink-compatible display drv loaded
  1046. #define PWF_RECOGNIZER          0x0010  // system recognizer installed
  1047. #define PWF_BEDIT               0x0100  // boxed edit support
  1048. #define PWF_HEDIT               0x0200  // free input edit support
  1049. #define PWF_IEDIT               0x0400  // ink edit support
  1050. #define PWF_ENHANCED            0x1000  // enh features (gest, 1ms timing)
  1051. #define PWF_FULL\
  1052.         PWF_RC1|PWF_PEN|PWF_INKDISPLAY|PWF_RECOGNIZER|\
  1053.         PWF_BEDIT|PWF_HEDIT |PWF_IEDIT|PWF_ENHANCED
  1054.  
  1055. // SetPenAppFlags() / RegisterPenApp() API constants:
  1056. #define RPA_DEFAULT             0x0001  // == RPA_HEDIT
  1057. #define RPA_HEDIT               0x0001  // convert EDIT to HEDIT
  1058. #define RPA_KANJIFIXEDBEDIT     0x0002
  1059. #define RPA_DBCSPRIORITY        0x0004  // assume DBCS has priority (Japan)
  1060.  
  1061. #define PMIR_OK                 0L
  1062. #define PMIR_INDEX              (-1L)
  1063. #define PMIR_VALUE              (-2L)
  1064. #define PMIR_INVALIDBOXEDITINFO (-3L)
  1065. #define PMIR_INIERROR           (-4L)
  1066. #define PMIR_ERROR              (-5L)
  1067. #define PMIR_NA                 (-6L)
  1068.  
  1069. #ifdef JAPAN
  1070. #define SPMI_OK                 0L
  1071. #define SPMI_INVALIDBOXEDITINFO 1L
  1072. #define SPMI_INIERROR           2L
  1073. #define SPMI_INVALIDPMI         0x8000L
  1074. #endif //JAPAN
  1075.  
  1076. #endif /*!NOPENMISC */
  1077.  
  1078. //---------------------------------------------------------------------------
  1079. #ifndef NOPENRC1    // not available in WIN32
  1080.  
  1081. // RC Options and Flags:
  1082. // GetGlobalRC() API return codes:
  1083. #define GGRC_OK                 0       // no err
  1084. #define GGRC_DICTBUFTOOSMALL    1       // lpDefDict buffer too small for path
  1085. #define GGRC_PARAMERROR         2       // invalid params: call ignored
  1086. #define GGRC_NA                 3       // function not available
  1087.  
  1088. // RC Direction:
  1089. #define RCD_DEFAULT             0       // def none
  1090. #define RCD_LR                  1       // left to right like English
  1091. #define RCD_RL                  2       // right to left like Arabic
  1092. #define RCD_TB                  3       // top to bottom like Japanese
  1093. #define RCD_BT                  4       // bottom to top like some Chinese
  1094.  
  1095. // RC International Preferences:
  1096. #define RCIP_ALLANSICHAR        0x0001  // all ANSI chars
  1097. #define RCIP_MASK               0x0001
  1098.  
  1099. // RC Options:
  1100. #define RCO_NOPOINTEREVENT      0x00000001L   // no recog tap, tap/hold
  1101. #define RCO_SAVEALLDATA         0x00000002L   // save pen data like upstrokes
  1102. #define RCO_SAVEHPENDATA        0x00000004L   // save pen data for app
  1103. #define RCO_NOFLASHUNKNOWN      0x00000008L   // no ? cursor on unknown
  1104. #define RCO_TABLETCOORD         0x00000010L   // tablet coords used in RC
  1105. #define RCO_NOSPACEBREAK        0x00000020L   // no space break recog -> dict
  1106. #define RCO_NOHIDECURSOR        0x00000040L   // display cursor during inking
  1107. #define RCO_NOHOOK              0x00000080L   // disallow ink hook (passwords)
  1108. #define RCO_BOXED               0x00000100L   // valid rc.guide provided
  1109. #define RCO_SUGGEST             0x00000200L   // for dict suggest
  1110. #define RCO_DISABLEGESMAP       0x00000400L   // disable gesture mapping
  1111. #define RCO_NOFLASHCURSOR       0x00000800L   // no cursor feedback
  1112. #define RCO_BOXCROSS            0x00001000L   // show + at boxedit center
  1113. #define RCO_COLDRECOG           0x00008000L   // result is from cold recog
  1114. #define RCO_SAVEBACKGROUND      0x00010000L   // Save background from ink
  1115. #define RCO_DODEFAULT           0x00020000L   // do default gesture processing
  1116.  
  1117. // RC Orientation of Tablet:
  1118. #define RCOR_NORMAL             1       // tablet not rotated
  1119. #define RCOR_RIGHT              2       // rotated 90 deg anticlockwise
  1120. #define RCOR_UPSIDEDOWN         3       // rotated 180 deg
  1121. #define RCOR_LEFT               4       // rotated 90 deg clockwise
  1122.  
  1123. // RC Preferences:
  1124. #define RCP_LEFTHAND            0x0001  // left handed input
  1125. #define RCP_MAPCHAR             0x0004  // fill in syg.lpsyc (ink) for training
  1126.  
  1127. // RCRESULT wResultsType values:
  1128. #define RCRT_DEFAULT            0x0000  // normal ret
  1129. #define RCRT_UNIDENTIFIED       0x0001  // result contains unidentified results
  1130. #define RCRT_GESTURE            0x0002  // result is a gesture
  1131. #define RCRT_NOSYMBOLMATCH      0x0004  // nothing recognized (no ink match)
  1132. #define RCRT_PRIVATE            0x4000  // recognizer-specific symbol
  1133. #define RCRT_NORECOG            0x8000  // no recog attempted, only data ret
  1134. #define RCRT_ALREADYPROCESSED   0x0008  // GestMgr hooked it
  1135. #define RCRT_GESTURETRANSLATED  0x0010  // GestMgr translated it to ANSI value
  1136. #define RCRT_GESTURETOKEYS      0x0020  // ditto to set of virtual keys
  1137.  
  1138. // RC Result Return Mode specification:
  1139. #define RRM_STROKE              0       // return results after each stroke
  1140. #define RRM_SYMBOL              1       // per symbol (e.g. boxed edits)
  1141. #define RRM_WORD                2       // on recog of a word
  1142. #define RRM_NEWLINE             3       // on recog of a line break
  1143. #define RRM_COMPLETE            16      // on PCM_xx specified completion
  1144.  
  1145. // SetGlobalRC() API return code flags:
  1146. #define SGRC_OK                 0x0000  // no err
  1147. #define SGRC_USER               0x0001  // invalid User name
  1148. #define SGRC_PARAMERROR         0x0002  // param error: call ignored
  1149. #define SGRC_RC                 0x0004  // supplied RC has errors
  1150. #define SGRC_RECOGNIZER         0x0008  // DefRecog name invalid
  1151. #define SGRC_DICTIONARY         0x0010  // lpDefDict path invalid
  1152. #define SGRC_INIFILE            0x0020  // error saving to penwin.ini
  1153. #define SGRC_NA                 0x8000  // function not available
  1154.  
  1155. #endif /*!NOPENRC1 */
  1156.  
  1157. //---------------------------------------------------------------------------
  1158.  
  1159. #ifndef NOPENTARGET
  1160.  
  1161. #define TPT_CLOSEST             0x0001   // Assign to the closest target
  1162. #define TPT_INTERSECTINK        0x0002   // target with intersecting ink
  1163. #define TPT_TEXTUAL             0x0004   // apply textual heuristics
  1164. #define TPT_DEFAULT             (TPT_TEXTUAL | TPT_INTERSECTINK | TPT_CLOSEST)
  1165.  
  1166. #endif /*!NOPENTARGET */
  1167.  
  1168. //---------------------------------------------------------------------------
  1169. #ifndef NOPENVIRTEVENT
  1170.  
  1171. // Virtual Event Layer:
  1172. #define VWM_MOUSEMOVE           0x0001
  1173. #define VWM_MOUSELEFTDOWN       0x0002
  1174. #define VWM_MOUSELEFTUP         0x0004
  1175. #define VWM_MOUSERIGHTDOWN      0x0008
  1176. #define VWM_MOUSERIGHTUP        0x0010
  1177. #endif /*!NOPENVIRTEVENT */
  1178.  
  1179. #endif /* RC_INVOKED */  // ... all the way back from definitions:2
  1180.  
  1181. /****** Messages and Defines ************************************************/
  1182.  
  1183. // Windows Messages WM_PENWINFIRST (0x0380) and WM_PENWINLAST (0x038F)
  1184. // are defined in WINDOWS.H and WINMIN.H
  1185.  
  1186. //---------------------------------------------------------------------------
  1187. #ifndef NOPENMSGS
  1188.  
  1189. #ifndef NOPENRC1    // not available in WIN32
  1190. #define WM_RCRESULT             (WM_PENWINFIRST+1)  // 0x381
  1191. #define WM_HOOKRCRESULT         (WM_PENWINFIRST+2)  // 0x382
  1192. #endif /*!NOPENRC1*/
  1193.  
  1194. #define WM_PENMISCINFO          (WM_PENWINFIRST+3)  // 0x383
  1195. #define WM_GLOBALRCCHANGE       (WM_PENWINFIRST+3)  // alias
  1196.  
  1197. #ifndef NOPENAPPS   // not available in WIN32
  1198. #define WM_SKB                  (WM_PENWINFIRST+4)  // 0x384
  1199. #endif /*!NOPENAPPS */
  1200.  
  1201. #define WM_PENCTL               (WM_PENWINFIRST+5)  // 0x385
  1202. #define WM_HEDITCTL             (WM_PENWINFIRST+5)  // FBC: alias
  1203.  
  1204. // WM_HEDITCTL (WM_PENCTL) wParam options:
  1205. #ifndef _WIN32
  1206. #define HE_GETRC                3       // FBC: get RC from HEDIT/BEDIT control
  1207. #define HE_SETRC                4       // FBC: ditto set
  1208. #define HE_GETINFLATE           5       // FBC: get inflate rect
  1209. #define HE_SETINFLATE           6       // FBC: ditto set
  1210. #endif //!_WIN32
  1211. #define HE_GETUNDERLINE         7       // get underline mode
  1212. #define HE_SETUNDERLINE         8       // ditto set
  1213. #define HE_GETINKHANDLE         9       // get handle to captured ink
  1214. #define HE_SETINKMODE           10      // begin HEDIT cold recog mode
  1215. #define HE_STOPINKMODE          11      // end cold recog mode
  1216. #ifndef _WIN32
  1217. #define HE_GETRCRESULTCODE      12      // FBC: result of recog after HN_ENDREC
  1218. #endif //!_WIN32
  1219. #define HE_DEFAULTFONT          13      // switch BEDIT to def font
  1220. #define HE_CHARPOSITION         14      // BEDIT byte offset -> char position
  1221. #define HE_CHAROFFSET           15      // BEDIT char position -> byte offset
  1222. #define HE_GETBOXLAYOUT         20      // get BEDIT layout
  1223. #define HE_SETBOXLAYOUT         21      // ditto set
  1224. #ifndef _WIN32
  1225. #define HE_GETRCRESULT          22      // FBC: get RCRESULT after HN_RCRESULT
  1226. #define HE_KKCONVERT            30      // JPN start kana-kanji conversion
  1227. #define HE_GETKKCONVERT         31      // JPN get KK state
  1228. #define HE_CANCELKKCONVERT      32      // JPN cancel KK conversion
  1229. #define HE_FIXKKCONVERT         33      // JPN force KK result
  1230. #define HE_GETKKSTATUS          34      // JPN get KK UI state
  1231. #define HE_KKNOCONVERT          35      // JPN revert conversion
  1232. #define HE_SETIMEDEFAULT        36      // JPN set a range of DCS
  1233. #define HE_GETIMEDEFAULT        37      // JPN get a range of DCS
  1234. #endif //!_WIN32
  1235. #define HE_ENABLEALTLIST        40      // en/disable dropdown recog alt's
  1236. #define HE_SHOWALTLIST          41      // show dropdown (assume enabled)
  1237. #define HE_HIDEALTLIST          42      // hide dropdown alternatives
  1238. #define HE_GETLENSTYPE          43      // get lens type: CWR_ and CWRK_ flags
  1239. #define HE_SETLENSTYPE          44      // set lens type: CWR_ and CWRK_ flags
  1240.  
  1241. //------------------------------
  1242. // JPN Kana-to-Kanji conversion subfunctions:
  1243. #define HEKK_DEFAULT            0       // def
  1244. #define HEKK_CONVERT            1       // convert in place
  1245. #define HEKK_CANDIDATE          2       // start conversion dialog
  1246. #define HEKK_DBCSCHAR           3       // convert to DBCS
  1247. #define HEKK_SBCSCHAR           4       // convert to SBCS
  1248. #define HEKK_HIRAGANA           5       // convert to hiragana
  1249. #define HEKK_KATAKANA           6       // convert to katakana
  1250.  
  1251. //------------------------------
  1252. // JPN Return value of HE_GETKKSTATUS
  1253. #define HEKKR_PRECONVERT        1       // in pre conversion mode
  1254. #define HEKKR_CONVERT           2       // in mid conversion mode
  1255. #define HEKKR_TEMPCONFIRM       3       // in post conversion mode
  1256.  
  1257. // HE_STOPINKMODE (stop cold recog) options:
  1258. #define HEP_NORECOG             0       // don't recog ink
  1259. #define HEP_RECOG               1       // recog ink
  1260. #define HEP_WAITFORTAP          2       // recog after tap in window
  1261.  
  1262. // WM_PENCTL notifications:
  1263. #define HN_ENDREC               4       // recog complete
  1264. #define HN_DELAYEDRECOGFAIL     5       // HE_STOPINKMODE (cold recog) failed
  1265. #define HN_RESULT               20      // HEDIT/BEDIT has received new ink/recognition result
  1266. #ifndef _WIN32
  1267. #define HN_RCRESULT             HN_RESULT
  1268. #endif //!_WIN32
  1269. #define HN_ENDKKCONVERT         30      // JPN KK conversion complete
  1270. #define HN_BEGINDIALOG          40      // Lens/EditText/garbage detection dialog
  1271.                                         //  is about to come up on this hedit/bedit
  1272. #define HN_ENDDIALOG            41      // Lens/EditText/garbage detection dialog
  1273.                                         //  has just been destroyed
  1274.  
  1275. //------------------------------
  1276. #ifndef NOPENIEDIT
  1277.  
  1278. // Messages common with other controls:
  1279. #define IE_GETMODIFY          (EM_GETMODIFY)    // gets the mod'n (dirty) bit
  1280. #define IE_SETMODIFY          (EM_SETMODIFY)    // sets the mod'n (dirty) bit
  1281. #define IE_CANUNDO            (EM_CANUNDO)      // queries whether can undo
  1282. #define IE_UNDO               (EM_UNDO)         // undo
  1283. #define IE_EMPTYUNDOBUFFER    (EM_EMPTYUNDOBUFFER) // clears IEDIT undo buffer
  1284.  
  1285. #define IE_MSGFIRST           (WM_USER+150)     // 0x496 == 1174
  1286.  
  1287. // IEdit common messages:
  1288. #define IE_GETINK             (IE_MSGFIRST+0)   // gets ink from the control
  1289. #define IE_SETINK             (IE_MSGFIRST+1)   // sets ink into the control
  1290. #define IE_GETPENTIP          (IE_MSGFIRST+2)   // gets the cur def ink pentip
  1291. #define IE_SETPENTIP          (IE_MSGFIRST+3)   // sets the cur def ink pentip
  1292. #define IE_GETERASERTIP       (IE_MSGFIRST+4)   // gets the cur eraser pentip
  1293. #define IE_SETERASERTIP       (IE_MSGFIRST+5)   // sets the cur eraser pentip
  1294. #define IE_GETBKGND           (IE_MSGFIRST+6)   // gets the bkgnd options
  1295. #define IE_SETBKGND           (IE_MSGFIRST+7)   // sets the bkgnd options
  1296. #define IE_GETGRIDORIGIN      (IE_MSGFIRST+8)   // gets the bkgnd grid origin
  1297. #define IE_SETGRIDORIGIN      (IE_MSGFIRST+9)   // sets the bkgnd grid origin
  1298. #define IE_GETGRIDPEN         (IE_MSGFIRST+10)  // gets the bkgnd grid pen
  1299. #define IE_SETGRIDPEN         (IE_MSGFIRST+11)  // sets the bkgnd grid pen
  1300. #define IE_GETGRIDSIZE        (IE_MSGFIRST+12)  // gets the bkgnd grid size
  1301. #define IE_SETGRIDSIZE        (IE_MSGFIRST+13)  // sets the bkgnd grid size
  1302. #define IE_GETMODE            (IE_MSGFIRST+14)  // gets the current pen mode
  1303. #define IE_SETMODE            (IE_MSGFIRST+15)  // sets the current pen mode
  1304. #define IE_GETINKRECT         (IE_MSGFIRST+16)  // gets the rectbound of the ink
  1305.  
  1306. // IEdit-specific messages:
  1307. #define IE_GETAPPDATA         (IE_MSGFIRST+34)  // gets the user-defined datum
  1308. #define IE_SETAPPDATA         (IE_MSGFIRST+35)  // sets the user-defined data
  1309. #define IE_GETDRAWOPTS        (IE_MSGFIRST+36)  // gets the ink draw options
  1310. #define IE_SETDRAWOPTS        (IE_MSGFIRST+37)  // sets the ink options
  1311. #define IE_GETFORMAT          (IE_MSGFIRST+38)  // gets format of stroke(s)
  1312. #define IE_SETFORMAT          (IE_MSGFIRST+39)  // sets format of stroke(s)
  1313. #define IE_GETINKINPUT        (IE_MSGFIRST+40)  // gets the ink input option
  1314. #define IE_SETINKINPUT        (IE_MSGFIRST+41)  // sets the ink input option
  1315. #define IE_GETNOTIFY          (IE_MSGFIRST+42)  // gets the notification bits
  1316. #define IE_SETNOTIFY          (IE_MSGFIRST+43)  // sets the notification bits
  1317. #define IE_GETRECOG           (IE_MSGFIRST+44)  // gets recognition options
  1318. #define IE_SETRECOG           (IE_MSGFIRST+45)  // sets recognition options
  1319. #define IE_GETSECURITY        (IE_MSGFIRST+46)  // gets the security options
  1320. #define IE_SETSECURITY        (IE_MSGFIRST+47)  // sets the security options
  1321. #define IE_GETSEL             (IE_MSGFIRST+48)  // gets sel status of a stroke
  1322. #define IE_SETSEL             (IE_MSGFIRST+49)  // sets sel status of a stroke
  1323. #define IE_DOCOMMAND          (IE_MSGFIRST+50)  // send command to IEdit
  1324. #define IE_GETCOMMAND         (IE_MSGFIRST+51)  // gets user command
  1325. #define IE_GETCOUNT           (IE_MSGFIRST+52)  // gets count of strks in I-Edit
  1326. #define IE_GETGESTURE         (IE_MSGFIRST+53)  // gets details on user gesture
  1327. #define IE_GETMENU            (IE_MSGFIRST+54)  // gets handle to pop-up menu
  1328. #define IE_GETPAINTDC         (IE_MSGFIRST+55)  // gets the HDC for painting
  1329. #define IE_GETPDEVENT         (IE_MSGFIRST+56)  // gets details of last pd event
  1330. #define IE_GETSELCOUNT        (IE_MSGFIRST+57)  // gets count of selected strks
  1331. #define IE_GETSELITEMS        (IE_MSGFIRST+58)  // gets indices of all sel strks
  1332. #define IE_GETSTYLE           (IE_MSGFIRST+59)  // gets IEdit control styles
  1333.  
  1334. #endif /*!NOPENIEDIT */
  1335.  
  1336. //------------------------------
  1337. #ifndef NOPENHEDIT
  1338.  
  1339. // (H)Edit Control:
  1340. // CTLINITHEDIT.dwFlags values
  1341. #define CIH_NOGDMSG           0x0001  // disable garbage detection message box for this edit
  1342. #define CIH_NOACTIONHANDLE    0x0002  // disable action handles for this edit
  1343. #define CIH_NOEDITTEXT        0x0004  // disable Lens/Edit/Insert text for this edit
  1344. #define CIH_NOFLASHCURSOR     0x0008  // don't flash cursor on tap-n-hold in this (h)edit
  1345.  
  1346. #endif /* !NOPENHEDIT */
  1347.  
  1348. //------------------------------
  1349. #ifndef NOPENBEDIT
  1350.  
  1351. // Boxed Edit Control:
  1352. // box edit alternative list:
  1353. #define HEAL_DEFAULT            -1L     // AltList def value for lParam
  1354.  
  1355. // box edit Info:
  1356. #define BEI_FACESIZE            32      // max size of font name, = LF_FACESIZE
  1357. #define BEIF_BOXCROSS           0x0001
  1358.  
  1359. // box edit size:
  1360. #define BESC_DEFAULT            0
  1361. #define BESC_ROMANFIXED         1
  1362. #define BESC_KANJIFIXED         2
  1363. #define BESC_USERDEFINED        3
  1364.  
  1365. // CTLINITBEDIT.wFlags values
  1366. #define CIB_NOGDMSG           0x0001  // disable garbage detection message box for this bedit
  1367. #define CIB_NOACTIONHANDLE    0x0002  // disable action handles for this bedit
  1368. #define CIB_NOFLASHCURSOR     0x0004  // don't flash cursor on tap-n-hold in this bedit
  1369. #ifdef JAPAN
  1370. #define CIB_NOWRITING         0x0010  // disallow pen input into control
  1371. #endif // JAPAN
  1372.  
  1373. #define BXD_CELLWIDTH           12
  1374. #define BXD_CELLHEIGHT          16
  1375. #define BXD_BASEHEIGHT          13
  1376. #define BXD_BASEHORZ            0
  1377. #define BXD_MIDFROMBASE         0
  1378. #define BXD_CUSPHEIGHT          2
  1379. #define BXD_ENDCUSPHEIGHT       4
  1380.  
  1381. #define BXDK_CELLWIDTH          32
  1382. #define BXDK_CELLHEIGHT         32
  1383. #define BXDK_BASEHEIGHT         28
  1384. #define BXDK_BASEHORZ           0
  1385. #define BXDK_MIDFROMBASE        0
  1386. #define BXDK_CUSPHEIGHT         28
  1387. #define BXDK_ENDCUSPHEIGHT      10
  1388.  
  1389. #ifdef JAPAN
  1390. // IME colors for bedit
  1391. #define COLOR_BE_INPUT             0
  1392. #define COLOR_BE_INPUT_TEXT        1
  1393. #define COLOR_BE_CONVERT           2
  1394. #define COLOR_BE_CONVERT_TEXT      3
  1395. #define COLOR_BE_CONVERTED         4
  1396. #define COLOR_BE_CONVERTED_TEXT    5
  1397. #define COLOR_BE_UNCONVERT         6
  1398. #define COLOR_BE_UNCONVERT_TEXT    7
  1399. #define COLOR_BE_CURSOR            8
  1400. #define COLOR_BE_CURSOR_TEXT       9
  1401. #define COLOR_BE_PRECONVERT        10
  1402. #define COLOR_BE_PRECONVERT_TEXT   11
  1403. #define MAXIMECOLORS               12
  1404. #endif
  1405.  
  1406. #endif /*!NOPENBEDIT */
  1407.  
  1408. #define WM_PENMISC              (WM_PENWINFIRST+6)  // 0x386
  1409.  
  1410. // WM_PENMISC message constants:
  1411. #define PMSC_BEDITCHANGE        1       // broadcast when BEDIT changes
  1412. #ifndef _WIN32
  1413. //#define PMSC_PENUICHANGE      2       // JPN broadcast when PENUI changes
  1414. //#define PMSC_SUBINPCHANGE     3       // JPN broadcast when SUBINPUT changes
  1415. //#define PMSC_KKCTLENABLE      4       // JPN
  1416. #endif //!_WIN32
  1417. #define PMSC_GETPCMINFO         5       // query the window's PCMINFO
  1418. #define PMSC_SETPCMINFO         6       // set the window's PCMINFO
  1419. #define PMSC_GETINKINGINFO      7       // query the window's INKINGINFO
  1420. #define PMSC_SETINKINGINFO      8       // set the window's INKINGINFO
  1421. #define PMSC_GETHRC             9       // query the window's HRC
  1422. #define PMSC_SETHRC             10      // set the window's HRC
  1423. #define PMSC_GETSYMBOLCOUNT     11      // count of symbols in result recd by window
  1424. #define PMSC_GETSYMBOLS         12      // ditto symbols
  1425. #define PMSC_SETSYMBOLS         13      // ditto set symbols
  1426. #define PMSC_LOADPW             15      // broadcast load state on penwin
  1427. #define PMSC_INKSTOP            16
  1428.  
  1429. // PMSCL_xx lParam values for PMSC_xx:
  1430. #define PMSCL_UNLOADED          0L      // penwin just unloaded
  1431. #define PMSCL_LOADED            1L      // penwin just loaded
  1432. #define PMSCL_UNLOADING         2L      // penwin about to unload
  1433.  
  1434. #define WM_CTLINIT              (WM_PENWINFIRST+7)  // 0x387
  1435.  
  1436. // WM_CTLINIT message constants:
  1437. #define CTLINIT_HEDIT           1
  1438. #define CTLINIT_BEDIT           7
  1439. #define CTLINIT_IEDIT           9
  1440. #define CTLINIT_MAX             10
  1441.  
  1442. #define WM_PENEVENT             (WM_PENWINFIRST+8)  // 0x388
  1443.  
  1444. // WM_PENEVENT message values for wParam:
  1445. #define PE_PENDOWN              1       // pen tip down
  1446. #define PE_PENUP                2       // pen tip went from down to up
  1447. #define PE_PENMOVE              3       // pen moved without a tip transition
  1448. #define PE_TERMINATING          4       // Peninput about to terminate
  1449. #define PE_TERMINATED           5       // Peninput terminated
  1450. #define PE_BUFFERWARNING        6       // Buffer half full.
  1451. #define PE_BEGININPUT           7       // begin default input
  1452. #define PE_SETTARGETS           8       // set target data structure (TARGINFO)
  1453. #define PE_BEGINDATA            9       // init message to all targets
  1454. #define PE_MOREDATA             10      // target gets more data
  1455. #define PE_ENDDATA              11      // termination message to all targets
  1456. #define PE_GETPCMINFO           12      // get input collection info
  1457. #define PE_GETINKINGINFO        13      // get inking info
  1458. #define PE_ENDINPUT             14      // Input termination message to window
  1459.                                         //  starting default input
  1460. #define PE_RESULT               15      // sent after ProcessHRC but before GetResultsHRC
  1461.  
  1462. #endif /*!NOPENMSGS */
  1463.  
  1464. /****** Definitions 3: RC compiler excluded ********************************/
  1465.  
  1466. #ifndef RC_INVOKED  // ... rest of file of no interest to rc compiler
  1467.  
  1468. //////////////////////////////////////////////////////////////////////////////
  1469. /****** Macros **************************************************************/
  1470.  
  1471. // misc macros:
  1472. //---------------------------------------------------------------------------
  1473. #ifndef NOPENDRIVER
  1474.  
  1475. #define FPenUpX(x)              ((BOOL)(((x) & BITPENUP) != 0))
  1476. #define GetWEventRef()          (LOWORD(GetMessageExtraInfo()))
  1477. #endif /*!NOPENDRIVER */
  1478.  
  1479. //---------------------------------------------------------------------------
  1480. #ifndef NOPENALC
  1481.  
  1482. // ALC macros:
  1483.  
  1484. #define MpAlcB(lprc,i)          ((lprc)->rgbfAlc[((i) & 0xff) >> 3])
  1485. #define MpIbf(i)                ((BYTE)(1 << ((i) & 7)))
  1486. #define SetAlcBitAnsi(lprc,i)   do {MpAlcB(lprc,i) |= MpIbf(i);} while (0)
  1487. #define ResetAlcBitAnsi(lprc,i) do {MpAlcB(lprc,i) &= ~MpIbf(i);} while (0)
  1488. #define IsAlcBitAnsi(lprc, i)   ((MpAlcB(lprc,i) & MpIbf(i)) != 0)
  1489. #endif /*!NOPENALC */
  1490.  
  1491. //---------------------------------------------------------------------------
  1492. #ifndef NOPENDATA
  1493.  
  1494. // draw 2.0 pendata using internal stroke formats:
  1495. #define DrawPenDataFmt(hdc, lprect, hpndt)\
  1496.     DrawPenDataEx(hdc, lprect, hpndt, 0, IX_END, 0, IX_END, NULL, NULL, 0)
  1497.  
  1498. #endif /*!NOPENDATA */
  1499.  
  1500. //---------------------------------------------------------------------------
  1501. #ifndef NOPENHRC
  1502.  
  1503. // Handwriting Recognizer:
  1504.  
  1505. // Intervals:
  1506. // difference of two absolute times (at2 > at1 for positive result):
  1507. #define dwDiffAT(at1, at2)\
  1508.     (1000L*((at2).sec - (at1).sec) - (DWORD)(at1).ms + (DWORD)(at2).ms)
  1509.  
  1510. // comparison of two absolute times (TRUE if at1 < at2):
  1511. #define FLTAbsTime(at1, at2)\
  1512.     ((at1).sec < (at2).sec || ((at1).sec == (at2).sec && (at1).ms < (at2).ms))
  1513.  
  1514. #define FLTEAbsTime(at1, at2)\
  1515.     ((at1).sec < (at2).sec || ((at1).sec == (at2).sec && (at1).ms <= (at2).ms))
  1516.  
  1517. #define FEQAbsTime(at1, at2)\
  1518.     ((at1).sec == (at2).sec && (at1).ms == (at2).ms)
  1519.  
  1520. // test if abstime is within an interval:
  1521. #define FAbsTimeInInterval(at, lpi)\
  1522.     (FLTEAbsTime((lpi)->atBegin, at) && FLTEAbsTime(at, (lpi)->atEnd))
  1523.  
  1524. // test if interval (lpiT) is within an another interval (lpiS):
  1525. #define FIntervalInInterval(lpiT, lpiS)\
  1526.     (FLTEAbsTime((lpiS)->atBegin, (lpiT)->atBegin)\
  1527.     && FLTEAbsTime((lpiT)->atEnd, (lpiS)->atEnd))
  1528.  
  1529. // test if interval (lpiT) intersects another interval (lpiS):
  1530. #define FIntervalXInterval(lpiT, lpiS)\
  1531.     (!(FLTAbsTime((lpiT)->atEnd, (lpiS)->atBegin)\
  1532.     || FLTAbsTime((lpiS)->atEnd, (lpiT)->atBegin)))
  1533.  
  1534. // duration of an LPINTERVAL in ms:
  1535. #define dwDurInterval(lpi)  dwDiffAT((lpi)->atBegin, (lpi)->atEnd)
  1536.  
  1537. // fill a pointer to an ABSTIME structure from a count of seconds and ms:
  1538. #define MakeAbsTime(lpat, sec, ms) do {\
  1539.     (lpat)->sec = sec + ((ms) / 1000);\
  1540.     (lpat)->ms = (ms) % 1000;\
  1541.     } while (0)
  1542.  
  1543. // SYV macros:
  1544. #define FIsSpecial(syv)         (HIWORD((syv))==SYVHI_SPECIAL)
  1545. #define FIsAnsi(syv)            (HIWORD((syv))==SYVHI_ANSI)
  1546. #define FIsGesture(syv)         (HIWORD((syv))==SYVHI_GESTURE)
  1547. #define FIsKanji(syv)           (HIWORD((syv))==SYVHI_KANJI)
  1548. #define FIsShape(syv)           (HIWORD((syv))==SYVHI_SHAPE)
  1549. #define FIsUniCode(syv)         (HIWORD((syv))==SYVHI_UNICODE)
  1550. #define FIsVKey(syv)            (HIWORD((syv))==SYVHI_VKEY)
  1551.  
  1552. #define ChSyvToAnsi(syv)        ((BYTE) (LOBYTE(LOWORD((syv)))))
  1553. #define WSyvToKanji(syv)        ((WORD) (LOWORD((syv))))
  1554. #define SyvCharacterToSymbol(c) ((LONG)(unsigned char)(c) | 0x00010000)
  1555. #define SyvKanjiToSymbol(c)     ((LONG)(UINT)(c) | 0x00030000)
  1556.  
  1557. #define FIsSelectGesture(syv)   \
  1558.    ((syv) >= SYVSELECTFIRST && (syv) <= SYVSELECTLAST)
  1559.  
  1560. #define FIsStdGesture(syv)      \
  1561.    (                            \
  1562.    FIsSelectGesture(syv)        \
  1563.    || (syv)==SYV_CLEAR          \
  1564.    || (syv)==SYV_HELP           \
  1565.    || (syv)==SYV_EXTENDSELECT   \
  1566.    || (syv)==SYV_UNDO           \
  1567.    || (syv)==SYV_COPY           \
  1568.    || (syv)==SYV_CUT            \
  1569.    || (syv)==SYV_PASTE          \
  1570.    || (syv)==SYV_CLEARWORD      \
  1571.    || (syv)==SYV_KKCONVERT      \
  1572.    || (syv)==SYV_USER           \
  1573.    || (syv)==SYV_CORRECT        \
  1574.    )
  1575.  
  1576. #define FIsAnsiGesture(syv) \
  1577.    (                            \
  1578.    (syv) == SYV_BACKSPACE       \
  1579.    || (syv) == SYV_TAB          \
  1580.    || (syv) == SYV_RETURN       \
  1581.    || (syv) == SYV_SPACE        \
  1582.    )
  1583.  
  1584. #endif /*!NOPENHRC */
  1585.  
  1586. //---------------------------------------------------------------------------
  1587. #ifndef NOPENINKPUT
  1588.  
  1589. #define SubPenMsgFromWpLp(wp, lp)       (LOWORD(wp))
  1590. #ifdef _WIN32
  1591. #define EventRefFromWpLp(wp, lp)        (HIWORD(wp))
  1592. #define TerminationFromWpLp(wp, lp)     ((int)HIWORD(wp))
  1593. #define HpcmFromWpLp(wp, lp)            ((HPCM)(lp))
  1594. #else
  1595. #define EventRefFromWpLp(wp, lp)        (LOWORD(lp))
  1596. #define TerminationFromWpLp(wp, lp)     ((int)LOWORD(lp))
  1597. #define HpcmFromWpLp(wp, lp)            ((HPCM)HIWORD(lp))
  1598. #endif //_WIN32
  1599.  
  1600. #endif   /*!NOPENINKPUT*/
  1601.  
  1602. //---------------------------------------------------------------------------
  1603. #ifndef NOPENTARGET
  1604. #define HwndFromHtrg(htrg)      ((HWND)(DWORD)(htrg))
  1605. #define HtrgFromHwnd(hwnd)      ((HTRG)(UINT)(hwnd))
  1606. #endif /*!NOPENTARGET*/
  1607.  
  1608. //////////////////////////////////////////////////////////////////////////////
  1609. /****** Typedefs ************************************************************/
  1610.  
  1611. // Simple:
  1612. typedef LONG                    ALC;    // Enabled Alphabet
  1613. typedef int                     CL;     // Confidence Level
  1614. typedef UINT                    HKP;    // Hook Parameter
  1615. typedef int                     REC;    // recognition result
  1616. typedef LONG                    SYV;    // Symbol Value
  1617.  
  1618. #ifndef DECLARE_HANDLE32
  1619. #define DECLARE_HANDLE32(name)\
  1620.     struct name##__ { int unused; };\
  1621.     typedef const struct name##__ FAR* name
  1622. #endif //!DECLARE_HANDLE32
  1623.  
  1624. DECLARE_HANDLE32(HTRG);                 // Handle to target
  1625. DECLARE_HANDLE(HPCM);                   // Handle to Pen Collection Info
  1626. DECLARE_HANDLE(HPENDATA);               // handle to ink
  1627. DECLARE_HANDLE(HREC);                   // handle to recognizer
  1628.  
  1629. // Pointer Types:
  1630. typedef ALC FAR*                LPALC;        // ptr to ALC
  1631. typedef LPVOID                  LPOEM;        // alias
  1632. typedef SYV FAR*                LPSYV;        // ptr to SYV
  1633. typedef HPENDATA FAR*           LPHPENDATA;   // ptr to HPENDATA
  1634.  
  1635. // Function Prototypes:
  1636. typedef int         (CALLBACK *ENUMPROC)(LPSYV, int, VOID FAR*);
  1637. typedef int         (CALLBACK *LPDF)(int, LPVOID, LPVOID, int, DWORD, DWORD);
  1638. typedef BOOL        (CALLBACK *RCYIELDPROC)(VOID);
  1639.  
  1640. // Structures:
  1641.  
  1642. typedef struct tagABSTIME       // 2.0 absolute date/time
  1643.    {
  1644.    DWORD sec;      // number of seconds since 1/1/1970, ret by CRTlib time() fn
  1645.    UINT ms;        // additional offset in ms, 0..999
  1646.    }
  1647.    ABSTIME, FAR *LPABSTIME;
  1648.  
  1649. //---------------------------------------------------------------------------
  1650. #ifndef NOPENHEDIT
  1651.  
  1652. typedef struct tagCTLINITHEDIT  // 2.0 init struct for (h)edit
  1653.    {
  1654.    DWORD cbSize;                // sizeof(CTLINITHEDIT)
  1655.    HWND hwnd;                   // (h)edit window handle
  1656.    int id;                      // its id
  1657.    DWORD dwFlags;               // CIE_xx
  1658.    DWORD dwReserved;            // for future use
  1659.    }
  1660.    CTLINITHEDIT, FAR *LPCTLINITHEDIT;
  1661. #endif /* !NOPENHEDIT */
  1662.  
  1663. //---------------------------------------------------------------------------
  1664. #ifndef NOPENBEDIT
  1665.  
  1666. typedef struct tagBOXLAYOUT     // 1.0 box edit layout
  1667.    {
  1668.    int cyCusp;                  // pixel height of box (BXS_RECT) or cusp
  1669.    int cyEndCusp;               // pixel height of cusps at extreme ends
  1670.    UINT style;                  // BXS_xx style
  1671.    DWORD dwReserved1;           // reserved
  1672.    DWORD dwReserved2;           // reserved
  1673.    DWORD dwReserved3;           // reserved
  1674.    }
  1675.    BOXLAYOUT, FAR *LPBOXLAYOUT;
  1676.  
  1677. typedef struct tagIMECOLORS     // 2.0 IME undetermined string color info.
  1678.    {
  1679.    int cColors;                 // count of colors to be set/get
  1680.    LPINT lpnElem;               // address of array of elements
  1681.    COLORREF FAR *lprgbIme;      // address of array of RGB values
  1682.    }
  1683.    IMECOLORS, FAR *LPIMECOLORS;
  1684.  
  1685. typedef struct tagCTLINITBEDIT  // 2.0 init struct for box edit
  1686.    {
  1687.    DWORD cbSize;                // sizeof(CTLINITBEDIT)
  1688.    HWND hwnd;                   // box edit window handle
  1689.    int id;                      // its id
  1690.    WORD wSizeCategory;          // BESC_xx
  1691.    WORD wFlags;                 // CIB_xx
  1692.    DWORD dwReserved;            // for future use
  1693.    }
  1694.    CTLINITBEDIT, FAR *LPCTLINITBEDIT;
  1695.  
  1696. typedef struct tagBOXEDITINFO   // 1.1 box edit Size Info
  1697.    {
  1698.    int cxBox;                   // width of a single box
  1699.    int cyBox;                   // ditto height
  1700.    int cxBase;                  // in-box x-margin to guideline
  1701.    int cyBase;                  // in-box y offset from top to baseline
  1702.    int cyMid;                   // 0 or distance from baseline to midline
  1703.    BOXLAYOUT boxlayout;         // embedded BOXLAYOUT structure
  1704.    UINT wFlags;                 // BEIF_xx
  1705.    BYTE szFaceName[BEI_FACESIZE];   // font face name
  1706.    UINT wFontHeight;            // font height
  1707.    UINT rgwReserved[8];         // for future use
  1708.    }
  1709.    BOXEDITINFO, FAR *LPBOXEDITINFO;
  1710. #endif /*!NOPENBEDIT */
  1711.  
  1712. //---------------------------------------------------------------------------
  1713. #ifndef NOPENCTL
  1714.  
  1715. typedef struct tagRECTOFS       // 1.0 rectangle offset for nonisometric inflation
  1716.    {
  1717.    int dLeft;                   // inflation leftwards from left side
  1718.    int dTop;                    // ditto upwards from top
  1719.    int dRight;                  // ditto rightwards from right
  1720.    int dBottom;                 // ditto downwards from bottom
  1721.    }
  1722.    RECTOFS, FAR *LPRECTOFS;
  1723. #endif /*!NOPENCTL */
  1724.  
  1725. //---------------------------------------------------------------------------
  1726. #ifndef NOPENDATA
  1727.  
  1728. typedef struct tagPENDATAHEADER // 1.0 main pen data header
  1729.    {
  1730.    UINT wVersion;               // pen data format version
  1731.    UINT cbSizeUsed;             // size of pendata mem block in bytes
  1732.    UINT cStrokes;               // number of strokes (incl up-strokes)
  1733.    UINT cPnt;                   // count of all points
  1734.    UINT cPntStrokeMax;          // length (in points) of longest stroke
  1735.    RECT rectBound;              // bounding rect of all down points
  1736.    UINT wPndts;                 // PDTS_xx bits
  1737.    int  nInkWidth;              // ink width in pixels
  1738.    DWORD rgbInk;                // ink color
  1739.    }
  1740.    PENDATAHEADER, FAR *LPPENDATAHEADER, FAR *LPPENDATA;
  1741.  
  1742. typedef struct tagSTROKEINFO    // 1.0 stroke header
  1743.    {
  1744.    UINT cPnt;                   // count of points in stroke
  1745.    UINT cbPnts;                 // size of stroke in bytes
  1746.    UINT wPdk;                   // state of stroke
  1747.    DWORD dwTick;                // time at beginning of stroke
  1748.    }
  1749.    STROKEINFO, FAR *LPSTROKEINFO;
  1750.  
  1751. typedef struct tagPENTIP        // 2.0 Pen Tip characteristics
  1752.     {
  1753.     DWORD cbSize;               // sizeof(PENTIP)
  1754.     BYTE btype;                 // pen type/nib (calligraphic nib, etc.)
  1755.     BYTE bwidth;                // width of Nib (typically == nInkWidth)
  1756.     BYTE bheight;               // height of Nib
  1757.     BYTE bOpacity;              // 0=transparent, 0x80=hilite, 0xFF=opaque
  1758.     COLORREF rgb;               // pen color
  1759.     DWORD dwFlags;              // TIP_xx flags
  1760.     DWORD dwReserved;           // for future expansion
  1761.     }
  1762.     PENTIP, FAR *LPPENTIP;
  1763.  
  1764. typedef BOOL (CALLBACK *ANIMATEPROC)(HPENDATA, UINT, UINT, UINT FAR*, LPARAM);
  1765.  
  1766. typedef struct tagANIMATEINFO   // 2.0 Animation parameters
  1767.     {
  1768.     DWORD cbSize;               // sizeof(ANIMATEINFO)
  1769.     UINT uSpeedPct;             // speed percent to animate at
  1770.     UINT uPeriodCB;             // time between calls to callback in ms
  1771.     UINT fuFlags;               // animation flags
  1772.     LPARAM lParam;              // value to pass to callback
  1773.     DWORD dwReserved;           // reserved
  1774.     }
  1775.     ANIMATEINFO, FAR *LPANIMATEINFO;
  1776. #endif /*!NOPENDATA */
  1777.  
  1778. //---------------------------------------------------------------------------
  1779. #ifndef NOPENDRIVER
  1780.  
  1781. typedef struct tagOEMPENINFO    // 1.0 OEM pen/tablet hdwe info
  1782.    {
  1783.    UINT wPdt;                   // pen data type
  1784.    UINT wValueMax;              // largest val ret by device
  1785.    UINT wDistinct;              // number of distinct readings possible
  1786.    }
  1787.    OEMPENINFO, FAR *LPOEMPENINFO;
  1788.  
  1789. typedef struct tagPENPACKET     // 1.0 pen packet
  1790.    {
  1791.    UINT wTabletX;               // x in raw coords
  1792.    UINT wTabletY;               // ditto y
  1793.    UINT wPDK;                   // state bits
  1794.    UINT rgwOemData[MAXOEMDATAWORDS]; // OEM-specific data
  1795.    }
  1796.    PENPACKET, FAR *LPPENPACKET;
  1797.  
  1798. typedef struct tagOEM_PENPACKET // 2.0
  1799.    {
  1800.    UINT wTabletX;               // x in raw coords
  1801.    UINT wTabletY;               // ditto y
  1802.    UINT wPDK;                   // state bits
  1803.    UINT rgwOemData[MAXOEMDATAWORDS];  // OEM-specific data
  1804.    DWORD dwTime;
  1805.    }
  1806.     OEM_PENPACKET, FAR *LPOEM_PENPACKET;
  1807.  
  1808. typedef struct tagPENINFO       // 1.0 pen/tablet hdwe info
  1809.    {
  1810.    UINT cxRawWidth;             // max x coord and tablet width in 0.001"
  1811.    UINT cyRawHeight;            // ditto y, height
  1812.    UINT wDistinctWidth;         // number of distinct x values tablet ret
  1813.    UINT wDistinctHeight;        // ditto y
  1814.    int nSamplingRate;           // samples / second
  1815.    int nSamplingDist;           // min distance to move before generating event
  1816.    LONG lPdc;                   // Pen Device Capabilities
  1817.    int cPens;                   // number of pens supported
  1818.    int cbOemData;               // width of OEM data packet
  1819.    OEMPENINFO rgoempeninfo[MAXOEMDATAWORDS]; // supported OEM data types
  1820.    UINT rgwReserved[7];         // for internal use
  1821.    UINT fuOEM;                  // which OEM data, timing, PDK_xx to report
  1822.    }
  1823.    PENINFO, FAR *LPPENINFO;
  1824.  
  1825. typedef struct tagCALBSTRUCT    // 1.0 pen calibration
  1826.    {
  1827.    int wOffsetX;
  1828.    int wOffsetY;
  1829.    int wDistinctWidth;
  1830.    int wDistinctHeight;
  1831.    }
  1832.    CALBSTRUCT, FAR *LPCALBSTRUCT;
  1833.  
  1834. typedef BOOL (CALLBACK *LPFNRAWHOOK)(LPPENPACKET);
  1835. #endif /*!NOPENDRIVER */
  1836.  
  1837. //---------------------------------------------------------------------------
  1838. #ifndef NOPENHRC
  1839.  
  1840. // Handwriting Recognizer:
  1841.  
  1842. DECLARE_HANDLE32(HRC);          // Handwriting Recognition Context
  1843. DECLARE_HANDLE32(HRCRESULT);    // HRC result
  1844. DECLARE_HANDLE32(HWL);          // Handwriting wordlist
  1845. DECLARE_HANDLE32(HRECHOOK);     // Recognition Result hook handle
  1846.  
  1847. typedef HRC                     FAR *LPHRC;
  1848. typedef HRCRESULT               FAR *LPHRCRESULT;
  1849. typedef HWL                     FAR *LPHWL;
  1850.  
  1851. typedef BOOL (CALLBACK *HRCRESULTHOOKPROC)
  1852.     (HREC, HRC, UINT, UINT, UINT, LPVOID);
  1853.  
  1854. // Inksets:
  1855. DECLARE_HANDLE(HINKSET);        // handle to an inkset
  1856. typedef HINKSET                 FAR* LPHINKSET; // ptr to HINKSET
  1857.  
  1858. typedef struct tagINTERVAL      // 2.0 interval structure for inksets
  1859.     {
  1860.     ABSTIME atBegin;            // begining of 1-ms granularity interval
  1861.     ABSTIME atEnd;              // 1 ms past end of interval
  1862.     }
  1863.     INTERVAL, FAR *LPINTERVAL;
  1864.  
  1865. typedef struct tagBOXRESULTS    // 2.0
  1866.     {
  1867.     UINT indxBox;
  1868.     HINKSET hinksetBox;
  1869.     SYV rgSyv[1];
  1870.     }
  1871.     BOXRESULTS, FAR *LPBOXRESULTS;
  1872.  
  1873. typedef struct tagGUIDE         // 1.0 guide structure
  1874.    {
  1875.    int xOrigin;                 // left edge of first box (screen coord))
  1876.    int yOrigin;                 // ditto top edge
  1877.    int cxBox;                   // width of a single box
  1878.    int cyBox;                   // ditto height
  1879.    int cxBase;                  // in-box x-margin to guideline
  1880.    int cyBase;                  // in-box y offset from top to baseline
  1881.    int cHorzBox;                // count of boxed columns
  1882.    int cVertBox;                // ditto rows
  1883.    int cyMid;                   // 0 or distance from baseline to midline
  1884.    }
  1885.    GUIDE, FAR *LPGUIDE;
  1886.  
  1887. #endif /*!NOPENHRC */
  1888.  
  1889. //---------------------------------------------------------------------------
  1890. #ifndef NOPENIEDIT
  1891.  
  1892. typedef struct tagCTLINITIEDIT  // 2.0 init struct for Ink Edit
  1893.     {
  1894.     DWORD cbSize;               // sizeof(CTLINITIEDIT)
  1895.     HWND hwnd;                  // IEdit window handle
  1896.     int id;                     // its ID
  1897.     WORD ieb;                   // IEB_* (background) bits
  1898.     WORD iedo;                  // IEDO_* (draw options) bits
  1899.     WORD iei;                   // IEI_* (ink input) bits
  1900.     WORD ien;                   // IEN_* (notification) bits
  1901.     WORD ierec;                 // IEREC_* (recognition) bits
  1902.     WORD ies;                   // IES_* (style) bits
  1903.     WORD iesec;                 // IESEC_* (security) bits
  1904.     WORD pdts;                  // initial pendata scale factor (PDTS_*)
  1905.     HPENDATA hpndt;             // initial pendata (or NULL if none)
  1906.     HGDIOBJ hgdiobj;            // background brush or bitmap handle
  1907.     HPEN hpenGrid;              // pen to use in drawing grid
  1908.     POINT ptOrgGrid;            // grid lines point of origin
  1909.     WORD wVGrid;                // vertical gridline spacing
  1910.     WORD wHGrid;                // horizontal gridline spacing
  1911.     DWORD dwApp;                // application-defined data
  1912.     DWORD dwReserved;           // reserved for future use
  1913.     }
  1914.     CTLINITIEDIT, FAR *LPCTLINITIEDIT;
  1915.  
  1916. typedef struct tagPDEVENT       // 2.0
  1917.     {
  1918.     DWORD cbSize;               // sizeof(PDEVENT)
  1919.     HWND hwnd;                  // window handle of I-Edit
  1920.     UINT wm;                    // WM_* (window message) of event
  1921.     WPARAM wParam;              // wParam of message
  1922.     LPARAM lParam;              // lParam of message
  1923.     POINT pt;                   // event pt in I-Edit client co-ords
  1924.     BOOL fPen;                  // TRUE if pen (or other inking device)
  1925.     LONG lExInfo;               // GetMessageExtraInfo() return value
  1926.     DWORD dwReserved;           // for future use
  1927.     }
  1928.     PDEVENT, FAR *LPPDEVENT;
  1929.  
  1930. typedef struct tagSTRKFMT       // 2.0
  1931.     {
  1932.     DWORD cbSize;               // sizeof(STRKFMT)
  1933.     UINT iesf;                  // stroke format flags and return bits
  1934.     UINT iStrk;                 // stroke index if IESF_STROKE
  1935.     PENTIP tip;                 // ink tip attributes
  1936.     DWORD dwUser;               // user data for strokes
  1937.     DWORD dwReserved;           // for future use
  1938.     }
  1939.     STRKFMT, FAR *LPSTRKFMT;
  1940. #endif /*!NOPENIEDIT */
  1941.  
  1942. //---------------------------------------------------------------------------
  1943. #ifndef NOPENINKPUT
  1944.  
  1945. typedef struct tagPCMINFO       // 2.0 Pen Collection Mode Information
  1946.    {
  1947.    DWORD cbSize;                // sizeof(PCMINFO)
  1948.    DWORD dwPcm;                 // PCM_xxx flags
  1949.    RECT rectBound;              // if finish on pendown outside this rect
  1950.    RECT rectExclude;            // if finish on pendown inside this rect
  1951.    HRGN hrgnBound;              // if finish on pendown outside this region
  1952.    HRGN hrgnExclude;            // if finish on pendown inside this region
  1953.    DWORD dwTimeout;             // if finish after timeout, this many ms
  1954.    }
  1955.     PCMINFO, FAR *LPPCMINFO;
  1956.  
  1957. typedef struct tagINKINGINFO    // 2.0 Pen Inking Information
  1958.    {
  1959.    DWORD cbSize;                // sizeof(INKINGINFO)
  1960.    UINT wFlags;                 // One of the PII_xx flags
  1961.    PENTIP tip;                  // Pen type, size and color
  1962.    RECT rectClip;               // Clipping rect for the ink
  1963.    RECT rectInkStop;            // Rect in which a pen down stops inking
  1964.    HRGN hrgnClip;               // Clipping region for the ink
  1965.    HRGN hrgnInkStop;            // Region in which a pen down stops inking
  1966.    }
  1967.     INKINGINFO, FAR *LPINKINGINFO;
  1968. #endif /*!NOPENINKPUT */
  1969.  
  1970. //---------------------------------------------------------------------------
  1971. #ifndef NOPENRC1    // not available in WIN32
  1972.  
  1973. typedef struct tagSYC           // 1.0 Symbol Correspondence for Ink
  1974.    {
  1975.    UINT wStrokeFirst;           // first stroke, inclusive
  1976.    UINT wPntFirst;              // first point in first stroke, inclusive
  1977.    UINT wStrokeLast;            // last stroke, inclusive
  1978.    UINT wPntLast;               // last point in last stroke, inclusive
  1979.    BOOL fLastSyc;               // T: no more SYCs follow for current SYE
  1980.    }
  1981.    SYC, FAR *LPSYC;
  1982.  
  1983. typedef struct tagSYE           // 1.0 Symbol Element
  1984.    {
  1985.    SYV syv;                     // symbol value
  1986.    LONG lRecogVal;              // for internal use by recognizer
  1987.    CL cl;                       // confidence level
  1988.    int iSyc;                    // SYC index
  1989.    }
  1990.    SYE, FAR *LPSYE;
  1991.  
  1992. typedef struct tagSYG           // 1.0 Symbol Graph
  1993.    {
  1994.    POINT rgpntHotSpots[MAXHOTSPOT]; // hot spots (max 8)
  1995.    int cHotSpot;                // number of valid hot spots in rgpntHotSpots
  1996.    int nFirstBox;               // row-major index to box of 1st char in result
  1997.    LONG lRecogVal;              // reserved for use by recoognizer
  1998.    LPSYE lpsye;                 // nodes of symbol graph
  1999.    int cSye;                    // number of SYEs in symbol graph
  2000.    LPSYC lpsyc;                 // ptr to corresp symbol ink
  2001.    int cSyc;                    // ditto count
  2002.    }
  2003.    SYG, FAR *LPSYG;
  2004.  
  2005. typedef struct tagRC            // 1.0 Recognition Context (RC)
  2006.    {
  2007.    HREC hrec;                   // handle of recognizer to use
  2008.    HWND hwnd;                   // window to send results to
  2009.    UINT wEventRef;              // index into ink buffer
  2010.    UINT wRcPreferences;         // flags: RCP_xx Preferences
  2011.    LONG lRcOptions;             // RCO_xx options
  2012.    RCYIELDPROC lpfnYield;       // procedure called during Yield()
  2013.    BYTE lpUser[cbRcUserMax];    // current writer
  2014.    UINT wCountry;               // country code
  2015.    UINT wIntlPreferences;       // flags: RCIP_xx
  2016.    char lpLanguage[cbRcLanguageMax]; // language strings
  2017.    LPDF rglpdf[MAXDICTIONARIES];   // list of dictionary functions
  2018.    UINT wTryDictionary;         // max enumerations to search
  2019.    CL clErrorLevel;             // level where recognizer should reject input
  2020.    ALC alc;                     // enabled alphabet
  2021.    ALC alcPriority;             // prioritizes the ALC_ codes
  2022.    BYTE rgbfAlc[cbRcrgbfAlcMax];   // bit field for enabled characters
  2023.    UINT wResultMode;            // RRM_xx when to send (asap or when complete)
  2024.    UINT wTimeOut;               // recognition timeout in ms
  2025.    LONG lPcm;                   // flags: PCM_xx for ending recognition
  2026.    RECT rectBound;              // bounding rect for inking (def:screen coords)
  2027.    RECT rectExclude;            // pen down inside this terminates recognition
  2028.    GUIDE guide;                 // struct: defines guidelines for recognizer
  2029.    UINT wRcOrient;              // RCOR_xx orientation of writing wrt tablet
  2030.    UINT wRcDirect;              // RCD_xx direction of writing
  2031.    int nInkWidth;               // ink width 0 (none) or 1..15 pixels
  2032.    COLORREF rgbInk;             // ink color
  2033.    DWORD dwAppParam;            // for application use
  2034.    DWORD dwDictParam;           // for app use to be passed on to dictionaries
  2035.    DWORD dwRecognizer;          // for app use to be passed on to recognizer
  2036.    UINT rgwReserved[cwRcReservedMax]; // reserved for future use by Windows
  2037.    }
  2038.    RC, FAR *LPRC;
  2039.  
  2040. typedef struct tagRCRESULT      // 1.0 Recognition Result
  2041.    {
  2042.    SYG syg;                     // symbol graph
  2043.    UINT wResultsType;           // see RCRT_xx
  2044.    int cSyv;                    // count of symbol values
  2045.    LPSYV lpsyv;                 // NULL-term ptr to recog's best guess
  2046.    HANDLE hSyv;                 // globally-shared handle to lpsyv mem
  2047.    int nBaseLine;               // 0 or baseline of input writing
  2048.    int nMidLine;                // ditto midline
  2049.    HPENDATA hpendata;           // pen data mem
  2050.    RECT rectBoundInk;           // ink data bounds
  2051.    POINT pntEnd;                // pt that terminated recog
  2052.    LPRC lprc;                   // recog context used
  2053.    }
  2054.    RCRESULT, FAR *LPRCRESULT;
  2055.  
  2056. typedef int         (CALLBACK *LPFUNCRESULTS)(LPRCRESULT, REC);
  2057.  
  2058. #endif /*!NOPENRC1 */
  2059.  
  2060. //---------------------------------------------------------------------------
  2061. #ifndef NOPENTARGET
  2062.  
  2063. #ifndef _WIN32
  2064. #if (WINVER < 0x0400)
  2065. #ifndef _OLE2_H_
  2066. typedef struct tagRECTL
  2067. {                      
  2068.    LONG     left;      
  2069.    LONG     top;       
  2070.    LONG     right;     
  2071.    LONG     bottom;    
  2072. } RECTL;               
  2073. typedef RECTL*       PRECTL; 
  2074. typedef RECTL NEAR*  NPRECTL; 
  2075. typedef RECTL FAR*   LPRECTL;  
  2076. typedef const RECTL FAR* LPCRECTL;
  2077. #endif // !_OLE2_H_
  2078. #endif // WINVER
  2079. #endif // !WIN32
  2080.  
  2081. typedef struct tagTARGET        // 2.0 Geometry for a single target.
  2082.    {
  2083.    DWORD dwFlags;               // individual target flags
  2084.    DWORD idTarget;              // TARGINFO.rgTarget[] index
  2085.    HTRG  htrgTarget;            // HANDLE32 equiv
  2086.    RECTL rectBound;             // Bounding rect of the target
  2087.    DWORD dwData;                // data collection info per target
  2088.    RECTL rectBoundInk;          // Reserved for internal use, must be zero
  2089.    RECTL rectBoundLastInk;      // Reserved for internal use, must be zero
  2090.    }
  2091.    TARGET, FAR *LPTARGET;
  2092.  
  2093. typedef struct tagTARGINFO      // 2.0 A set of targets
  2094.    {
  2095.    DWORD cbSize;                // sizeof(TARGINFO)
  2096.    DWORD dwFlags;               // flags
  2097.    HTRG htrgOwner;              // HANDLE32 equiv
  2098.    WORD cTargets;               // count of targets
  2099.    WORD iTargetLast;            // last target, used by TargetPoints API
  2100.                                 // if TPT_TEXTUAL flag is set
  2101.    TARGET rgTarget[1];          // variable-length array of targets
  2102.    }
  2103.    TARGINFO, FAR *LPTARGINFO;
  2104.  
  2105. typedef struct tagINPPARAMS     // 2.0
  2106.    {
  2107.    DWORD cbSize;                // sizeof(INPPARAMS)
  2108.    DWORD dwFlags;
  2109.    HPENDATA hpndt;
  2110.    TARGET target;               // target structure
  2111.    }
  2112.     INPPARAMS, FAR *LPINPPARAMS;
  2113. #endif /*!NOPENTARGET */
  2114.  
  2115. //////////////////////////////////////////////////////////////////////////////
  2116. /****** APIs and Prototypes *************************************************/
  2117.  
  2118. LRESULT CALLBACK    DefPenWindowProc(HWND, UINT, WPARAM, LPARAM);
  2119.  
  2120. //---------------------------------------------------------------------------
  2121. #ifndef NOPENAPPS   // not available in WIN32
  2122.  
  2123. // Pen System Applications:
  2124. BOOL      WINAPI ShowKeyboard(HWND, UINT, LPPOINT, LPSKBINFO);
  2125.  
  2126. #endif /*!NOPENAPPS */
  2127.  
  2128. //---------------------------------------------------------------------------
  2129. #ifndef NOPENDATA   // these APIs are implemented in PKPD.DLL
  2130.  
  2131. // PenData:
  2132. #ifndef NOPENAPIFUN
  2133. LPPENDATA WINAPI BeginEnumStrokes(HPENDATA);
  2134. LPPENDATA WINAPI EndEnumStrokes(HPENDATA);
  2135. HPENDATA  WINAPI CompactPenData(HPENDATA, UINT);
  2136. HPENDATA  WINAPI CreatePenData(LPPENINFO, int, UINT, UINT);
  2137. VOID      WINAPI DrawPenData(HDC, LPRECT, HPENDATA);
  2138. BOOL      WINAPI GetPenDataStroke(LPPENDATA, UINT, LPPOINT FAR*,
  2139.                                   LPVOID FAR*, LPSTROKEINFO);
  2140. #endif //!NOPENAPIFUN
  2141. HPENDATA  WINAPI AddPointsPenData(HPENDATA, LPPOINT, LPVOID, LPSTROKEINFO);
  2142. int       WINAPI CompressPenData(HPENDATA, UINT, DWORD);
  2143. HPENDATA  WINAPI CreatePenDataEx(LPPENINFO, UINT, UINT, UINT);
  2144. HRGN      WINAPI CreatePenDataRegion(HPENDATA, UINT);
  2145. BOOL      WINAPI DestroyPenData(HPENDATA);
  2146. int       WINAPI DrawPenDataEx(HDC, LPRECT, HPENDATA, UINT, UINT, UINT, UINT,
  2147.                                ANIMATEPROC, LPANIMATEINFO, UINT);
  2148. HPENDATA  WINAPI DuplicatePenData(HPENDATA, UINT);
  2149. int       WINAPI ExtractPenDataPoints(HPENDATA, UINT, UINT, UINT, LPPOINT,
  2150.                                       LPVOID, UINT);
  2151. int       WINAPI ExtractPenDataStrokes(HPENDATA, UINT, LPARAM,
  2152.                                        LPHPENDATA, UINT);
  2153. int       WINAPI GetPenDataAttributes(HPENDATA, LPVOID, UINT);
  2154. BOOL      WINAPI GetPenDataInfo(HPENDATA, LPPENDATAHEADER, LPPENINFO, DWORD);
  2155. BOOL      WINAPI GetPointsFromPenData(HPENDATA, UINT, UINT, UINT, LPPOINT);
  2156. int       WINAPI GetStrokeAttributes(HPENDATA, UINT, LPVOID, UINT);
  2157. int       WINAPI GetStrokeTableAttributes(HPENDATA, UINT, LPVOID, UINT);
  2158. int       WINAPI HitTestPenData(HPENDATA, LPPOINT, UINT, UINT FAR*, UINT FAR*);
  2159. int       WINAPI InsertPenData(HPENDATA, HPENDATA, UINT);
  2160. int       WINAPI InsertPenDataPoints(HPENDATA, UINT, UINT, UINT,
  2161.                                      LPPOINT, LPVOID);
  2162. int       WINAPI InsertPenDataStroke(HPENDATA, UINT, LPPOINT, LPVOID,
  2163.                                      LPSTROKEINFO);
  2164. BOOL      WINAPI MetricScalePenData(HPENDATA, UINT);
  2165. BOOL      WINAPI OffsetPenData(HPENDATA, int, int);
  2166. LONG      WINAPI PenDataFromBuffer(LPHPENDATA, UINT, LPBYTE, LONG, LPDWORD);
  2167. LONG      WINAPI PenDataToBuffer(HPENDATA, LPBYTE, LONG, LPDWORD);
  2168. BOOL      WINAPI RedisplayPenData(HDC, HPENDATA, LPPOINT, LPPOINT,
  2169.                                   int, DWORD);
  2170. int       WINAPI RemovePenDataStrokes(HPENDATA, UINT, UINT);
  2171. BOOL      WINAPI ResizePenData(HPENDATA, LPRECT);
  2172. int       WINAPI SetStrokeAttributes(HPENDATA, UINT, LPARAM, UINT);
  2173. int       WINAPI SetStrokeTableAttributes(HPENDATA, UINT, LPARAM, UINT);
  2174. int       WINAPI TrimPenData(HPENDATA, DWORD, DWORD);
  2175.  
  2176. #endif /*!NOPENDATA */
  2177.  
  2178. //---------------------------------------------------------------------------
  2179. #ifndef NOPENDICT   // not available in WIN32
  2180.  
  2181. // Dictionary:
  2182. BOOL      WINAPI DictionarySearch(LPRC, LPSYE, int, LPSYV, int);
  2183. #endif /*!NOPENDICT */
  2184.  
  2185. //---------------------------------------------------------------------------
  2186. #ifndef NOPENDRIVER
  2187.  
  2188. // Pen Hardware/Driver:
  2189. #ifndef NOPENAPIFUN
  2190. BOOL      WINAPI EndPenCollection(REC);
  2191. REC       WINAPI GetPenHwData(LPPOINT, LPVOID, int, UINT, LPSTROKEINFO);
  2192. REC       WINAPI GetPenHwEventData(UINT, UINT, LPPOINT, LPVOID,
  2193.                                    int, LPSTROKEINFO);
  2194. BOOL      WINAPI SetPenHook(HKP, LPFNRAWHOOK);
  2195. VOID      WINAPI UpdatePenInfo(LPPENINFO);
  2196. #endif //!NOPENAPIFUN
  2197. BOOL      WINAPI GetPenAsyncState(UINT);
  2198. BOOL      WINAPI IsPenEvent(UINT, LONG);
  2199. #endif /*!NOPENDRIVER */
  2200.  
  2201. //---------------------------------------------------------------------------
  2202. #ifndef NOPENHRC
  2203.  
  2204. // Handwriting Recognizer:
  2205. int       WINAPI AddPenDataHRC(HRC, HPENDATA);
  2206. int       WINAPI AddPenInputHRC(HRC, LPPOINT, LPVOID, UINT, LPSTROKEINFO);
  2207. int       WINAPI AddWordsHWL(HWL, LPSTR, UINT);
  2208. int       WINAPI ConfigHREC(HREC, UINT, WPARAM, LPARAM);
  2209. HRC       WINAPI CreateCompatibleHRC(HRC, HREC);
  2210. HWL       WINAPI CreateHWL(HREC, LPSTR, UINT, DWORD);
  2211. HINKSET   WINAPI CreateInksetHRCRESULT(HRCRESULT, UINT, UINT);
  2212. HPENDATA  WINAPI CreatePenDataHRC(HRC);
  2213. int       WINAPI DestroyHRC(HRC);
  2214. int       WINAPI DestroyHRCRESULT(HRCRESULT);
  2215. int       WINAPI DestroyHWL(HWL);
  2216. int       WINAPI EnableGestureSetHRC(HRC, SYV, BOOL);
  2217. int       WINAPI EnableSystemDictionaryHRC(HRC, BOOL);
  2218. int       WINAPI EndPenInputHRC(HRC);
  2219. int       WINAPI GetAlphabetHRC(HRC, LPALC, LPBYTE);
  2220. int       WINAPI GetAlphabetPriorityHRC(HRC, LPALC, LPBYTE);
  2221. int       WINAPI GetAlternateWordsHRCRESULT(HRCRESULT, UINT, UINT,
  2222.                                             LPHRCRESULT, UINT);
  2223. int       WINAPI GetBoxMappingHRCRESULT(HRCRESULT, UINT, UINT, UINT FAR*);
  2224. int       WINAPI GetBoxResultsHRC(HRC, UINT, UINT, UINT, LPBOXRESULTS, BOOL);
  2225. int       WINAPI GetGuideHRC(HRC, LPGUIDE, UINT FAR*);
  2226. int       WINAPI GetHotspotsHRCRESULT(HRCRESULT, UINT, LPPOINT, UINT);
  2227. HREC      WINAPI GetHRECFromHRC(HRC);
  2228. int       WINAPI GetInternationalHRC(HRC, UINT FAR*, LPSTR, UINT FAR*,
  2229.                                      UINT FAR*);
  2230. int       WINAPI GetMaxResultsHRC(HRC);
  2231. int       WINAPI GetResultsHRC(HRC, UINT, LPHRCRESULT, UINT);
  2232. int       WINAPI GetSymbolCountHRCRESULT(HRCRESULT);
  2233. int       WINAPI GetSymbolsHRCRESULT(HRCRESULT, UINT, LPSYV, UINT);
  2234. int       WINAPI GetWordlistHRC(HRC, LPHWL);
  2235. int       WINAPI GetWordlistCoercionHRC(HRC);
  2236. int       WINAPI ProcessHRC(HRC, DWORD);
  2237. int       WINAPI ReadHWL(HWL, HFILE);
  2238. int       WINAPI SetAlphabetHRC(HRC, ALC, LPBYTE);
  2239. int       WINAPI SetAlphabetPriorityHRC(HRC, ALC, LPBYTE);
  2240. int       WINAPI SetBoxAlphabetHRC(HRC, LPALC, UINT);
  2241. int       WINAPI SetGuideHRC(HRC, LPGUIDE, UINT);
  2242. int       WINAPI SetInternationalHRC(HRC, UINT, LPCSTR, UINT, UINT);
  2243. int       WINAPI SetMaxResultsHRC(HRC, UINT);
  2244. HRECHOOK  WINAPI SetResultsHookHREC(HREC, HRCRESULTHOOKPROC);
  2245. int       WINAPI SetWordlistCoercionHRC(HRC, UINT);
  2246. int       WINAPI SetWordlistHRC(HRC, HWL);
  2247. int       WINAPI TrainHREC(HREC, LPSYV, UINT, HPENDATA, UINT);
  2248. int       WINAPI UnhookResultsHookHREC(HREC, HRECHOOK);
  2249. int       WINAPI WriteHWL(HWL, HFILE);
  2250.  
  2251. // Recognizer Installation:
  2252. HREC      WINAPI InstallRecognizer(LPSTR);
  2253. VOID      WINAPI UninstallRecognizer(HREC);
  2254.  
  2255. // Inksets:
  2256. BOOL      WINAPI AddInksetInterval(HINKSET, LPINTERVAL);
  2257. HINKSET   WINAPI CreateInkset(UINT);
  2258. BOOL      WINAPI DestroyInkset(HINKSET);
  2259. int       WINAPI GetInksetInterval(HINKSET, UINT, LPINTERVAL);
  2260. int       WINAPI GetInksetIntervalCount(HINKSET);
  2261.  
  2262. // Symbol Values:
  2263. int       WINAPI CharacterToSymbol(LPSTR, int, LPSYV);
  2264. BOOL      WINAPI SymbolToCharacter(LPSYV, int, LPSTR, LPINT);
  2265. #endif /*!NOPENHRC */
  2266.  
  2267. //---------------------------------------------------------------------------
  2268. #ifndef NOPENINKPUT
  2269.  
  2270. // Pen Input/Inking:
  2271. int       WINAPI DoDefaultPenInput(HWND, UINT);
  2272. int       WINAPI GetPenInput(HPCM, LPPOINT, LPVOID, UINT, UINT, LPSTROKEINFO);
  2273. int       WINAPI PeekPenInput(HPCM, UINT, LPPOINT, LPVOID, UINT);
  2274. int       WINAPI StartInking(HPCM, UINT, LPINKINGINFO);
  2275. HPCM      WINAPI StartPenInput(HWND, UINT, LPPCMINFO, LPINT);
  2276. int       WINAPI StopInking(HPCM);
  2277. int       WINAPI StopPenInput(HPCM, UINT, int);
  2278. #endif /*!NOPENINKPUT */
  2279.  
  2280. //---------------------------------------------------------------------------
  2281. #ifndef NOPENMISC
  2282.  
  2283. // Miscellaneous/Utilities:
  2284. VOID      WINAPI BoundingRectFromPoints(LPPOINT, UINT, LPRECT);
  2285. BOOL      WINAPI DPtoTP(LPPOINT, int);
  2286. UINT      WINAPI GetPenAppFlags(VOID);
  2287. VOID      WINAPI SetPenAppFlags(UINT, UINT);
  2288. LONG      WINAPI GetPenMiscInfo(WPARAM, LPARAM);
  2289. UINT      WINAPI GetVersionPenWin(VOID);
  2290. LONG      WINAPI SetPenMiscInfo(WPARAM, LPARAM);
  2291. BOOL      WINAPI TPtoDP(LPPOINT, int);
  2292. BOOL      WINAPI CorrectWriting(HWND, LPSTR, UINT, LPVOID, DWORD, DWORD);
  2293. #ifndef _WIN32
  2294. UINT      WINAPI IsPenAware(VOID);
  2295. VOID      WINAPI RegisterPenApp(UINT, UINT);
  2296. #endif //!_WIN32
  2297.  
  2298. #endif /*!NOPENMISC */
  2299.  
  2300. //---------------------------------------------------------------------------
  2301. #ifndef NOPENRC1    // not available in WIN32
  2302.  
  2303. // RC1:
  2304. VOID      WINAPI EmulatePen(BOOL);
  2305. UINT      WINAPI EnumSymbols(LPSYG, UINT, ENUMPROC, LPVOID);
  2306. BOOL      WINAPI ExecuteGesture(HWND, SYV, LPRCRESULT);
  2307. VOID      WINAPI FirstSymbolFromGraph(LPSYG, LPSYV, int, LPINT);
  2308. UINT      WINAPI GetGlobalRC(LPRC, LPSTR, LPSTR, int);
  2309. int       WINAPI GetSymbolCount(LPSYG);
  2310. int       WINAPI GetSymbolMaxLength(LPSYG);
  2311. VOID      WINAPI InitRC(HWND, LPRC);
  2312. REC       WINAPI ProcessWriting(HWND, LPRC);
  2313. REC       WINAPI Recognize(LPRC);
  2314. REC       WINAPI RecognizeData(LPRC, HPENDATA);
  2315. UINT      WINAPI SetGlobalRC(LPRC, LPSTR, LPSTR);
  2316. BOOL      WINAPI SetRecogHook(UINT, UINT, HWND);
  2317. BOOL      WINAPI TrainContext(LPRCRESULT, LPSYE, int, LPSYC, int);
  2318. BOOL      WINAPI TrainInk(LPRC, HPENDATA, LPSYV);
  2319.  
  2320. // Custom Recognizer functions - not PenWin APIs (formerly in penwoem.h):
  2321. VOID      WINAPI CloseRecognizer(VOID);
  2322. UINT      WINAPI ConfigRecognizer(UINT, WPARAM, LPARAM);
  2323. BOOL      WINAPI InitRecognizer(LPRC);
  2324. REC       WINAPI RecognizeDataInternal(LPRC, HPENDATA, LPFUNCRESULTS);
  2325. REC       WINAPI RecognizeInternal(LPRC, LPFUNCRESULTS);
  2326. BOOL      WINAPI TrainContextInternal(LPRCRESULT, LPSYE, int, LPSYC, int);
  2327. BOOL      WINAPI TrainInkInternal(LPRC, HPENDATA, LPSYV);
  2328. #endif /*!NOPENRC1 */
  2329.  
  2330. //---------------------------------------------------------------------------
  2331. #ifndef NOPENTARGET
  2332.  
  2333. // Ink Targeting:
  2334. int       WINAPI TargetPoints(LPTARGINFO, LPPOINT, DWORD, UINT, LPSTROKEINFO);
  2335.  
  2336. #endif /*!NOPENTARGET */
  2337.  
  2338. //---------------------------------------------------------------------------
  2339. #ifndef NOPENVIRTEVENT
  2340.  
  2341. // Virtual Event Layer:
  2342. VOID      WINAPI AtomicVirtualEvent(BOOL);
  2343. VOID      WINAPI PostVirtualKeyEvent(UINT, BOOL);
  2344. VOID      WINAPI PostVirtualMouseEvent(UINT, int, int);
  2345. #endif /*!NOPENVIRTEVENT */
  2346.  
  2347. //---------------------------------------------------------------------------
  2348.  
  2349. #ifdef  JAPAN
  2350. // Kanji
  2351. BOOL      WINAPI KKConvert(HWND hwndConvert, HWND hwndCaller,
  2352.                            LPSTR lpBuf, UINT cbBuf, LPPOINT lpPnt);
  2353.  
  2354. #endif //  JAPAN
  2355.  
  2356. #endif /* RC_INVOKED */ // ... all the way back from definitions:3
  2357.  
  2358. /****** End of Header Info *************************************************/
  2359.  
  2360. #ifdef __cplusplus
  2361. }
  2362. #endif /* __cplusplus */
  2363.  
  2364. #ifndef _WIN32
  2365. #ifndef RC_INVOKED
  2366. #pragma pack()
  2367. #endif /* RC_INVOKED */
  2368. #endif //!_WIN32
  2369.  
  2370. #ifdef __BORLANDC__
  2371. #pragma option -b.
  2372.   #include <poppack.h>
  2373. #pragma option -b
  2374. #endif
  2375.  
  2376. #pragma option -b.
  2377. #endif /* #define _INC_PENWIN */
  2378.  
  2379.