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