home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / cb / setup / cbuilder / data.z / RICHEDIT.H < prev    next >
C/C++ Source or Header  |  1997-02-28  |  30KB  |  1,035 lines

  1. /*
  2.  *    RICHEDIT.H
  3.  *    
  4.  *    Purpose:
  5.  *        RICHEDIT v2.0 public definitions.  Note that there is additional
  6.  *        functionality available for v2.0 that is not in the original
  7.  *        Windows 95 release.
  8.  *    
  9.  *    Copyright (c) 1985-1996, Microsoft Corporation
  10.  */
  11.  
  12. #ifndef _RICHEDIT_
  13. #define    _RICHEDIT_
  14. #pragma option -b
  15.  
  16. #ifdef _WIN32
  17. #pragma option -b.
  18. #include <pshpack4.h>
  19. #pragma option -b
  20. #elif !defined(RC_INVOKED)
  21. #pragma pack(4)
  22. #endif
  23.  
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif /* __cplusplus */
  27.  
  28. /* To mimic RichEdit 1.0 behavior for Unicode apps, simply set _RICHEDIT_VER to 0x0100 */
  29. #ifndef _RICHEDIT_VER
  30. #define _RICHEDIT_VER    0x0200
  31. #endif
  32.  
  33. /*
  34.  *    To make some structures which can be passed between 16 and 32 bit windows
  35.  *    almost compatible, padding is introduced to the 16 bit versions of the
  36.  *    structure.
  37.  */
  38. #ifdef _WIN32
  39. #    define    _WPAD    /##/
  40. #else
  41. #    define    _WPAD    WORD
  42. #endif
  43.  
  44. #define cchTextLimitDefault 32767
  45.  
  46. /* Richedit2.0 Window Class. */
  47.  
  48. #define RICHEDIT_CLASSA        "RichEdit20A"
  49. #define RICHEDIT_CLASS10A    "RICHEDIT"            // Richedit 1.0
  50.  
  51. #ifndef MACPORT
  52. #define RICHEDIT_CLASSW        L"RichEdit20W"
  53. #else    /*----------------------MACPORT */
  54. #define RICHEDIT_CLASSW        TEXT("RichEdit20W")    /* MACPORT change */
  55. #endif /* MACPORT  */
  56.  
  57. #if (_RICHEDIT_VER >= 0x0200 )
  58. #ifdef UNICODE
  59. #define RICHEDIT_CLASS        RICHEDIT_CLASSW
  60. #else
  61. #define RICHEDIT_CLASS        RICHEDIT_CLASSA
  62. #endif /* UNICODE */
  63. #else
  64. #define RICHEDIT_CLASS        RICHEDIT_CLASS10A
  65. #endif /* _RICHEDIT_VER >= 0x0200 */
  66.  
  67. /* RichEdit messages */
  68.  
  69. #ifndef WM_CONTEXTMENU
  70. #define WM_CONTEXTMENU            0x007B
  71. #endif
  72.  
  73. #ifndef WM_PRINTCLIENT
  74. #define WM_PRINTCLIENT            0x0318
  75. #endif
  76.  
  77. #ifndef EM_GETLIMITTEXT
  78. #define EM_GETLIMITTEXT            (WM_USER + 37)
  79. #endif
  80.  
  81. #ifndef EM_POSFROMCHAR    
  82. #define EM_POSFROMCHAR            (WM_USER + 38)
  83. #define EM_CHARFROMPOS            (WM_USER + 39)
  84. #endif
  85.  
  86. #ifndef EM_SCROLLCARET
  87. #define EM_SCROLLCARET            (WM_USER + 49)
  88. #endif
  89. #define EM_CANPASTE                (WM_USER + 50)
  90. #define EM_DISPLAYBAND            (WM_USER + 51)
  91. #define EM_EXGETSEL                (WM_USER + 52)
  92. #define EM_EXLIMITTEXT            (WM_USER + 53)
  93. #define EM_EXLINEFROMCHAR        (WM_USER + 54)
  94. #define EM_EXSETSEL                (WM_USER + 55)
  95. #define EM_FINDTEXT                (WM_USER + 56)
  96. #define EM_FORMATRANGE            (WM_USER + 57)
  97. #define EM_GETCHARFORMAT        (WM_USER + 58)
  98. #define EM_GETEVENTMASK            (WM_USER + 59)
  99. #define EM_GETOLEINTERFACE        (WM_USER + 60)
  100. #define EM_GETPARAFORMAT        (WM_USER + 61)
  101. #define EM_GETSELTEXT            (WM_USER + 62)
  102. #define EM_HIDESELECTION        (WM_USER + 63)
  103. #define EM_PASTESPECIAL            (WM_USER + 64)
  104. #define EM_REQUESTRESIZE        (WM_USER + 65)
  105. #define EM_SELECTIONTYPE        (WM_USER + 66)
  106. #define EM_SETBKGNDCOLOR        (WM_USER + 67)
  107. #define EM_SETCHARFORMAT        (WM_USER + 68)
  108. #define EM_SETEVENTMASK            (WM_USER + 69)
  109. #define EM_SETOLECALLBACK        (WM_USER + 70)
  110. #define EM_SETPARAFORMAT        (WM_USER + 71)
  111. #define EM_SETTARGETDEVICE        (WM_USER + 72)
  112. #define EM_STREAMIN                (WM_USER + 73)
  113. #define EM_STREAMOUT            (WM_USER + 74)
  114. #define EM_GETTEXTRANGE            (WM_USER + 75)
  115. #define EM_FINDWORDBREAK        (WM_USER + 76)
  116. #define EM_SETOPTIONS            (WM_USER + 77)
  117. #define EM_GETOPTIONS            (WM_USER + 78)
  118. #define EM_FINDTEXTEX            (WM_USER + 79)
  119. #ifdef _WIN32
  120. #define EM_GETWORDBREAKPROCEX    (WM_USER + 80)
  121. #define EM_SETWORDBREAKPROCEX    (WM_USER + 81)
  122. #endif
  123.  
  124. /* Richedit v2.0 messages */
  125. #define    EM_SETUNDOLIMIT            (WM_USER + 82)
  126. #define EM_REDO                    (WM_USER + 84)
  127. #define EM_CANREDO                (WM_USER + 85)
  128. #define EM_GETUNDONAME            (WM_USER + 86)
  129. #define EM_GETREDONAME            (WM_USER + 87)
  130. #define EM_STOPGROUPTYPING        (WM_USER + 88)
  131.  
  132. #define EM_SETTEXTMODE            (WM_USER + 89)
  133. #define EM_GETTEXTMODE            (WM_USER + 90)
  134.  
  135. /* enum for use with EM_GET/SETTEXTMODE */
  136. typedef enum tagTextMode
  137. {
  138.     TM_PLAINTEXT            = 1,
  139.     TM_RICHTEXT                = 2,    /* default behavior */
  140.     TM_SINGLELEVELUNDO        = 4,
  141.     TM_MULTILEVELUNDO        = 8,    /* default behavior */
  142.     TM_SINGLECODEPAGE        = 16,
  143.     TM_MULTICODEPAGE        = 32    /* default behavior */
  144. } TEXTMODE;
  145.  
  146. #define EM_AUTOURLDETECT        (WM_USER + 91)
  147. #define EM_GETAUTOURLDETECT        (WM_USER + 92)
  148. #define EM_SETPALETTE            (WM_USER + 93)
  149. #define EM_GETTEXTEX            (WM_USER + 94)
  150. #define EM_GETTEXTLENGTHEX        (WM_USER + 95)
  151.  
  152. /* Far East specific messages */
  153. #define EM_SETPUNCTUATION        (WM_USER + 100)
  154. #define EM_GETPUNCTUATION        (WM_USER + 101)
  155. #define EM_SETWORDWRAPMODE        (WM_USER + 102)
  156. #define EM_GETWORDWRAPMODE        (WM_USER + 103)
  157. #define EM_SETIMECOLOR            (WM_USER + 104)
  158. #define EM_GETIMECOLOR            (WM_USER + 105)
  159. #define EM_SETIMEOPTIONS        (WM_USER + 106)
  160. #define EM_GETIMEOPTIONS        (WM_USER + 107)
  161. #define EM_CONVPOSITION         (WM_USER + 108)
  162.  
  163. #define EM_SETLANGOPTIONS        (WM_USER + 120)
  164. #define EM_GETLANGOPTIONS        (WM_USER + 121)
  165. #define EM_GETIMECOMPMODE        (WM_USER + 122)
  166.  
  167. /* Options for EM_SETLANGOPTIONS and EM_GETLANGOPTIONS */
  168. #define IMF_AUTOKEYBOARD        0x0001
  169. #define IMF_AUTOFONT            0x0002
  170. #define IMF_IMECANCELCOMPLETE    0x0004    // high completes the comp string when aborting, low cancels.
  171. #define IMF_IMEALWAYSSENDNOTIFY 0x0008
  172.  
  173. /* Values for EM_GETIMECOMPMODE */
  174. #define ICM_NOTOPEN                0x0000
  175. #define ICM_LEVEL3                0x0001
  176. #define ICM_LEVEL2                0x0002
  177. #define ICM_LEVEL2_5            0x0003
  178. #define ICM_LEVEL2_SUI            0x0004
  179.  
  180. /* New notifications */
  181.  
  182. #define EN_MSGFILTER            0x0700
  183. #define EN_REQUESTRESIZE        0x0701
  184. #define EN_SELCHANGE            0x0702
  185. #define EN_DROPFILES            0x0703
  186. #define EN_PROTECTED            0x0704
  187. #define EN_CORRECTTEXT            0x0705            /* PenWin specific */
  188. #define EN_STOPNOUNDO            0x0706
  189. #define EN_IMECHANGE            0x0707            /* Far East specific */
  190. #define EN_SAVECLIPBOARD        0x0708
  191. #define EN_OLEOPFAILED            0x0709
  192. #define EN_OBJECTPOSITIONS        0x070a
  193. #define EN_LINK                    0x070b
  194. #define EN_DRAGDROPDONE            0x070c
  195.  
  196. /* Event notification masks */
  197.  
  198. #define ENM_NONE                0x00000000
  199. #define ENM_CHANGE                0x00000001
  200. #define ENM_UPDATE                0x00000002
  201. #define ENM_SCROLL                0x00000004
  202. #define ENM_KEYEVENTS            0x00010000
  203. #define ENM_MOUSEEVENTS            0x00020000
  204. #define ENM_REQUESTRESIZE        0x00040000
  205. #define ENM_SELCHANGE            0x00080000
  206. #define ENM_DROPFILES            0x00100000
  207. #define ENM_PROTECTED            0x00200000
  208. #define ENM_CORRECTTEXT            0x00400000        /* PenWin specific */
  209. #define ENM_SCROLLEVENTS        0x00000008
  210. #define ENM_DRAGDROPDONE        0x00000010
  211.  
  212. /* Far East specific notification mask */
  213. #define ENM_IMECHANGE            0x00800000        /* unused by RE2.0 */
  214. #define ENM_LANGCHANGE            0x01000000
  215. #define ENM_OBJECTPOSITIONS        0x02000000
  216. #define ENM_LINK                0x04000000
  217.  
  218. /* New edit control styles */
  219.  
  220. #define ES_SAVESEL                0x00008000
  221. #define ES_SUNKEN                0x00004000
  222. #define ES_DISABLENOSCROLL        0x00002000
  223. /* same as WS_MAXIMIZE, but that doesn't make sense so we re-use the value */
  224. #define ES_SELECTIONBAR            0x01000000
  225. /* same as ES_UPPERCASE, but re-used to completely disable OLE drag'n'drop */
  226. #define ES_NOOLEDRAGDROP        0x00000008
  227.  
  228. /* New edit control extended style */
  229. #ifdef    _WIN32
  230. #define ES_EX_NOCALLOLEINIT        0x01000000
  231. #endif    
  232.  
  233. /* These flags are used in FE Windows */
  234. #define ES_VERTICAL                0x00400000
  235. #define    ES_NOIME                0x00080000
  236. #define ES_SELFIME                0x00040000
  237.  
  238. /* Edit control options */
  239. #define ECO_AUTOWORDSELECTION    0x00000001
  240. #define ECO_AUTOVSCROLL            0x00000040
  241. #define ECO_AUTOHSCROLL            0x00000080
  242. #define ECO_NOHIDESEL            0x00000100
  243. #define ECO_READONLY            0x00000800
  244. #define ECO_WANTRETURN            0x00001000
  245. #define ECO_SAVESEL                0x00008000
  246. #define ECO_SELECTIONBAR        0x01000000
  247. #define ECO_VERTICAL            0x00400000        /* FE specific */
  248.  
  249.  
  250. /* ECO operations */
  251. #define ECOOP_SET                0x0001
  252. #define ECOOP_OR                0x0002
  253. #define ECOOP_AND                0x0003
  254. #define ECOOP_XOR                0x0004
  255.  
  256. /* new word break function actions */
  257. #define WB_CLASSIFY            3
  258. #define WB_MOVEWORDLEFT        4
  259. #define WB_MOVEWORDRIGHT    5
  260. #define WB_LEFTBREAK        6
  261. #define WB_RIGHTBREAK        7
  262.  
  263. /* Far East specific flags */
  264. #define WB_MOVEWORDPREV        4
  265. #define WB_MOVEWORDNEXT        5
  266. #define WB_PREVBREAK        6
  267. #define WB_NEXTBREAK        7
  268.  
  269. #define PC_FOLLOWING        1
  270. #define    PC_LEADING            2
  271. #define    PC_OVERFLOW            3
  272. #define    PC_DELIMITER        4
  273. #define WBF_WORDWRAP        0x010
  274. #define WBF_WORDBREAK        0x020
  275. #define    WBF_OVERFLOW        0x040    
  276. #define WBF_LEVEL1            0x080
  277. #define    WBF_LEVEL2            0x100
  278. #define    WBF_CUSTOM            0x200
  279.  
  280. /* Far East specific flags */
  281. #define IMF_FORCENONE           0x0001
  282. #define IMF_FORCEENABLE         0x0002
  283. #define IMF_FORCEDISABLE        0x0004
  284. #define IMF_CLOSESTATUSWINDOW   0x0008
  285. #define IMF_VERTICAL            0x0020
  286. #define IMF_FORCEACTIVE         0x0040
  287. #define IMF_FORCEINACTIVE       0x0080
  288. #define IMF_FORCEREMEMBER       0x0100
  289. #define IMF_MULTIPLEEDIT        0x0400
  290.  
  291. /* Word break flags (used with WB_CLASSIFY) */
  292. #define WBF_CLASS            ((BYTE) 0x0F)
  293. #define WBF_ISWHITE            ((BYTE) 0x10)
  294. #define WBF_BREAKLINE        ((BYTE) 0x20)
  295. #define WBF_BREAKAFTER        ((BYTE) 0x40)
  296.  
  297.  
  298. /* new data types */
  299.  
  300. #ifdef _WIN32
  301. /* extended edit word break proc (character set aware) */
  302. typedef LONG (*EDITWORDBREAKPROCEX)(char *pchText, LONG cchText, BYTE bCharSet, INT action);
  303. #endif
  304.  
  305. /* all character format measurements are in twips */
  306. typedef struct _charformat
  307. {
  308.     UINT        cbSize;
  309.     _WPAD        _wPad1;
  310.     DWORD        dwMask;
  311.     DWORD        dwEffects;
  312.     LONG        yHeight;
  313.     LONG        yOffset;
  314.     COLORREF    crTextColor;
  315.     BYTE        bCharSet;
  316.     BYTE        bPitchAndFamily;
  317.     char        szFaceName[LF_FACESIZE];
  318.     _WPAD        _wPad2;
  319. } CHARFORMATA;
  320.  
  321. typedef struct _charformatw
  322. {
  323.     UINT        cbSize;
  324.     _WPAD        _wPad1;
  325.     DWORD        dwMask;
  326.     DWORD        dwEffects;
  327.     LONG        yHeight;
  328.     LONG        yOffset;
  329.     COLORREF    crTextColor;
  330.     BYTE        bCharSet;
  331.     BYTE        bPitchAndFamily;
  332.     WCHAR        szFaceName[LF_FACESIZE];
  333.     _WPAD        _wPad2;
  334. } CHARFORMATW;
  335.  
  336. #if (_RICHEDIT_VER >= 0x0200)
  337. #ifdef UNICODE
  338. #define CHARFORMAT CHARFORMATW
  339. #else
  340. #define CHARFORMAT CHARFORMATA
  341. #endif /* UNICODE */
  342. #else
  343. #define CHARFORMAT CHARFORMATA
  344. #endif /* _RICHEDIT_VER >= 0x0200 */
  345.  
  346. /* CHARFORMAT masks */
  347. #define CFM_BOLD        0x00000001
  348. #define CFM_ITALIC        0x00000002
  349. #define CFM_UNDERLINE    0x00000004
  350. #define CFM_STRIKEOUT    0x00000008
  351. #define CFM_PROTECTED    0x00000010
  352. #define CFM_LINK        0x00000020        /* Exchange hyperlink extension */
  353. #define CFM_SIZE        0x80000000
  354. #define CFM_COLOR        0x40000000
  355. #define CFM_FACE        0x20000000
  356. #define CFM_OFFSET        0x10000000
  357. #define CFM_CHARSET        0x08000000
  358.  
  359. /* CHARFORMAT effects */
  360. #define CFE_BOLD        0x0001
  361. #define CFE_ITALIC        0x0002
  362. #define CFE_UNDERLINE    0x0004
  363. #define CFE_STRIKEOUT    0x0008
  364. #define CFE_PROTECTED    0x0010
  365. #define CFE_LINK        0x0020
  366. #define CFE_AUTOCOLOR    0x40000000        /* NOTE: this corresponds to */
  367.                                         /* CFM_COLOR, which controls it */
  368. #define yHeightCharPtsMost 1638
  369.  
  370. /* EM_SETCHARFORMAT wParam masks */
  371. #define SCF_SELECTION    0x0001
  372. #define SCF_WORD        0x0002
  373. #define SCF_DEFAULT        0x0000        // set the default charformat or paraformat
  374. #define SCF_ALL            0x0004        // not valid with SCF_SELECTION or SCF_WORD
  375. #define SCF_USEUIRULES    0x0008        // modifier for SCF_SELECTION; says that
  376.                                     // the format came from a toolbar, etc. and
  377.                                     // therefore UI formatting rules should be
  378.                                     // used instead of strictly formatting the
  379.                                     // selection.
  380.  
  381.  
  382. typedef struct _charrange
  383. {
  384.     LONG    cpMin;
  385.     LONG    cpMax;
  386. } CHARRANGE;
  387.  
  388. typedef struct _textrange
  389. {
  390.     CHARRANGE chrg;
  391.     LPSTR lpstrText;    /* allocated by caller, zero terminated by RichEdit */
  392. } TEXTRANGEA;
  393.  
  394. typedef struct _textrangew
  395. {
  396.     CHARRANGE chrg;
  397.     LPWSTR lpstrText;    /* allocated by caller, zero terminated by RichEdit */
  398. } TEXTRANGEW;
  399.  
  400. #if (_RICHEDIT_VER >= 0x0200)
  401. #ifdef UNICODE
  402. #define TEXTRANGE     TEXTRANGEW
  403. #else
  404. #define TEXTRANGE    TEXTRANGEA
  405. #endif /* UNICODE */
  406. #else
  407. #define TEXTRANGE    TEXTRANGEA
  408. #endif /* _RICHEDIT_VER >= 0x0200 */
  409.  
  410.  
  411. typedef DWORD (CALLBACK *EDITSTREAMCALLBACK)(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
  412.  
  413. typedef struct _editstream
  414. {
  415.     DWORD dwCookie;        /* user value passed to callback as first parameter */
  416.     DWORD dwError;        /* last error */
  417.     EDITSTREAMCALLBACK pfnCallback;
  418. } EDITSTREAM;
  419.  
  420. /* stream formats */
  421.  
  422. #define SF_TEXT            0x0001
  423. #define SF_RTF            0x0002
  424. #define SF_RTFNOOBJS    0x0003        /* outbound only */
  425. #define SF_TEXTIZED        0x0004        /* outbound only */
  426. #define SF_UNICODE        0x0010        /* Unicode file of some kind */
  427.  
  428. /* Flag telling stream operations to operate on the selection only */
  429. /* EM_STREAMIN will replace the current selection */
  430. /* EM_STREAMOUT will stream out the current selection */
  431. #define SFF_SELECTION    0x8000
  432.  
  433. /* Flag telling stream operations to operate on the common RTF keyword only */
  434. /* EM_STREAMIN will accept the only common RTF keyword */
  435. /* EM_STREAMOUT will stream out the only common RTF keyword */
  436. #define SFF_PLAINRTF    0x4000
  437.  
  438. typedef struct _findtext
  439. {
  440.     CHARRANGE chrg;
  441.     LPSTR lpstrText;
  442. } FINDTEXTA;
  443.  
  444. typedef struct _findtextw
  445. {
  446.     CHARRANGE chrg;
  447.     LPWSTR lpstrText;
  448. } FINDTEXTW;
  449.  
  450. #if (_RICHEDIT_VER >= 0x0200)
  451. #ifdef UNICODE
  452. #define FINDTEXT    FINDTEXTW
  453. #else
  454. #define FINDTEXT    FINDTEXTA
  455. #endif /* UNICODE */
  456. #else
  457. #define FINDTEXT    FINDTEXTA
  458. #endif /* _RICHEDIT_VER >= 0x0200 */
  459.  
  460. typedef struct _findtextexa
  461. {
  462.     CHARRANGE chrg;
  463.     LPSTR lpstrText;
  464.     CHARRANGE chrgText;
  465. } FINDTEXTEXA;
  466.  
  467. typedef struct _findtextexw
  468. {
  469.     CHARRANGE chrg;
  470.     LPWSTR lpstrText;
  471.     CHARRANGE chrgText;
  472. } FINDTEXTEXW;
  473.  
  474. #if (_RICHEDIT_VER >= 0x0200)
  475. #ifdef UNICODE
  476. #define FINDTEXTEX    FINDTEXTEXW
  477. #else
  478. #define FINDTEXTEX    FINDTEXTEXA
  479. #endif /* UNICODE */
  480. #else
  481. #define FINDTEXTEX    FINDTEXTEXA
  482. #endif /* _RICHEDIT_VER >= 0x0200 */
  483.  
  484.  
  485. typedef struct _formatrange
  486. {
  487.     HDC hdc;
  488.     HDC hdcTarget;
  489.     RECT rc;
  490.     RECT rcPage;
  491.     CHARRANGE chrg;
  492. } FORMATRANGE;
  493.  
  494. /* all paragraph measurements are in twips */
  495.  
  496. #define MAX_TAB_STOPS 32
  497. #define lDefaultTab 720
  498.  
  499. typedef struct _paraformat
  500. {
  501.     UINT    cbSize;
  502.     _WPAD    _wPad1;
  503.     DWORD    dwMask;
  504.     WORD    wNumbering;
  505.     WORD    wReserved;
  506.     LONG    dxStartIndent;
  507.     LONG    dxRightIndent;
  508.     LONG    dxOffset;
  509.     WORD    wAlignment;
  510.     SHORT    cTabCount;
  511.     LONG    rgxTabs[MAX_TAB_STOPS];
  512. } PARAFORMAT;
  513.  
  514. /* PARAFORMAT mask values */
  515. #define PFM_STARTINDENT            0x00000001
  516. #define PFM_RIGHTINDENT            0x00000002
  517. #define PFM_OFFSET                0x00000004
  518. #define PFM_ALIGNMENT            0x00000008
  519. #define PFM_TABSTOPS            0x00000010
  520. #define PFM_NUMBERING            0x00000020
  521. #define PFM_OFFSETINDENT        0x80000000
  522.  
  523. /* PARAFORMAT numbering options */
  524. #define PFN_BULLET        0x0001
  525.  
  526. /* PARAFORMAT alignment options */
  527. #define PFA_LEFT    0x0001
  528. #define PFA_RIGHT    0x0002
  529. #define PFA_CENTER    0x0003
  530.  
  531. /* CHARFORMAT2 and PARAFORMAT2 structures */
  532.  
  533. #ifdef __cplusplus
  534.  
  535. struct CHARFORMAT2W : _charformatw
  536. {
  537.     WORD        wWeight;            /* Font weight (LOGFONT value)        */
  538.     SHORT        sSpacing;            /* Amount to space between letters    */
  539.     COLORREF    crBackColor;        /* Background color                    */
  540.     LCID        lcid;                /* Locale ID                        */
  541.     DWORD        dwReserved;            /* Reserved. Must be 0                */
  542.     SHORT        sStyle;                /* Style handle                        */
  543.     WORD        wKerning;            /* Twip size above which to kern char pair*/
  544.     BYTE        bUnderlineType;        /* Underline type                    */
  545.     BYTE        bAnimation;            /* Animated text like marching ants */
  546.     BYTE        bRevAuthor;            /* Revision author index            */
  547. };
  548.  
  549. struct CHARFORMAT2A : _charformat
  550. {
  551.     WORD        wWeight;            /* Font weight (LOGFONT value)        */
  552.     SHORT        sSpacing;            /* Amount to space between letters    */
  553.     COLORREF    crBackColor;        /* Background color                    */
  554.     LCID        lcid;                /* Locale ID                        */
  555.     DWORD        dwReserved;            /* Reserved. Must be 0                */
  556.     SHORT        sStyle;                /* Style handle                        */
  557.     WORD        wKerning;            /* Twip size above which to kern char pair*/
  558.     BYTE        bUnderlineType;        /* Underline type                    */
  559.     BYTE        bAnimation;            /* Animated text like marching ants    */
  560.     BYTE        bRevAuthor;            /* Revision author index            */
  561. };
  562.  
  563. #else    /* regular C-style  */
  564.  
  565. typedef struct _charformat2w
  566. {
  567.     UINT        cbSize;
  568.     _WPAD        _wPad1;
  569.     DWORD        dwMask;
  570.     DWORD        dwEffects;
  571.     LONG        yHeight;
  572.     LONG        yOffset;            /* > 0 for superscript, < 0 for subscript */
  573.     COLORREF    crTextColor;
  574.     BYTE        bCharSet;
  575.     BYTE        bPitchAndFamily;
  576.     WCHAR        szFaceName[LF_FACESIZE];
  577.     _WPAD        _wPad2;
  578.     WORD        wWeight;            /* Font weight (LOGFONT value)        */
  579.     SHORT        sSpacing;            /* Amount to space between letters    */
  580.     COLORREF    crBackColor;        /* Background color                    */
  581.     LCID        lcid;                /* Locale ID                        */
  582.     DWORD        dwReserved;            /* Reserved. Must be 0                */
  583.     SHORT        sStyle;                /* Style handle                        */
  584.     WORD        wKerning;            /* Twip size above which to kern char pair*/
  585.     BYTE        bUnderlineType;        /* Underline type                    */
  586.     BYTE        bAnimation;            /* Animated text like marching ants    */
  587.     BYTE        bRevAuthor;            /* Revision author index            */
  588.     BYTE        bReserved1;
  589. } CHARFORMAT2W;
  590.  
  591. typedef struct _charformat2a
  592. {
  593.     UINT        cbSize;
  594.     _WPAD        _wPad1;
  595.     DWORD        dwMask;
  596.     DWORD        dwEffects;
  597.     LONG        yHeight;
  598.     LONG        yOffset;            /* > 0 for superscript, < 0 for subscript */
  599.     COLORREF    crTextColor;
  600.     BYTE        bCharSet;
  601.     BYTE        bPitchAndFamily;
  602.     char        szFaceName[LF_FACESIZE];
  603.     _WPAD        _wPad2;
  604.     WORD        wWeight;            /* Font weight (LOGFONT value)        */
  605.     SHORT        sSpacing;            /* Amount to space between letters    */
  606.     COLORREF    crBackColor;        /* Background color                    */
  607.     LCID        lcid;                /* Locale ID                        */
  608.     DWORD        dwReserved;            /* Reserved. Must be 0                */
  609.     SHORT        sStyle;                /* Style handle                        */
  610.     WORD        wKerning;            /* Twip size above which to kern char pair*/
  611.     BYTE        bUnderlineType;        /* Underline type                    */
  612.     BYTE        bAnimation;            /* Animated text like marching ants    */
  613.     BYTE        bRevAuthor;            /* Revision author index            */
  614. } CHARFORMAT2A;
  615.  
  616. #endif /* C++ */
  617.  
  618. #ifdef UNICODE
  619. #define CHARFORMAT2    CHARFORMAT2W
  620. #else
  621. #define CHARFORMAT2 CHARFORMAT2A
  622. #endif
  623.  
  624. #define CHARFORMATDELTA        (sizeof(CHARFORMAT2) - sizeof(CHARFORMAT))
  625.  
  626.  
  627. /* CHARFORMAT and PARAFORMAT "ALL" masks
  628.    CFM_COLOR mirrors CFE_AUTOCOLOR, a little hack to easily deal with autocolor*/
  629.  
  630. #define CFM_EFFECTS (CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_COLOR | \
  631.                      CFM_STRIKEOUT | CFE_PROTECTED | CFM_LINK)
  632. #define CFM_ALL (CFM_EFFECTS | CFM_SIZE | CFM_FACE | CFM_OFFSET | CFM_CHARSET)
  633.  
  634. #define    PFM_ALL (PFM_STARTINDENT | PFM_RIGHTINDENT | PFM_OFFSET    | \
  635.                  PFM_ALIGNMENT   | PFM_TABSTOPS    | PFM_NUMBERING | \
  636.                  PFM_OFFSETINDENT)
  637.  
  638. /* New masks and effects -- a parenthesized asterisk indicates that
  639.    the data is stored by RichEdit2.0, but not displayed */
  640.  
  641. #define CFM_SMALLCAPS        0x0040            /* (*)    */
  642. #define    CFM_ALLCAPS            0x0080            /* (*)    */
  643. #define    CFM_HIDDEN            0x0100            /* (*)    */
  644. #define    CFM_OUTLINE            0x0200            /* (*)    */
  645. #define    CFM_SHADOW            0x0400            /* (*)    */
  646. #define    CFM_EMBOSS            0x0800            /* (*)    */
  647. #define    CFM_IMPRINT            0x1000            /* (*)    */
  648. #define CFM_DISABLED        0x2000
  649. #define    CFM_REVISED            0x4000
  650.  
  651. #define CFM_BACKCOLOR        0x04000000
  652. #define CFM_LCID            0x02000000
  653. #define    CFM_UNDERLINETYPE    0x00800000        /* (*)    */
  654. #define    CFM_WEIGHT            0x00400000
  655. #define CFM_SPACING            0x00200000        /* (*)    */
  656. #define CFM_KERNING            0x00100000        /* (*)    */
  657. #define CFM_STYLE            0x00080000        /* (*)    */
  658. #define CFM_ANIMATION        0x00040000        /* (*)    */
  659. #define CFM_REVAUTHOR        0x00008000
  660.  
  661. #define CFE_SUBSCRIPT        0x00010000        /* Superscript and subscript are */
  662. #define CFE_SUPERSCRIPT        0x00020000        /*  mutually exclusive             */
  663.  
  664. #define CFM_SUBSCRIPT        CFE_SUBSCRIPT | CFE_SUPERSCRIPT
  665. #define CFM_SUPERSCRIPT        CFM_SUBSCRIPT
  666.  
  667. #define    CFM_EFFECTS2 (CFM_EFFECTS | CFM_DISABLED | CFM_SMALLCAPS | CFM_ALLCAPS \
  668.                     | CFM_HIDDEN  | CFM_OUTLINE | CFM_SHADOW | CFM_EMBOSS \
  669.                     | CFM_IMPRINT | CFM_DISABLED | CFM_REVISED \
  670.                     | CFM_SUBSCRIPT | CFM_SUPERSCRIPT | CFM_BACKCOLOR)
  671.  
  672. #define CFM_ALL2     (CFM_ALL | CFM_EFFECTS2 | CFM_BACKCOLOR | CFM_LCID \
  673.                     | CFM_UNDERLINETYPE | CFM_WEIGHT | CFM_REVAUTHOR \
  674.                     | CFM_SPACING | CFM_KERNING | CFM_STYLE | CFM_ANIMATION)
  675.  
  676. #define    CFE_SMALLCAPS        CFM_SMALLCAPS
  677. #define    CFE_ALLCAPS            CFM_ALLCAPS
  678. #define    CFE_HIDDEN            CFM_HIDDEN
  679. #define    CFE_OUTLINE            CFM_OUTLINE
  680. #define    CFE_SHADOW            CFM_SHADOW
  681. #define    CFE_EMBOSS            CFM_EMBOSS
  682. #define    CFE_IMPRINT            CFM_IMPRINT
  683. #define    CFE_DISABLED        CFM_DISABLED
  684. #define    CFE_REVISED            CFM_REVISED
  685.  
  686. /* NOTE: CFE_AUTOCOLOR and CFE_AUTOBACKCOLOR correspond to CFM_COLOR and
  687.    CFM_BACKCOLOR, respectively, which control them */
  688. #define CFE_AUTOBACKCOLOR    CFM_BACKCOLOR
  689.  
  690. /* Underline types */
  691. #define CFU_CF1UNDERLINE    0xFF    /* map charformat's bit underline to CF2.*/
  692. #define CFU_INVERT            0xFE    /* For IME composition fake a selection.*/    
  693. #define    CFU_UNDERLINEDOTTED    0x4        /* (*) displayed as ordinary underline    */
  694. #define    CFU_UNDERLINEDOUBLE    0x3        /* (*) displayed as ordinary underline    */
  695. #define CFU_UNDERLINEWORD    0x2        /* (*) displayed as ordinary underline    */
  696. #define CFU_UNDERLINE        0x1
  697. #define CFU_UNDERLINENONE    0
  698.  
  699. #ifdef __cplusplus
  700. struct PARAFORMAT2 : _paraformat
  701. {
  702.     LONG    dySpaceBefore;            /* Vertical spacing before para            */
  703.     LONG    dySpaceAfter;            /* Vertical spacing after para            */    
  704.     LONG    dyLineSpacing;            /* Line spacing depending on Rule        */
  705.     SHORT    sStyle;                    /* Style handle                            */
  706.     BYTE    bLineSpacingRule;        /* Rule for line spacing (see tom.doc)    */
  707.     BYTE    bCRC;                    /* Reserved for CRC for rapid searching    */
  708.     WORD    wShadingWeight;            /* Shading in hundredths of a per cent    */
  709.     WORD    wShadingStyle;            /* Nibble 0: style, 1: cfpat, 2: cbpat    */
  710.     WORD    wNumberingStart;        /* Starting value for numbering            */
  711.     WORD    wNumberingStyle;        /* Alignment, roman/arabic, (), ), ., etc.*/
  712.     WORD    wNumberingTab;            /* Space bet FirstIndent and 1st-line text*/
  713.     WORD    wBorderSpace;            /* Space between border and text (twips)*/
  714.     WORD    wBorderWidth;            /* Border pen width (twips)                */
  715.     WORD    wBorders;                /* Byte 0: bits specify which borders    */
  716.                                     /* Nibble 2: border style, 3: color index*/
  717. };
  718.  
  719. #else    /* regular C-style    */
  720.  
  721. typedef struct _paraformat2
  722. {
  723.     UINT    cbSize;
  724.     _WPAD    _wPad1;
  725.     DWORD    dwMask;
  726.     WORD    wNumbering;
  727.     WORD    wReserved;
  728.     LONG    dxStartIndent;
  729.     LONG    dxRightIndent;
  730.     LONG    dxOffset;
  731.     WORD    wAlignment;
  732.     SHORT    cTabCount;
  733.     LONG    rgxTabs[MAX_TAB_STOPS];
  734.      LONG    dySpaceBefore;            /* Vertical spacing before para            */
  735.     LONG    dySpaceAfter;            /* Vertical spacing after para            */
  736.     LONG    dyLineSpacing;            /* Line spacing depending on Rule        */
  737.     SHORT    sStyle;                    /* Style handle                            */
  738.     BYTE    bLineSpacingRule;        /* Rule for line spacing (see tom.doc)    */
  739.     BYTE    bCRC;                    /* Reserved for CRC for rapid searching    */
  740.     WORD    wShadingWeight;            /* Shading in hundredths of a per cent    */
  741.     WORD    wShadingStyle;            /* Nibble 0: style, 1: cfpat, 2: cbpat    */
  742.     WORD    wNumberingStart;        /* Starting value for numbering            */    
  743.     WORD    wNumberingStyle;        /* Alignment, roman/arabic, (), ), ., etc.*/
  744.     WORD    wNumberingTab;            /* Space bet 1st indent and 1st-line text*/
  745.     WORD    wBorderSpace;            /* Space between border and text (twips)*/
  746.     WORD    wBorderWidth;            /* Border pen width (twips)                */
  747.     WORD    wBorders;                /* Byte 0: bits specify which borders    */
  748.                                     /* Nibble 2: border style, 3: color index*/
  749. } PARAFORMAT2;
  750.  
  751. #endif /* C++    */
  752.  
  753. /* this is a hack to make PARAFORMAT code more readable.
  754.    it applies to the wReserved field in PARAFORMAT, which
  755.    in PARAFORMAT2 is now used. */
  756.  
  757. #define    wEffects            wReserved
  758.  
  759. /* PARAFORMAT 2.0 masks and effects */
  760.  
  761. #define PFM_SPACEBEFORE            0x00000040
  762. #define PFM_SPACEAFTER            0x00000080
  763. #define PFM_LINESPACING            0x00000100
  764. #define    PFM_STYLE                0x00000400
  765. #define PFM_BORDER                0x00000800    /* (*)    */
  766. #define PFM_SHADING                0x00001000    /* (*)    */
  767. #define PFM_NUMBERINGSTYLE        0x00002000    /* (*)    */
  768. #define PFM_NUMBERINGTAB        0x00004000    /* (*)    */
  769. #define PFM_NUMBERINGSTART        0x00008000    /* (*)    */
  770.  
  771. #define PFM_RTLPARA                0x00010000
  772. #define PFM_KEEP                0x00020000    /* (*)    */
  773. #define PFM_KEEPNEXT            0x00040000    /* (*)    */
  774. #define PFM_PAGEBREAKBEFORE        0x00080000    /* (*)    */
  775. #define PFM_NOLINENUMBER        0x00100000    /* (*)    */
  776. #define PFM_NOWIDOWCONTROL        0x00200000    /* (*)    */
  777. #define PFM_DONOTHYPHEN            0x00400000    /* (*)    */
  778. #define PFM_SIDEBYSIDE            0x00800000    /* (*)    */
  779.  
  780. #define PFM_TABLE                0xc0000000    /* (*)    */
  781.  
  782. /* Note: PARAFORMAT has no effects */
  783. #define PFM_EFFECTS  (PFM_RTLPARA | PFM_KEEP | PFM_KEEPNEXT | PFM_TABLE \
  784.                     | PFM_PAGEBREAKBEFORE | PFM_NOLINENUMBER  \
  785.                     | PFM_NOWIDOWCONTROL | PFM_DONOTHYPHEN | PFM_SIDEBYSIDE \
  786.                     | PFM_TABLE)
  787.  
  788. #define PFM_ALL2    (PFM_ALL | PFM_EFFECTS | PFM_SPACEBEFORE | PFM_SPACEAFTER \
  789.                     | PFM_LINESPACING | PFM_STYLE | PFM_SHADING | PFM_BORDER \
  790.                     | PFM_NUMBERINGTAB | PFM_NUMBERINGSTART | PFM_NUMBERINGSTYLE)
  791.  
  792. #define PFE_RTLPARA                (PFM_RTLPARA         >> 16)
  793. #define PFE_KEEP                (PFM_KEEP             >> 16)    /* (*)    */
  794. #define PFE_KEEPNEXT            (PFM_KEEPNEXT         >> 16)    /* (*)    */
  795. #define PFE_PAGEBREAKBEFORE        (PFM_PAGEBREAKBEFORE >> 16)    /* (*)    */
  796. #define PFE_NOLINENUMBER        (PFM_NOLINENUMBER     >> 16)    /* (*)    */
  797. #define PFE_NOWIDOWCONTROL        (PFM_NOWIDOWCONTROL     >> 16)    /* (*)    */
  798. #define PFE_DONOTHYPHEN            (PFM_DONOTHYPHEN      >> 16)    /* (*)    */
  799. #define PFE_SIDEBYSIDE            (PFM_SIDEBYSIDE         >> 16)    /* (*)    */
  800.  
  801. #define PFE_TABLEROW            0xc000        /* These 3 options are mutually    */
  802. #define PFE_TABLECELLEND        0x8000        /*  exclusive and each imply    */
  803. #define PFE_TABLECELL            0x4000        /*  that para is part of a table*/
  804.  
  805. /*
  806.  *    PARAFORMAT numbering options (values for wNumbering):
  807.  *
  808.  *        Numbering Type        Value    Meaning
  809.  *        tomNoNumbering          0        Turn off paragraph numbering
  810.  *        tomNumberAsLCLetter      1        a, b, c, ...
  811.  *        tomNumberAsUCLetter      2        A, B, C, ...
  812.  *        tomNumberAsLCRoman      3        i, ii, iii, ...
  813.  *        tomNumberAsUCRoman      4        I, II, III, ...
  814.  *        tomNumberAsSymbols      5        default is bullet
  815.  *        tomNumberAsNumber      6        0, 1, 2, ...
  816.  *        tomNumberAsSequence      7        tomNumberingStart is first Unicode to use
  817.  *
  818.  *    Other valid Unicode chars are Unicodes for bullets.
  819.  */
  820.  
  821.  
  822. #define    PFA_JUSTIFY            4    /* New paragraph-alignment option 2.0 (*)
  823.  
  824.  
  825. /* notification structures */
  826.  
  827. #ifndef WM_NOTIFY
  828. #define WM_NOTIFY                0x004E
  829.  
  830. typedef struct _nmhdr
  831. {
  832.     HWND    hwndFrom;
  833.     _WPAD    _wPad1;
  834.     UINT    idFrom;
  835.     _WPAD    _wPad2;
  836.     UINT    code;
  837.     _WPAD    _wPad3;
  838. } NMHDR;
  839. #endif  /* !WM_NOTIFY */
  840.  
  841. typedef struct _msgfilter
  842. {
  843.     NMHDR    nmhdr;
  844.     UINT    msg;
  845.     _WPAD    _wPad1;
  846.     WPARAM    wParam;
  847.     _WPAD    _wPad2;
  848.     LPARAM    lParam;
  849. } MSGFILTER;
  850.  
  851. typedef struct _reqresize
  852. {
  853.     NMHDR nmhdr;
  854.     RECT rc;
  855. } REQRESIZE;
  856.  
  857. typedef struct _selchange
  858. {
  859.     NMHDR nmhdr;
  860.     CHARRANGE chrg;
  861.     WORD seltyp;
  862. } SELCHANGE;
  863.  
  864. #define SEL_EMPTY        0x0000
  865. #define SEL_TEXT        0x0001
  866. #define SEL_OBJECT        0x0002
  867. #define SEL_MULTICHAR    0x0004
  868. #define SEL_MULTIOBJECT    0x0008
  869.  
  870. /* used with IRichEditOleCallback::GetContextMenu, this flag will be
  871.    passed as a "selection type".  It indicates that a context menu for
  872.    a right-mouse drag drop should be generated.  The IOleObject parameter
  873.    will really be the IDataObject for the drop
  874.  */
  875. #define GCM_RIGHTMOUSEDROP  0x8000
  876.  
  877. typedef struct _endropfiles
  878. {
  879.     NMHDR nmhdr;
  880.     HANDLE hDrop;
  881.     LONG cp;
  882.     BOOL fProtected;
  883. } ENDROPFILES;
  884.  
  885. typedef struct _enprotected
  886. {
  887.     NMHDR nmhdr;
  888.     UINT msg;
  889.     _WPAD    _wPad1;
  890.     WPARAM wParam;
  891.     _WPAD    _wPad2;
  892.     LPARAM lParam;
  893.     CHARRANGE chrg;
  894. } ENPROTECTED;
  895.  
  896. typedef struct _ensaveclipboard
  897. {
  898.     NMHDR nmhdr;
  899.     LONG cObjectCount;
  900.     LONG cch;
  901. } ENSAVECLIPBOARD;
  902.  
  903. #ifndef MACPORT
  904. typedef struct _enoleopfailed
  905. {
  906.     NMHDR nmhdr;
  907.     LONG iob;
  908.     LONG lOper;
  909.     HRESULT hr;
  910. } ENOLEOPFAILED;
  911. #endif
  912.  
  913. #define    OLEOP_DOVERB    1
  914.  
  915. typedef struct _objectpositions
  916. {
  917.     NMHDR nmhdr;
  918.     LONG cObjectCount;
  919.     LONG *pcpPositions;
  920. } OBJECTPOSITIONS;
  921.  
  922. typedef struct _enlink
  923. {
  924.     NMHDR nmhdr;
  925.     UINT msg;
  926.     _WPAD   _wPad1;
  927.     WPARAM wParam;
  928.     _WPAD   _wPad2;
  929.     LPARAM lParam;
  930.     CHARRANGE chrg;
  931. } ENLINK;
  932.  
  933. /* PenWin specific */
  934. typedef struct _encorrecttext
  935. {
  936.     NMHDR nmhdr;
  937.     CHARRANGE chrg;
  938.     WORD seltyp;
  939. } ENCORRECTTEXT;
  940.  
  941. /* Far East specific */
  942. typedef struct _punctuation
  943. {
  944.     UINT    iSize;
  945.     LPSTR    szPunctuation;
  946. } PUNCTUATION;
  947.  
  948. /* Far East specific */
  949. typedef struct _compcolor
  950. {
  951.     COLORREF crText;
  952.     COLORREF crBackground;
  953.     DWORD dwEffects;
  954. }COMPCOLOR;
  955.  
  956.  
  957. /* clipboard formats - use as parameter to RegisterClipboardFormat() */
  958. #define CF_RTF             TEXT("Rich Text Format")
  959. #define CF_RTFNOOBJS     TEXT("Rich Text Format Without Objects")
  960. #define CF_RETEXTOBJ     TEXT("RichEdit Text and Objects")
  961.  
  962. /* Paste Special */
  963. typedef struct _repastespecial
  964. {
  965.     DWORD    dwAspect;
  966.     DWORD    dwParam;
  967. } REPASTESPECIAL;
  968.  
  969. /*    UndoName info */
  970. typedef enum _undonameid
  971. {
  972.     UID_UNKNOWN     = 0,
  973.     UID_TYPING        = 1,
  974.     UID_DELETE         = 2,
  975.     UID_DRAGDROP    = 3,
  976.     UID_CUT            = 4,
  977.     UID_PASTE        = 5
  978. } UNDONAMEID;
  979.  
  980. /* flags for the GETEXTEX data structure */
  981. #define GT_DEFAULT        0
  982. #define GT_USECRLF        1
  983.  
  984. /* EM_GETTEXTEX info; this struct is passed in the wparam of the message */
  985. typedef struct _gettextex
  986. {
  987.     DWORD    cb;                /* count of bytes in the string                */
  988.     DWORD    flags;            /* flags (see the GT_XXX defines            */
  989.     UINT    codepage;        /* code page for translation (CP_ACP for default,
  990.                                1200 for Unicode                            */
  991.     LPCSTR    lpDefaultChar;    /* replacement for unmappable chars            */
  992.     LPBOOL    lpUsedDefChar;    /* pointer to flag set when def char used    */
  993. } GETTEXTEX;
  994.  
  995. /* flags for the GETTEXTLENGTHEX data structure                            */
  996. #define GTL_DEFAULT        0    /* do the default (return # of chars)        */
  997. #define GTL_USECRLF        1    /* compute answer using CRLFs for paragraphs*/
  998. #define GTL_PRECISE        2    /* compute a precise answer                    */
  999. #define GTL_CLOSE        4    /* fast computation of a "close" answer        */
  1000. #define GTL_NUMCHARS    8    /* return the number of characters            */
  1001. #define GTL_NUMBYTES    16    /* return the number of _bytes_                */
  1002.  
  1003. /* EM_GETTEXTLENGTHEX info; this struct is passed in the wparam of the msg */
  1004. typedef struct _gettextlengthex
  1005. {
  1006.     DWORD    flags;            /* flags (see GTL_XXX defines)                */
  1007.     UINT    codepage;        /* code page for translation (CP_ACP for default,
  1008.                                1200 for Unicode                            */
  1009. } GETTEXTLENGTHEX;
  1010.     
  1011.     
  1012. /* UNICODE embedding character */
  1013. #ifndef WCH_EMBEDDING
  1014. #define WCH_EMBEDDING (WCHAR)0xFFFC
  1015. #endif /* WCH_EMBEDDING */
  1016.         
  1017.  
  1018. #undef _WPAD
  1019.  
  1020. #ifdef _WIN32
  1021. #pragma option -b.
  1022. #include <poppack.h>
  1023. #pragma option -b
  1024. #elif !defined(RC_INVOKED)
  1025. #pragma pack()
  1026. #endif
  1027.  
  1028. #ifdef __cplusplus
  1029. }
  1030. #endif  /* __cplusplus */
  1031.  
  1032. #pragma option -b.
  1033. #endif /* !_RICHEDIT_ */
  1034.  
  1035.