home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / richedit.h < prev    next >
C/C++ Source or Header  |  2000-02-01  |  37KB  |  1,175 lines

  1. /*
  2.  *    RICHEDIT.H
  3.  *    
  4.  *    Purpose:
  5.  *        RICHEDIT v2.0/3.0 public definitions.  Note that there is additional
  6.  *        functionality available for v2.0 and 3.0 that is not in the original
  7.  *        Windows 95 release.
  8.  *    
  9.  *    Copyright (c) 1993-1998, Microsoft Corporation
  10.  */
  11.  
  12. #ifndef _RICHEDIT_
  13. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  14. #define    _RICHEDIT_
  15.  
  16. #ifdef _WIN32
  17. #include <pshpack4.h>
  18. #elif !defined(RC_INVOKED)
  19. #pragma pack(4)
  20. #endif
  21.  
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif /* __cplusplus */
  25.  
  26. /* To mimic older RichEdit behavior, set _RICHEDIT_VER to appropriate value */
  27. /*        Version 1.0        0x0100    */
  28. /*        Version 2.0        0x0200    */
  29. /*        Version 2.1        0x0210    */
  30. #ifndef _RICHEDIT_VER
  31. #define _RICHEDIT_VER    0x0300
  32. #endif
  33.  
  34. #define cchTextLimitDefault 32767
  35.  
  36. /* RichEdit 2.0 Window Class. */
  37. // For Windows CE to avoid possible conflicts on Win95.
  38. #define CERICHEDIT_CLASSA    "RichEditCEA"
  39. #define CERICHEDIT_CLASSW    L"RichEditCEW"
  40.  
  41. #define RICHEDIT_CLASSA        "RichEdit20A"
  42. #define RICHEDIT_CLASS10A    "RICHEDIT"            // Richedit 1.0
  43.  
  44. #ifndef MACPORT
  45. #define RICHEDIT_CLASSW        L"RichEdit20W"
  46. #else    /*----------------------MACPORT */
  47. #define RICHEDIT_CLASSW        TEXT("RichEdit20W")    /* MACPORT change */
  48. #endif /* MACPORT  */
  49.  
  50. #if (_RICHEDIT_VER >= 0x0200 )
  51. #ifdef UNICODE
  52. #define RICHEDIT_CLASS        RICHEDIT_CLASSW
  53. #else
  54. #define RICHEDIT_CLASS        RICHEDIT_CLASSA
  55. #endif /* UNICODE */
  56. #else
  57. #define RICHEDIT_CLASS        RICHEDIT_CLASS10A
  58. #endif /* _RICHEDIT_VER >= 0x0200 */
  59.  
  60. /* RichEdit messages */
  61.  
  62. #ifndef WM_CONTEXTMENU
  63. #define WM_CONTEXTMENU            0x007B
  64. #endif
  65.  
  66. #ifndef WM_PRINTCLIENT
  67. #define WM_PRINTCLIENT            0x0318
  68. #endif
  69.  
  70. #ifndef EM_GETLIMITTEXT
  71. #define EM_GETLIMITTEXT            (WM_USER + 37)
  72. #endif
  73.  
  74. #ifndef EM_POSFROMCHAR    
  75. #define EM_POSFROMCHAR            (WM_USER + 38)
  76. #define EM_CHARFROMPOS            (WM_USER + 39)
  77. #endif
  78.  
  79. #ifndef EM_SCROLLCARET
  80. #define EM_SCROLLCARET            (WM_USER + 49)
  81. #endif
  82. #define EM_CANPASTE                (WM_USER + 50)
  83. #define EM_DISPLAYBAND            (WM_USER + 51)
  84. #define EM_EXGETSEL                (WM_USER + 52)
  85. #define EM_EXLIMITTEXT            (WM_USER + 53)
  86. #define EM_EXLINEFROMCHAR        (WM_USER + 54)
  87. #define EM_EXSETSEL                (WM_USER + 55)
  88. #define EM_FINDTEXT                (WM_USER + 56)
  89. #define EM_FORMATRANGE            (WM_USER + 57)
  90. #define EM_GETCHARFORMAT        (WM_USER + 58)
  91. #define EM_GETEVENTMASK            (WM_USER + 59)
  92. #define EM_GETOLEINTERFACE        (WM_USER + 60)
  93. #define EM_GETPARAFORMAT        (WM_USER + 61)
  94. #define EM_GETSELTEXT            (WM_USER + 62)
  95. #define EM_HIDESELECTION        (WM_USER + 63)
  96. #define EM_PASTESPECIAL            (WM_USER + 64)
  97. #define EM_REQUESTRESIZE        (WM_USER + 65)
  98. #define EM_SELECTIONTYPE        (WM_USER + 66)
  99. #define EM_SETBKGNDCOLOR        (WM_USER + 67)
  100. #define EM_SETCHARFORMAT        (WM_USER + 68)
  101. #define EM_SETEVENTMASK            (WM_USER + 69)
  102. #define EM_SETOLECALLBACK        (WM_USER + 70)
  103. #define EM_SETPARAFORMAT        (WM_USER + 71)
  104. #define EM_SETTARGETDEVICE        (WM_USER + 72)
  105. #define EM_STREAMIN                (WM_USER + 73)
  106. #define EM_STREAMOUT            (WM_USER + 74)
  107. #define EM_GETTEXTRANGE            (WM_USER + 75)
  108. #define EM_FINDWORDBREAK        (WM_USER + 76)
  109. #define EM_SETOPTIONS            (WM_USER + 77)
  110. #define EM_GETOPTIONS            (WM_USER + 78)
  111. #define EM_FINDTEXTEX            (WM_USER + 79)
  112. #ifdef _WIN32
  113. #define EM_GETWORDBREAKPROCEX    (WM_USER + 80)
  114. #define EM_SETWORDBREAKPROCEX    (WM_USER + 81)
  115. #endif
  116.  
  117. /* RichEdit 2.0 messages */
  118. #define    EM_SETUNDOLIMIT            (WM_USER + 82)
  119. #define EM_REDO                    (WM_USER + 84)
  120. #define EM_CANREDO                (WM_USER + 85)
  121. #define EM_GETUNDONAME            (WM_USER + 86)
  122. #define EM_GETREDONAME            (WM_USER + 87)
  123. #define EM_STOPGROUPTYPING        (WM_USER + 88)
  124.  
  125. #define EM_SETTEXTMODE            (WM_USER + 89)
  126. #define EM_GETTEXTMODE            (WM_USER + 90)
  127.  
  128. /* enum for use with EM_GET/SETTEXTMODE */
  129. typedef enum tagTextMode
  130. {
  131.     TM_PLAINTEXT            = 1,
  132.     TM_RICHTEXT                = 2,    /* default behavior */
  133.     TM_SINGLELEVELUNDO        = 4,
  134.     TM_MULTILEVELUNDO        = 8,    /* default behavior */
  135.     TM_SINGLECODEPAGE        = 16,
  136.     TM_MULTICODEPAGE        = 32    /* default behavior */
  137. } TEXTMODE;
  138.  
  139. #define EM_AUTOURLDETECT        (WM_USER + 91)
  140. #define EM_GETAUTOURLDETECT        (WM_USER + 92)
  141. #define EM_SETPALETTE            (WM_USER + 93)
  142. #define EM_GETTEXTEX            (WM_USER + 94)
  143. #define EM_GETTEXTLENGTHEX        (WM_USER + 95)
  144. #define EM_SHOWSCROLLBAR        (WM_USER + 96)
  145. #define EM_SETTEXTEX            (WM_USER + 97)
  146.  
  147. /* Far East specific messages */
  148. #define EM_SETPUNCTUATION        (WM_USER + 100)
  149. #define EM_GETPUNCTUATION        (WM_USER + 101)
  150. #define EM_SETWORDWRAPMODE        (WM_USER + 102)
  151. #define EM_GETWORDWRAPMODE        (WM_USER + 103)
  152. #define EM_SETIMECOLOR            (WM_USER + 104)
  153. #define EM_GETIMECOLOR            (WM_USER + 105)
  154. #define EM_SETIMEOPTIONS        (WM_USER + 106)
  155. #define EM_GETIMEOPTIONS        (WM_USER + 107)
  156. #define EM_CONVPOSITION         (WM_USER + 108)
  157.  
  158. #define EM_SETLANGOPTIONS        (WM_USER + 120)
  159. #define EM_GETLANGOPTIONS        (WM_USER + 121)
  160. #define EM_GETIMECOMPMODE        (WM_USER + 122)
  161.  
  162. #define EM_FINDTEXTW            (WM_USER + 123)
  163. #define EM_FINDTEXTEXW            (WM_USER + 124)
  164.  
  165. /* RE3.0 FE messages */
  166. #define EM_RECONVERSION            (WM_USER + 125)
  167. #define EM_SETIMEMODEBIAS        (WM_USER + 126)    
  168. #define EM_GETIMEMODEBIAS        (WM_USER + 127)
  169.  
  170. /* BiDi specific messages */
  171. #define EM_SETBIDIOPTIONS        (WM_USER + 200)
  172. #define EM_GETBIDIOPTIONS        (WM_USER + 201)
  173.  
  174. #define EM_SETTYPOGRAPHYOPTIONS    (WM_USER + 202)
  175. #define EM_GETTYPOGRAPHYOPTIONS    (WM_USER + 203)
  176.  
  177. /* Extended edit style specific messages */
  178. #define EM_SETEDITSTYLE            (WM_USER + 204)
  179. #define EM_GETEDITSTYLE            (WM_USER + 205)
  180.  
  181. /* Extended edit style masks */
  182. #define    SES_EMULATESYSEDIT        1
  183. #define SES_BEEPONMAXTEXT        2
  184. #define    SES_EXTENDBACKCOLOR        4
  185. #define SES_MAPCPS                8
  186. #define SES_EMULATE10            16
  187. #define    SES_USECRLF                32
  188. #define SES_USEAIMM                64
  189. #define SES_NOIME                128
  190.  
  191. #define SES_ALLOWBEEPS            256
  192. #define SES_UPPERCASE            512
  193. #define    SES_LOWERCASE            1024
  194. #define SES_NOINPUTSEQUENCECHK    2048
  195. #define SES_BIDI                4096
  196. #define SES_SCROLLONKILLFOCUS    8192
  197. #define    SES_XLTCRCRLFTOCR        16384
  198.  
  199.  
  200. /* Options for EM_SETLANGOPTIONS and EM_GETLANGOPTIONS */
  201. #define IMF_AUTOKEYBOARD        0x0001
  202. #define IMF_AUTOFONT            0x0002
  203. #define IMF_IMECANCELCOMPLETE    0x0004    // high completes comp string when aborting, low cancels.
  204. #define IMF_IMEALWAYSSENDNOTIFY 0x0008
  205. #define IMF_AUTOFONTSIZEADJUST    0x0010
  206. #define IMF_UIFONTS                0x0020
  207. #define IMF_DUALFONT            0x0080
  208.  
  209. /* Values for EM_GETIMECOMPMODE */
  210. #define ICM_NOTOPEN                0x0000
  211. #define ICM_LEVEL3                0x0001
  212. #define ICM_LEVEL2                0x0002
  213. #define ICM_LEVEL2_5            0x0003
  214. #define ICM_LEVEL2_SUI            0x0004
  215.  
  216. /* Options for EM_SETTYPOGRAPHYOPTIONS */
  217. #define    TO_ADVANCEDTYPOGRAPHY    1
  218. #define    TO_SIMPLELINEBREAK        2
  219.  
  220. /* Pegasus outline mode messages (RE 3.0) */
  221.  
  222. // Outline mode message
  223. #define EM_OUTLINE              (WM_USER + 220)
  224. // Message for getting and restoring scroll pos
  225. #define EM_GETSCROLLPOS         (WM_USER + 221)
  226. #define EM_SETSCROLLPOS         (WM_USER + 222)
  227. // Change fontsize in current selection by wParam
  228. #define EM_SETFONTSIZE          (WM_USER + 223)
  229. #define EM_GETZOOM                (WM_USER + 224)
  230. #define EM_SETZOOM                (WM_USER + 225)
  231.  
  232. // Outline mode wparam values
  233. #define EMO_EXIT                0       // enter normal mode,  lparam ignored
  234. #define EMO_ENTER               1       // enter outline mode, lparam ignored
  235. #define EMO_PROMOTE             2       // LOWORD(lparam) == 0 ==>
  236.                                         // promote  to body-text
  237.                                         // LOWORD(lparam) != 0 ==>
  238.                                         // promote/demote current selection
  239.                                         // by indicated number of levels
  240. #define EMO_EXPAND              3       // HIWORD(lparam) = EMO_EXPANDSELECTION
  241.                                         // -> expands selection to level
  242.                                         // indicated in LOWORD(lparam)
  243.                                         // LOWORD(lparam) = -1/+1 corresponds
  244.                                         // to collapse/expand button presses
  245.                                         // in winword (other values are
  246.                                         // equivalent to having pressed these
  247.                                         // buttons more than once)
  248.                                         // HIWORD(lparam) = EMO_EXPANDDOCUMENT
  249.                                         // -> expands whole document to
  250.                                         // indicated level
  251. #define EMO_MOVESELECTION       4       // LOWORD(lparam) != 0 -> move current
  252.                                         // selection up/down by indicated
  253.                                         // amount
  254. #define EMO_GETVIEWMODE            5        // Returns VM_NORMAL or VM_OUTLINE
  255.  
  256. // EMO_EXPAND options
  257. #define EMO_EXPANDSELECTION     0
  258. #define EMO_EXPANDDOCUMENT      1
  259. #define VM_NORMAL                4        // Agrees with RTF \viewkindN
  260. #define VM_OUTLINE                2
  261.  
  262. /* New notifications */
  263. #define EN_MSGFILTER            0x0700
  264. #define EN_REQUESTRESIZE        0x0701
  265. #define EN_SELCHANGE            0x0702
  266. #define EN_DROPFILES            0x0703
  267. #define EN_PROTECTED            0x0704
  268. #define EN_CORRECTTEXT            0x0705            /* PenWin specific */
  269. #define EN_STOPNOUNDO            0x0706
  270. #define EN_IMECHANGE            0x0707            /* Far East specific */
  271. #define EN_SAVECLIPBOARD        0x0708
  272. #define EN_OLEOPFAILED            0x0709
  273. #define EN_OBJECTPOSITIONS        0x070a
  274. #define EN_LINK                    0x070b
  275. #define EN_DRAGDROPDONE            0x070c
  276. #define EN_PARAGRAPHEXPANDED    0x070d
  277.  
  278. /* BiDi specific notifications */
  279. #define EN_ALIGNLTR                0x0710
  280. #define EN_ALIGNRTL                0x0711
  281.  
  282. /* Event notification masks */
  283. #define ENM_NONE                0x00000000
  284. #define ENM_CHANGE                0x00000001
  285. #define ENM_UPDATE                0x00000002
  286. #define ENM_SCROLL                0x00000004
  287. #define ENM_KEYEVENTS            0x00010000
  288. #define ENM_MOUSEEVENTS            0x00020000
  289. #define ENM_REQUESTRESIZE        0x00040000
  290. #define ENM_SELCHANGE            0x00080000
  291. #define ENM_DROPFILES            0x00100000
  292. #define ENM_PROTECTED            0x00200000
  293. #define ENM_CORRECTTEXT            0x00400000        /* PenWin specific */
  294. #define ENM_SCROLLEVENTS        0x00000008
  295. #define ENM_DRAGDROPDONE        0x00000010
  296. #define ENM_PARAGRAPHEXPANDED    0x00000020
  297.  
  298. /* Far East specific notification mask */
  299. #define ENM_IMECHANGE            0x00800000        /* unused by RE2.0 */
  300. #define ENM_LANGCHANGE            0x01000000
  301. #define ENM_OBJECTPOSITIONS        0x02000000
  302. #define ENM_LINK                0x04000000
  303.  
  304. /* New edit control styles */
  305. #define ES_SAVESEL                0x00008000
  306. #define ES_SUNKEN                0x00004000
  307. #define ES_DISABLENOSCROLL        0x00002000
  308. /* same as WS_MAXIMIZE, but that doesn't make sense so we re-use the value */
  309. #define ES_SELECTIONBAR            0x01000000
  310. /* same as ES_UPPERCASE, but re-used to completely disable OLE drag'n'drop */
  311. #define ES_NOOLEDRAGDROP        0x00000008
  312.  
  313. /* Edit control extended style */
  314. #if (_WIN32_WINNT > 0x0400) || (WINVER > 0x0400)
  315. #define ES_EX_NOCALLOLEINIT        0x00000000        /* Not supported in RE 2.0/3.0 */
  316. #else
  317. #ifdef    _WIN32
  318. #define ES_EX_NOCALLOLEINIT        0x01000000
  319. #endif    
  320. #endif
  321.  
  322. /* These flags are used in FE Windows */
  323. #define ES_VERTICAL                0x00400000        /* Not supported in RE 2.0/3.0 */
  324. #define    ES_NOIME                0x00080000
  325. #define ES_SELFIME                0x00040000
  326.  
  327. /* Edit control options */
  328. #define ECO_AUTOWORDSELECTION    0x00000001
  329. #define ECO_AUTOVSCROLL            0x00000040
  330. #define ECO_AUTOHSCROLL            0x00000080
  331. #define ECO_NOHIDESEL            0x00000100
  332. #define ECO_READONLY            0x00000800
  333. #define ECO_WANTRETURN            0x00001000
  334. #define ECO_SAVESEL                0x00008000
  335. #define ECO_SELECTIONBAR        0x01000000
  336. #define ECO_VERTICAL            0x00400000        /* FE specific */
  337.  
  338.  
  339. /* ECO operations */
  340. #define ECOOP_SET                0x0001
  341. #define ECOOP_OR                0x0002
  342. #define ECOOP_AND                0x0003
  343. #define ECOOP_XOR                0x0004
  344.  
  345. /* New word break function actions */
  346. #define WB_CLASSIFY            3
  347. #define WB_MOVEWORDLEFT        4
  348. #define WB_MOVEWORDRIGHT    5
  349. #define WB_LEFTBREAK        6
  350. #define WB_RIGHTBREAK        7
  351.  
  352. /* Far East specific flags */
  353. #define WB_MOVEWORDPREV        4
  354. #define WB_MOVEWORDNEXT        5
  355. #define WB_PREVBREAK        6
  356. #define WB_NEXTBREAK        7
  357.  
  358. #define PC_FOLLOWING        1
  359. #define    PC_LEADING            2
  360. #define    PC_OVERFLOW            3
  361. #define    PC_DELIMITER        4
  362. #define WBF_WORDWRAP        0x010
  363. #define WBF_WORDBREAK        0x020
  364. #define    WBF_OVERFLOW        0x040    
  365. #define WBF_LEVEL1            0x080
  366. #define    WBF_LEVEL2            0x100
  367. #define    WBF_CUSTOM            0x200
  368.  
  369. /* Far East specific flags */
  370. #define IMF_FORCENONE           0x0001
  371. #define IMF_FORCEENABLE         0x0002
  372. #define IMF_FORCEDISABLE        0x0004
  373. #define IMF_CLOSESTATUSWINDOW   0x0008
  374. #define IMF_VERTICAL            0x0020
  375. #define IMF_FORCEACTIVE         0x0040
  376. #define IMF_FORCEINACTIVE       0x0080
  377. #define IMF_FORCEREMEMBER       0x0100
  378. #define IMF_MULTIPLEEDIT        0x0400
  379.  
  380. /* Word break flags (used with WB_CLASSIFY) */
  381. #define WBF_CLASS            ((BYTE) 0x0F)
  382. #define WBF_ISWHITE            ((BYTE) 0x10)
  383. #define WBF_BREAKLINE        ((BYTE) 0x20)
  384. #define WBF_BREAKAFTER        ((BYTE) 0x40)
  385.  
  386.  
  387. /* new data types */
  388.  
  389. #ifdef _WIN32
  390. /* extended edit word break proc (character set aware) */
  391. typedef LONG (*EDITWORDBREAKPROCEX)(char *pchText, LONG cchText, BYTE bCharSet, INT action);
  392. #endif
  393.  
  394. /* All character format measurements are in twips */
  395. typedef struct _charformat
  396. {
  397.     UINT        cbSize;
  398.     DWORD        dwMask;
  399.     DWORD        dwEffects;
  400.     LONG        yHeight;
  401.     LONG        yOffset;
  402.     COLORREF    crTextColor;
  403.     BYTE        bCharSet;
  404.     BYTE        bPitchAndFamily;
  405.     char        szFaceName[LF_FACESIZE];
  406. } CHARFORMATA;
  407.  
  408. typedef struct _charformatw
  409. {
  410.     UINT        cbSize;
  411.     DWORD        dwMask;
  412.     DWORD        dwEffects;
  413.     LONG        yHeight;
  414.     LONG        yOffset;
  415.     COLORREF    crTextColor;
  416.     BYTE        bCharSet;
  417.     BYTE        bPitchAndFamily;
  418.     WCHAR        szFaceName[LF_FACESIZE];
  419. } CHARFORMATW;
  420.  
  421. #if (_RICHEDIT_VER >= 0x0200)
  422. #ifdef UNICODE
  423. #define CHARFORMAT CHARFORMATW
  424. #else
  425. #define CHARFORMAT CHARFORMATA
  426. #endif /* UNICODE */
  427. #else
  428. #define CHARFORMAT CHARFORMATA
  429. #endif /* _RICHEDIT_VER >= 0x0200 */
  430.  
  431. /* CHARFORMAT masks */
  432. #define CFM_BOLD        0x00000001
  433. #define CFM_ITALIC        0x00000002
  434. #define CFM_UNDERLINE    0x00000004
  435. #define CFM_STRIKEOUT    0x00000008
  436. #define CFM_PROTECTED    0x00000010
  437. #define CFM_LINK        0x00000020        /* Exchange hyperlink extension */
  438. #define CFM_SIZE        0x80000000
  439. #define CFM_COLOR        0x40000000
  440. #define CFM_FACE        0x20000000
  441. #define CFM_OFFSET        0x10000000
  442. #define CFM_CHARSET        0x08000000
  443.  
  444. /* CHARFORMAT effects */
  445. #define CFE_BOLD        0x0001
  446. #define CFE_ITALIC        0x0002
  447. #define CFE_UNDERLINE    0x0004
  448. #define CFE_STRIKEOUT    0x0008
  449. #define CFE_PROTECTED    0x0010
  450. #define CFE_LINK        0x0020
  451. #define CFE_AUTOCOLOR    0x40000000        /* NOTE: this corresponds to */
  452.                                         /* CFM_COLOR, which controls it */
  453. #define yHeightCharPtsMost 1638
  454.  
  455. /* EM_SETCHARFORMAT wParam masks */
  456. #define SCF_SELECTION        0x0001
  457. #define SCF_WORD            0x0002
  458. #define SCF_DEFAULT            0x0000        // Set default charformat or paraformat
  459. #define SCF_ALL                0x0004        // Not valid with SCF_SELECTION or SCF_WORD
  460. #define SCF_USEUIRULES        0x0008        // Modifier for SCF_SELECTION; says that
  461.                                         //  format came from a toolbar, etc., and
  462.                                         //  hence UI formatting rules should be
  463.                                         //  used instead of literal formatting
  464. #define SCF_ASSOCIATEFONT    0x0010        // Associate fontname with bCharSet (one
  465.                                         //  possible for each of Western, ME, FE,
  466.                                         //  Thai)
  467. #define SCF_NOKBUPDATE        0x0020        // Do not update the KB layput for this change
  468.                                         // even if autokeyboard is on.
  469. typedef struct _charrange
  470. {
  471.     LONG    cpMin;
  472.     LONG    cpMax;
  473. } CHARRANGE;
  474.  
  475. typedef struct _textrange
  476. {
  477.     CHARRANGE chrg;
  478.     LPSTR lpstrText;    /* allocated by caller, zero terminated by RichEdit */
  479. } TEXTRANGEA;
  480.  
  481. typedef struct _textrangew
  482. {
  483.     CHARRANGE chrg;
  484.     LPWSTR lpstrText;    /* allocated by caller, zero terminated by RichEdit */
  485. } TEXTRANGEW;
  486.  
  487. #if (_RICHEDIT_VER >= 0x0200)
  488. #ifdef UNICODE
  489. #define TEXTRANGE     TEXTRANGEW
  490. #else
  491. #define TEXTRANGE    TEXTRANGEA
  492. #endif /* UNICODE */
  493. #else
  494. #define TEXTRANGE    TEXTRANGEA
  495. #endif /* _RICHEDIT_VER >= 0x0200 */
  496.  
  497.  
  498. typedef DWORD (CALLBACK *EDITSTREAMCALLBACK)(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
  499.  
  500. typedef struct _editstream
  501. {
  502.     DWORD_PTR dwCookie;        /* user value passed to callback as first parameter */
  503.     DWORD      dwError;        /* last error */
  504.     EDITSTREAMCALLBACK pfnCallback;
  505. } EDITSTREAM;
  506.  
  507. /* Stream formats. Flags are all in low word, since high word gives
  508.    possible codepage choice. */
  509.  
  510. #define SF_TEXT            0x0001
  511. #define SF_RTF            0x0002
  512. #define SF_RTFNOOBJS    0x0003        /* Write only */
  513. #define SF_TEXTIZED        0x0004        /* Write only */
  514.  
  515. #define SF_UNICODE        0x0010        /* Unicode file (UCS2 little endian) */
  516. #define SF_USECODEPAGE    0x0020        /* CodePage given by high word */
  517. #define SF_NCRFORNONASCII 0x40        /* Output /uN for nonASCII */
  518.  
  519. /* Flag telling stream operations to operate on selection only */
  520. /* EM_STREAMIN  will replace current selection */
  521. /* EM_STREAMOUT will stream out current selection */
  522. #define SFF_SELECTION    0x8000
  523.  
  524. /* Flag telling stream operations to ignore some FE control words */
  525. /* having to do with FE word breaking and horiz vs vertical text. */
  526. /* Not used in RichEdit 2.0 and later    */
  527. #define SFF_PLAINRTF    0x4000
  528.  
  529. /* Flag telling file stream output (SFF_SELECTION flag not set) to persist */
  530. /* \viewscaleN control word. */
  531. #define SFF_PERSISTVIEWSCALE 0x2000
  532.  
  533. /* Flag telling file stream input with SFF_SELECTION flag not set not to */
  534. /* close the document */
  535. #define SFF_KEEPDOCINFO    0x1000
  536.  
  537. /* Flag telling stream operations to output in Pocket Word format */
  538. #define SFF_PWD            0x0800
  539.  
  540. /* 3-bit field specifying the value of N - 1 to use for \rtfN or \pwdN */
  541. #define SF_RTFVAL        0x0700
  542.  
  543. typedef struct _findtext
  544. {
  545.     CHARRANGE chrg;
  546.     LPCSTR lpstrText;
  547. } FINDTEXTA;
  548.  
  549. typedef struct _findtextw
  550. {
  551.     CHARRANGE chrg;
  552.     LPCWSTR lpstrText;
  553. } FINDTEXTW;
  554.  
  555. #if (_RICHEDIT_VER >= 0x0200)
  556. #ifdef UNICODE
  557. #define FINDTEXT    FINDTEXTW
  558. #else
  559. #define FINDTEXT    FINDTEXTA
  560. #endif /* UNICODE */
  561. #else
  562. #define FINDTEXT    FINDTEXTA
  563. #endif /* _RICHEDIT_VER >= 0x0200 */
  564.  
  565. typedef struct _findtextexa
  566. {
  567.     CHARRANGE chrg;
  568.     LPCSTR      lpstrText;
  569.     CHARRANGE chrgText;
  570. } FINDTEXTEXA;
  571.  
  572. typedef struct _findtextexw
  573. {
  574.     CHARRANGE chrg;
  575.     LPCWSTR      lpstrText;
  576.     CHARRANGE chrgText;
  577. } FINDTEXTEXW;
  578.  
  579. #if (_RICHEDIT_VER >= 0x0200)
  580. #ifdef UNICODE
  581. #define FINDTEXTEX    FINDTEXTEXW
  582. #else
  583. #define FINDTEXTEX    FINDTEXTEXA
  584. #endif /* UNICODE */
  585. #else
  586. #define FINDTEXTEX    FINDTEXTEXA
  587. #endif /* _RICHEDIT_VER >= 0x0200 */
  588.  
  589.  
  590. typedef struct _formatrange
  591. {
  592.     HDC hdc;
  593.     HDC hdcTarget;
  594.     RECT rc;
  595.     RECT rcPage;
  596.     CHARRANGE chrg;
  597. } FORMATRANGE;
  598.  
  599. /* All paragraph measurements are in twips */
  600.  
  601. #define MAX_TAB_STOPS 32
  602. #define lDefaultTab 720
  603.  
  604. /* This is a hack to make PARAFORMAT compatible with RE 1.0 */
  605. #define    wReserved    wEffects
  606.  
  607. typedef struct _paraformat
  608. {
  609.     UINT    cbSize;
  610.     DWORD    dwMask;
  611.     WORD    wNumbering;
  612.     WORD    wEffects;
  613.     LONG    dxStartIndent;
  614.     LONG    dxRightIndent;
  615.     LONG    dxOffset;
  616.     WORD    wAlignment;
  617.     SHORT    cTabCount;
  618.     LONG    rgxTabs[MAX_TAB_STOPS];
  619. } PARAFORMAT;
  620.  
  621. /* PARAFORMAT mask values */
  622. #define PFM_STARTINDENT            0x00000001
  623. #define PFM_RIGHTINDENT            0x00000002
  624. #define PFM_OFFSET                0x00000004
  625. #define PFM_ALIGNMENT            0x00000008
  626. #define PFM_TABSTOPS            0x00000010
  627. #define PFM_NUMBERING            0x00000020
  628. #define PFM_OFFSETINDENT        0x80000000
  629.  
  630. /* PARAFORMAT numbering options */
  631. #define PFN_BULLET        0x0001
  632.  
  633. /* PARAFORMAT alignment options */
  634. #define PFA_LEFT    0x0001
  635. #define PFA_RIGHT    0x0002
  636. #define PFA_CENTER    0x0003
  637.  
  638. /* CHARFORMAT2 and PARAFORMAT2 structures */
  639.  
  640. #ifdef __cplusplus
  641.  
  642. struct CHARFORMAT2W : _charformatw
  643. {
  644.     WORD        wWeight;            /* Font weight (LOGFONT value)        */
  645.     SHORT        sSpacing;            /* Amount to space between letters    */
  646.     COLORREF    crBackColor;        /* Background color                    */
  647.     LCID        lcid;                /* Locale ID                        */
  648.     DWORD        dwReserved;            /* Reserved. Must be 0                */
  649.     SHORT        sStyle;                /* Style handle                        */
  650.     WORD        wKerning;            /* Twip size above which to kern char pair*/
  651.     BYTE        bUnderlineType;        /* Underline type                    */
  652.     BYTE        bAnimation;            /* Animated text like marching ants */
  653.     BYTE        bRevAuthor;            /* Revision author index            */
  654. };
  655.  
  656. struct CHARFORMAT2A : _charformat
  657. {
  658.     WORD        wWeight;            /* Font weight (LOGFONT value)        */
  659.     SHORT        sSpacing;            /* Amount to space between letters    */
  660.     COLORREF    crBackColor;        /* Background color                    */
  661.     LCID        lcid;                /* Locale ID                        */
  662.     DWORD        dwReserved;            /* Reserved. Must be 0                */
  663.     SHORT        sStyle;                /* Style handle                        */
  664.     WORD        wKerning;            /* Twip size above which to kern char pair*/
  665.     BYTE        bUnderlineType;        /* Underline type                    */
  666.     BYTE        bAnimation;            /* Animated text like marching ants    */
  667.     BYTE        bRevAuthor;            /* Revision author index            */
  668. };
  669.  
  670. #else    /* regular C-style  */
  671.  
  672. typedef struct _charformat2w
  673. {
  674.     UINT        cbSize;
  675.     DWORD        dwMask;
  676.     DWORD        dwEffects;
  677.     LONG        yHeight;
  678.     LONG        yOffset;            /* > 0 for superscript, < 0 for subscript */
  679.     COLORREF    crTextColor;
  680.     BYTE        bCharSet;
  681.     BYTE        bPitchAndFamily;
  682.     WCHAR        szFaceName[LF_FACESIZE];
  683.     WORD        wWeight;            /* Font weight (LOGFONT value)        */
  684.     SHORT        sSpacing;            /* Amount to space between letters    */
  685.     COLORREF    crBackColor;        /* Background color                    */
  686.     LCID        lcid;                /* Locale ID                        */
  687.     DWORD        dwReserved;            /* Reserved. Must be 0                */
  688.     SHORT        sStyle;                /* Style handle                        */
  689.     WORD        wKerning;            /* Twip size above which to kern char pair*/
  690.     BYTE        bUnderlineType;        /* Underline type                    */
  691.     BYTE        bAnimation;            /* Animated text like marching ants    */
  692.     BYTE        bRevAuthor;            /* Revision author index            */
  693.     BYTE        bReserved1;
  694. } CHARFORMAT2W;
  695.  
  696. typedef struct _charformat2a
  697. {
  698.     UINT        cbSize;
  699.     DWORD        dwMask;
  700.     DWORD        dwEffects;
  701.     LONG        yHeight;
  702.     LONG        yOffset;            /* > 0 for superscript, < 0 for subscript */
  703.     COLORREF    crTextColor;
  704.     BYTE        bCharSet;
  705.     BYTE        bPitchAndFamily;
  706.     char        szFaceName[LF_FACESIZE];
  707.     WORD        wWeight;            /* Font weight (LOGFONT value)        */
  708.     SHORT        sSpacing;            /* Amount to space between letters    */
  709.     COLORREF    crBackColor;        /* Background color                    */
  710.     LCID        lcid;                /* Locale ID                        */
  711.     DWORD        dwReserved;            /* Reserved. Must be 0                */
  712.     SHORT        sStyle;                /* Style handle                        */
  713.     WORD        wKerning;            /* Twip size above which to kern char pair*/
  714.     BYTE        bUnderlineType;        /* Underline type                    */
  715.     BYTE        bAnimation;            /* Animated text like marching ants    */
  716.     BYTE        bRevAuthor;            /* Revision author index            */
  717. } CHARFORMAT2A;
  718.  
  719. #endif /* C++ */
  720.  
  721. #ifdef UNICODE
  722. #define CHARFORMAT2    CHARFORMAT2W
  723. #else
  724. #define CHARFORMAT2 CHARFORMAT2A
  725. #endif
  726.  
  727. #define CHARFORMATDELTA        (sizeof(CHARFORMAT2) - sizeof(CHARFORMAT))
  728.  
  729.  
  730. /* CHARFORMAT and PARAFORMAT "ALL" masks
  731.    CFM_COLOR mirrors CFE_AUTOCOLOR, a little hack to easily deal with autocolor*/
  732.  
  733. #define CFM_EFFECTS (CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_COLOR | \
  734.                      CFM_STRIKEOUT | CFE_PROTECTED | CFM_LINK)
  735. #define CFM_ALL (CFM_EFFECTS | CFM_SIZE | CFM_FACE | CFM_OFFSET | CFM_CHARSET)
  736.  
  737. #define    PFM_ALL (PFM_STARTINDENT | PFM_RIGHTINDENT | PFM_OFFSET    | \
  738.                  PFM_ALIGNMENT   | PFM_TABSTOPS    | PFM_NUMBERING | \
  739.                  PFM_OFFSETINDENT| PFM_RTLPARA)
  740.  
  741. /* New masks and effects -- a parenthesized asterisk indicates that
  742.    the data is stored by RichEdit 2.0/3.0, but not displayed */
  743.  
  744. #define CFM_SMALLCAPS        0x0040            /* (*)    */
  745. #define    CFM_ALLCAPS            0x0080            /* Displayed by 3.0    */
  746. #define    CFM_HIDDEN            0x0100            /* Hidden by 3.0 */
  747. #define    CFM_OUTLINE            0x0200            /* (*)    */
  748. #define    CFM_SHADOW            0x0400            /* (*)    */
  749. #define    CFM_EMBOSS            0x0800            /* (*)    */
  750. #define    CFM_IMPRINT            0x1000            /* (*)    */
  751. #define CFM_DISABLED        0x2000
  752. #define    CFM_REVISED            0x4000
  753.  
  754. #define CFM_BACKCOLOR        0x04000000
  755. #define CFM_LCID            0x02000000
  756. #define    CFM_UNDERLINETYPE    0x00800000        /* Many displayed by 3.0 */
  757. #define    CFM_WEIGHT            0x00400000
  758. #define CFM_SPACING            0x00200000        /* Displayed by 3.0    */
  759. #define CFM_KERNING            0x00100000        /* (*)    */
  760. #define CFM_STYLE            0x00080000        /* (*)    */
  761. #define CFM_ANIMATION        0x00040000        /* (*)    */
  762. #define CFM_REVAUTHOR        0x00008000
  763.  
  764. #define CFE_SUBSCRIPT        0x00010000        /* Superscript and subscript are */
  765. #define CFE_SUPERSCRIPT        0x00020000        /*  mutually exclusive             */
  766.  
  767. #define CFM_SUBSCRIPT        CFE_SUBSCRIPT | CFE_SUPERSCRIPT
  768. #define CFM_SUPERSCRIPT        CFM_SUBSCRIPT
  769.  
  770. #define    CFM_EFFECTS2 (CFM_EFFECTS | CFM_DISABLED | CFM_SMALLCAPS | CFM_ALLCAPS \
  771.                     | CFM_HIDDEN  | CFM_OUTLINE | CFM_SHADOW | CFM_EMBOSS \
  772.                     | CFM_IMPRINT | CFM_DISABLED | CFM_REVISED \
  773.                     | CFM_SUBSCRIPT | CFM_SUPERSCRIPT | CFM_BACKCOLOR)
  774.  
  775. #define CFM_ALL2     (CFM_ALL | CFM_EFFECTS2 | CFM_BACKCOLOR | CFM_LCID \
  776.                     | CFM_UNDERLINETYPE | CFM_WEIGHT | CFM_REVAUTHOR \
  777.                     | CFM_SPACING | CFM_KERNING | CFM_STYLE | CFM_ANIMATION)
  778.  
  779. #define    CFE_SMALLCAPS        CFM_SMALLCAPS
  780. #define    CFE_ALLCAPS            CFM_ALLCAPS
  781. #define    CFE_HIDDEN            CFM_HIDDEN
  782. #define    CFE_OUTLINE            CFM_OUTLINE
  783. #define    CFE_SHADOW            CFM_SHADOW
  784. #define    CFE_EMBOSS            CFM_EMBOSS
  785. #define    CFE_IMPRINT            CFM_IMPRINT
  786. #define    CFE_DISABLED        CFM_DISABLED
  787. #define    CFE_REVISED            CFM_REVISED
  788.  
  789. /* NOTE: CFE_AUTOCOLOR and CFE_AUTOBACKCOLOR correspond to CFM_COLOR and
  790.    CFM_BACKCOLOR, respectively, which control them */
  791. #define CFE_AUTOBACKCOLOR    CFM_BACKCOLOR
  792.  
  793. /* Underline types. RE 1.0 displays only CFU_UNDERLINE */
  794. #define CFU_CF1UNDERLINE    0xFF    /* map charformat's bit underline to CF2.*/
  795. #define CFU_INVERT            0xFE    /* For IME composition fake a selection.*/
  796. #define CFU_UNDERLINEHAIRLINE    10    /* (*) displayed as ordinary underline    */
  797. #define CFU_UNDERLINETHICK        9
  798. #define CFU_UNDERLINEWAVE        8
  799. #define    CFU_UNDERLINEDASHDOTDOT    7
  800. #define    CFU_UNDERLINEDASHDOT    6
  801. #define    CFU_UNDERLINEDASH        5
  802. #define    CFU_UNDERLINEDOTTED        4
  803. #define    CFU_UNDERLINEDOUBLE        3    /* (*) displayed as ordinary underline    */
  804. #define CFU_UNDERLINEWORD        2    /* (*) displayed as ordinary underline    */
  805. #define CFU_UNDERLINE            1
  806. #define CFU_UNDERLINENONE        0
  807.  
  808. #ifdef __cplusplus
  809. struct PARAFORMAT2 : _paraformat
  810. {
  811.     LONG    dySpaceBefore;            /* Vertical spacing before para            */
  812.     LONG    dySpaceAfter;            /* Vertical spacing after para            */    
  813.     LONG    dyLineSpacing;            /* Line spacing depending on Rule        */
  814.     SHORT    sStyle;                    /* Style handle                            */
  815.     BYTE    bLineSpacingRule;        /* Rule for line spacing (see tom.doc)    */
  816.     BYTE    bOutlineLevel;            /* Outline level                        */
  817.     WORD    wShadingWeight;            /* Shading in hundredths of a per cent    */
  818.     WORD    wShadingStyle;            /* Nibble 0: style, 1: cfpat, 2: cbpat    */
  819.     WORD    wNumberingStart;        /* Starting value for numbering            */
  820.     WORD    wNumberingStyle;        /* Alignment, roman/arabic, (), ), ., etc.*/
  821.     WORD    wNumberingTab;            /* Space bet FirstIndent & 1st-line text*/
  822.     WORD    wBorderSpace;            /* Border-text spaces (nbl/bdr in pts)    */
  823.     WORD    wBorderWidth;            /* Pen widths (nbl/bdr in half pts)        */
  824.     WORD    wBorders;                /* Border styles (nibble/border)        */
  825. };
  826.  
  827. #else    /* regular C-style    */
  828.  
  829. typedef struct _paraformat2
  830. {
  831.     UINT    cbSize;
  832.     DWORD    dwMask;
  833.     WORD    wNumbering;
  834.     WORD    wReserved;
  835.     LONG    dxStartIndent;
  836.     LONG    dxRightIndent;
  837.     LONG    dxOffset;
  838.     WORD    wAlignment;
  839.     SHORT    cTabCount;
  840.     LONG    rgxTabs[MAX_TAB_STOPS];
  841.      LONG    dySpaceBefore;            /* Vertical spacing before para            */
  842.     LONG    dySpaceAfter;            /* Vertical spacing after para            */
  843.     LONG    dyLineSpacing;            /* Line spacing depending on Rule        */
  844.     SHORT    sStyle;                    /* Style handle                            */
  845.     BYTE    bLineSpacingRule;        /* Rule for line spacing (see tom.doc)    */
  846.     BYTE    bOutlineLevel;            /* Outline Level                        */
  847.     WORD    wShadingWeight;            /* Shading in hundredths of a per cent    */
  848.     WORD    wShadingStyle;            /* Byte 0: style, nib 2: cfpat, 3: cbpat*/
  849.     WORD    wNumberingStart;        /* Starting value for numbering            */    
  850.     WORD    wNumberingStyle;        /* Alignment, Roman/Arabic, (), ), ., etc.*/
  851.     WORD    wNumberingTab;            /* Space bet 1st indent and 1st-line text*/
  852.     WORD    wBorderSpace;            /* Border-text spaces (nbl/bdr in pts)    */
  853.     WORD    wBorderWidth;            /* Pen widths (nbl/bdr in half twips)    */
  854.     WORD    wBorders;                /* Border styles (nibble/border)        */
  855. } PARAFORMAT2;
  856.  
  857. #endif /* C++    */
  858.  
  859.  
  860. /* PARAFORMAT 2.0 masks and effects */
  861.  
  862. #define PFM_SPACEBEFORE            0x00000040
  863. #define PFM_SPACEAFTER            0x00000080
  864. #define PFM_LINESPACING            0x00000100
  865. #define    PFM_STYLE                0x00000400
  866. #define PFM_BORDER                0x00000800    /* (*)    */
  867. #define PFM_SHADING                0x00001000    /* (*)    */
  868. #define PFM_NUMBERINGSTYLE        0x00002000    /* RE 3.0    */
  869. #define PFM_NUMBERINGTAB        0x00004000    /* RE 3.0    */
  870. #define PFM_NUMBERINGSTART        0x00008000    /* RE 3.0    */
  871.  
  872. #define PFM_RTLPARA                0x00010000
  873. #define PFM_KEEP                0x00020000    /* (*)    */
  874. #define PFM_KEEPNEXT            0x00040000    /* (*)    */
  875. #define PFM_PAGEBREAKBEFORE        0x00080000    /* (*)    */
  876. #define PFM_NOLINENUMBER        0x00100000    /* (*)    */
  877. #define PFM_NOWIDOWCONTROL        0x00200000    /* (*)    */
  878. #define PFM_DONOTHYPHEN            0x00400000    /* (*)    */
  879. #define PFM_SIDEBYSIDE            0x00800000    /* (*)    */
  880. #define PFM_TABLE                0x40000000    /* RE 3.0 */
  881.  
  882. // The following three properties are read only
  883. #define PFM_COLLAPSED            0x01000000    /* RE 3.0 */
  884. #define PFM_OUTLINELEVEL        0x02000000    /* RE 3.0 */
  885. #define PFM_BOX                    0x04000000    /* RE 3.0 */
  886.  
  887.  
  888. /* Note: PARAFORMAT has no effects */
  889. #define PFM_EFFECTS (PFM_RTLPARA | PFM_KEEP | PFM_KEEPNEXT | PFM_TABLE \
  890.                     | PFM_PAGEBREAKBEFORE | PFM_NOLINENUMBER  \
  891.                     | PFM_NOWIDOWCONTROL | PFM_DONOTHYPHEN | PFM_SIDEBYSIDE \
  892.                     | PFM_TABLE)
  893.  
  894. #define PFM_ALL2    (PFM_ALL | PFM_EFFECTS | PFM_SPACEBEFORE | PFM_SPACEAFTER \
  895.                     | PFM_LINESPACING | PFM_STYLE | PFM_SHADING | PFM_BORDER \
  896.                     | PFM_NUMBERINGTAB | PFM_NUMBERINGSTART | PFM_NUMBERINGSTYLE)
  897.  
  898. #define PFE_RTLPARA                (PFM_RTLPARA         >> 16)
  899. #define PFE_KEEP                (PFM_KEEP             >> 16)    /* (*)    */
  900. #define PFE_KEEPNEXT            (PFM_KEEPNEXT         >> 16)    /* (*)    */
  901. #define PFE_PAGEBREAKBEFORE        (PFM_PAGEBREAKBEFORE >> 16)    /* (*)    */
  902. #define PFE_NOLINENUMBER        (PFM_NOLINENUMBER     >> 16)    /* (*)    */
  903. #define PFE_NOWIDOWCONTROL        (PFM_NOWIDOWCONTROL     >> 16)    /* (*)    */
  904. #define PFE_DONOTHYPHEN            (PFM_DONOTHYPHEN      >> 16)    /* (*)    */
  905. #define PFE_SIDEBYSIDE            (PFM_SIDEBYSIDE         >> 16)    /* (*)    */
  906.  
  907. // The following four effects are read only
  908. #define PFE_OUTLINELEVEL        (PFM_OUTLINELEVEL     >> 16)    /* (+)    */
  909. #define PFE_COLLAPSED            (PFM_COLLAPSED         >> 16)    /* (+)    */
  910. #define PFE_BOX                    (PFM_BOX             >> 16)    /* (+)    */
  911. #define PFE_TABLE                0x4000        /* Para is a table row. RE 3.0 */
  912.  
  913. /* PARAFORMAT2 wNumbering options (see also PFN_BULLET) */
  914. #define PFN_ARABIC        2        /* tomListNumberAsArabic:   0, 1, 2,    ...*/
  915. #define PFN_LCLETTER    3        /* tomListNumberAsLCLetter: a, b, c,    ...*/
  916. #define    PFN_UCLETTER    4        /* tomListNumberAsUCLetter: A, B, C,    ...*/
  917. #define    PFN_LCROMAN        5        /* tomListNumberAsLCRoman:  i, ii, iii,    ...*/
  918. #define    PFN_UCROMAN        6        /* tomListNumberAsUCRoman:  I, II, III,    ...*/
  919.  
  920. /* PARAFORMAT2 wNumberingStyle options */
  921. #define PFNS_PAREN        0x000    /* default, e.g.,                  1)    */
  922. #define    PFNS_PARENS        0x100    /* tomListParentheses/256, e.g., (1)    */
  923. #define PFNS_PERIOD        0x200    /* tomListPeriod/256, e.g.,          1.    */
  924. #define PFNS_PLAIN        0x300    /* tomListPlain/256, e.g.,          1        */
  925. #define PFNS_NONUMBER    0x400    /* Used for continuation w/o number        */
  926.  
  927. #define    PFA_JUSTIFY             4    /* New paragraph-alignment option 2.0 (*) */
  928. #define PFA_FULL_INTERWORD     4
  929. #define PFA_FULL_INTERLETTER 5
  930. #define PFA_FULL_SCALED         6
  931. #define    PFA_FULL_GLYPHS         7
  932. #define    PFA_SNAP_GRID         8
  933.  
  934. /* Notification structures */
  935.  
  936. #ifndef WM_NOTIFY
  937. #define WM_NOTIFY        0x004E
  938.  
  939. typedef struct _nmhdr
  940. {
  941.     HWND    hwndFrom;
  942.     UINT    idFrom;
  943.     UINT    code;
  944. } NMHDR;
  945. #endif  /* !WM_NOTIFY */
  946.  
  947. typedef struct _msgfilter
  948. {
  949.     NMHDR    nmhdr;
  950.     UINT    msg;
  951.     WPARAM    wParam;
  952.     LPARAM    lParam;
  953. } MSGFILTER;
  954.  
  955. typedef struct _reqresize
  956. {
  957.     NMHDR nmhdr;
  958.     RECT rc;
  959. } REQRESIZE;
  960.  
  961. typedef struct _selchange
  962. {
  963.     NMHDR nmhdr;
  964.     CHARRANGE chrg;
  965.     WORD seltyp;
  966. } SELCHANGE;
  967.  
  968. #define SEL_EMPTY        0x0000
  969. #define SEL_TEXT        0x0001
  970. #define SEL_OBJECT        0x0002
  971. #define SEL_MULTICHAR    0x0004
  972. #define SEL_MULTIOBJECT    0x0008
  973.  
  974. /* Used with IRichEditOleCallback::GetContextMenu, this flag will be
  975.    passed as a "selection type".  It indicates that a context menu for
  976.    a right-mouse drag drop should be generated.  The IOleObject parameter
  977.    will really be the IDataObject for the drop
  978.  */
  979. #define GCM_RIGHTMOUSEDROP  0x8000
  980.  
  981. typedef struct _endropfiles
  982. {
  983.     NMHDR nmhdr;
  984.     HANDLE hDrop;
  985.     LONG cp;
  986.     BOOL fProtected;
  987. } ENDROPFILES;
  988.  
  989. typedef struct _enprotected
  990. {
  991.     NMHDR nmhdr;
  992.     UINT msg;
  993.     WPARAM wParam;
  994.     LPARAM lParam;
  995.     CHARRANGE chrg;
  996. } ENPROTECTED;
  997.  
  998. typedef struct _ensaveclipboard
  999. {
  1000.     NMHDR nmhdr;
  1001.     LONG cObjectCount;
  1002.     LONG cch;
  1003. } ENSAVECLIPBOARD;
  1004.  
  1005. #ifndef MACPORT
  1006. typedef struct _enoleopfailed
  1007. {
  1008.     NMHDR nmhdr;
  1009.     LONG iob;
  1010.     LONG lOper;
  1011.     HRESULT hr;
  1012. } ENOLEOPFAILED;
  1013. #endif
  1014.  
  1015. #define    OLEOP_DOVERB    1
  1016.  
  1017. typedef struct _objectpositions
  1018. {
  1019.     NMHDR nmhdr;
  1020.     LONG cObjectCount;
  1021.     LONG *pcpPositions;
  1022. } OBJECTPOSITIONS;
  1023.  
  1024. typedef struct _enlink
  1025. {
  1026.     NMHDR nmhdr;
  1027.     UINT msg;
  1028.     WPARAM wParam;
  1029.     LPARAM lParam;
  1030.     CHARRANGE chrg;
  1031. } ENLINK;
  1032.  
  1033. /* PenWin specific */
  1034. typedef struct _encorrecttext
  1035. {
  1036.     NMHDR nmhdr;
  1037.     CHARRANGE chrg;
  1038.     WORD seltyp;
  1039. } ENCORRECTTEXT;
  1040.  
  1041. /* Far East specific */
  1042. typedef struct _punctuation
  1043. {
  1044.     UINT    iSize;
  1045.     LPSTR    szPunctuation;
  1046. } PUNCTUATION;
  1047.  
  1048. /* Far East specific */
  1049. typedef struct _compcolor
  1050. {
  1051.     COLORREF crText;
  1052.     COLORREF crBackground;
  1053.     DWORD dwEffects;
  1054. }COMPCOLOR;
  1055.  
  1056.  
  1057. /* Clipboard formats - use as parameter to RegisterClipboardFormat() */
  1058. #define CF_RTF             TEXT("Rich Text Format")
  1059. #define CF_RTFNOOBJS     TEXT("Rich Text Format Without Objects")
  1060. #define CF_RETEXTOBJ     TEXT("RichEdit Text and Objects")
  1061.  
  1062. /* Paste Special */
  1063. typedef struct _repastespecial
  1064. {
  1065.     DWORD        dwAspect;
  1066.     DWORD_PTR    dwParam;
  1067. } REPASTESPECIAL;
  1068.  
  1069. /*    UndoName info */
  1070. typedef enum _undonameid
  1071. {
  1072.     UID_UNKNOWN     = 0,
  1073.     UID_TYPING        = 1,
  1074.     UID_DELETE         = 2,
  1075.     UID_DRAGDROP    = 3,
  1076.     UID_CUT            = 4,
  1077.     UID_PASTE        = 5
  1078. } UNDONAMEID;
  1079.  
  1080. /* Flags for the SETEXTEX data structure */
  1081. #define ST_DEFAULT        0
  1082. #define ST_KEEPUNDO        1
  1083. #define ST_SELECTION    2
  1084.  
  1085. /* EM_SETTEXTEX info; this struct is passed in the wparam of the message */
  1086. typedef struct _settextex
  1087. {
  1088.     DWORD    flags;            /* flags (see the ST_XXX defines            */
  1089.     UINT    codepage;        /* code page for translation (CP_ACP for sys default;
  1090.                                1200 for Unicode, -1 for control default    */
  1091. } SETTEXTEX;
  1092.  
  1093. /* Flags for the GETEXTEX data structure */
  1094. #define GT_DEFAULT        0
  1095. #define GT_USECRLF        1
  1096. #define GT_SELECTION    2
  1097.  
  1098. /* EM_GETTEXTEX info; this struct is passed in the wparam of the message */
  1099. typedef struct _gettextex
  1100. {
  1101.     DWORD    cb;                /* count of bytes in the string                */
  1102.     DWORD    flags;            /* flags (see the GT_XXX defines            */
  1103.     UINT    codepage;        /* code page for translation (CP_ACP for sys default,
  1104.                                1200 for Unicode, -1 for control default    */
  1105.     LPCSTR    lpDefaultChar;    /* replacement for unmappable chars            */
  1106.     LPBOOL    lpUsedDefChar;    /* pointer to flag set when def char used    */
  1107. } GETTEXTEX;
  1108.  
  1109. /* Flags for the GETTEXTLENGTHEX data structure                            */
  1110. #define GTL_DEFAULT        0    /* do the default (return # of chars)        */
  1111. #define GTL_USECRLF        1    /* compute answer using CRLFs for paragraphs*/
  1112. #define GTL_PRECISE        2    /* compute a precise answer                    */
  1113. #define GTL_CLOSE        4    /* fast computation of a "close" answer        */
  1114. #define GTL_NUMCHARS    8    /* return the number of characters            */
  1115. #define GTL_NUMBYTES    16    /* return the number of _bytes_                */
  1116.  
  1117. /* EM_GETTEXTLENGTHEX info; this struct is passed in the wparam of the msg */
  1118. typedef struct _gettextlengthex
  1119. {
  1120.     DWORD    flags;            /* flags (see GTL_XXX defines)                */
  1121.     UINT    codepage;        /* code page for translation (CP_ACP for default,
  1122.                                1200 for Unicode                            */
  1123. } GETTEXTLENGTHEX;
  1124.     
  1125. /* BiDi specific features */
  1126. typedef struct _bidioptions
  1127. {
  1128.     UINT    cbSize;
  1129.     WORD    wMask;
  1130.     WORD    wEffects; 
  1131. } BIDIOPTIONS;
  1132.  
  1133. /* BIDIOPTIONS masks */
  1134. #if (_RICHEDIT_VER == 0x0100)
  1135. #define BOM_DEFPARADIR            0x0001    /* Default paragraph direction (implies alignment) (obsolete) */
  1136. #define BOM_PLAINTEXT            0x0002    /* Use plain text layout (obsolete) */
  1137. #endif /* _RICHEDIT_VER == 0x0100 */
  1138. #define BOM_NEUTRALOVERRIDE        0x0004    /* Override neutral layout (obsolete) */
  1139. #define BOM_CONTEXTREADING        0x0008    /* Context reading order */
  1140. #define BOM_CONTEXTALIGNMENT    0x0010    /* Context alignment */
  1141.  
  1142. /* BIDIOPTIONS effects */
  1143. #if (_RICHEDIT_VER == 0x0100)
  1144. #define BOE_RTLDIR                0x0001    /* Default paragraph direction (implies alignment) (obsolete) */
  1145. #define BOE_PLAINTEXT            0x0002    /* Use plain text layout (obsolete) */
  1146. #endif /* _RICHEDIT_VER == 0x0100 */
  1147. #define BOE_NEUTRALOVERRIDE        0x0004    /* Override neutral layout (obsolete) */
  1148. #define BOE_CONTEXTREADING        0x0008    /* Context reading order */
  1149. #define BOE_CONTEXTALIGNMENT    0x0010    /* Context alignment */
  1150.  
  1151. /* Additional EM_FINDTEXT[EX] flags */
  1152. #define FR_MATCHDIAC                    0x20000000
  1153. #define FR_MATCHKASHIDA                 0x40000000
  1154. #define FR_MATCHALEFHAMZA               0x80000000
  1155.     
  1156. /* UNICODE embedding character */
  1157. #ifndef WCH_EMBEDDING
  1158. #define WCH_EMBEDDING (WCHAR)0xFFFC
  1159. #endif /* WCH_EMBEDDING */
  1160.         
  1161.  
  1162. #ifdef _WIN32
  1163. #include <poppack.h>
  1164. #elif !defined(RC_INVOKED)
  1165. #pragma pack()
  1166. #endif
  1167.  
  1168. #ifdef __cplusplus
  1169. }
  1170. #endif  /* __cplusplus */
  1171.  
  1172. #pragma option pop /*P_O_Pop*/
  1173. #endif /* !_RICHEDIT_ */
  1174.  
  1175.