1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
|
/*
* RICHEDIT.H
*
* Purpose:
* RICHEDIT v2.0-v6.0 public definitions
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*/
#ifndef _RICHEDIT_
#define _RICHEDIT_
#pragma once
#include <wtypes.h>
#include <objbase.h>
#ifdef _WIN32
#include <pshpack4.h>
#elif !defined(RC_INVOKED)
#pragma pack(4)
#endif
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
// To mimic older RichEdit behavior, set _RICHEDIT_VER to appropriate value
// Version 1.0 0x0100
// Version 2.0 0x0200
// Version 2.1 0x0210
#ifndef _RICHEDIT_VER
#define _RICHEDIT_VER 0x0800
#endif
#define cchTextLimitDefault 32767
#define MSFTEDIT_CLASS L"RICHEDIT50W"
// NOTE: MSFTEDIT.DLL only registers MSFTEDIT_CLASS. If an application wants
// to use the following RichEdit classes, it needs to load riched20.dll.
// Otherwise, CreateWindow with RICHEDIT_CLASS will fail.
// This also applies to any dialog that uses RICHEDIT_CLASS
// RichEdit 2.0 Window Class
// On Windows CE, avoid possible conflicts on Win95
#define CERICHEDIT_CLASSA "RichEditCEA"
#define CERICHEDIT_CLASSW L"RichEditCEW"
#define RICHEDIT_CLASSA "RichEdit20A"
#define RICHEDIT_CLASS10A "RICHEDIT" // Richedit 1.0
#ifndef MACPORT
#define RICHEDIT_CLASSW L"RichEdit20W"
#else //----------------------MACPORT
#define RICHEDIT_CLASSW TEXT("RichEdit20W") // MACPORT change
#endif // MACPORT
#if (_RICHEDIT_VER >= 0x0200 )
#ifdef UNICODE
#define RICHEDIT_CLASS RICHEDIT_CLASSW
#else
#define RICHEDIT_CLASS RICHEDIT_CLASSA
#endif // UNICODE
#else
#define RICHEDIT_CLASS RICHEDIT_CLASS10A
#endif // _RICHEDIT_VER >= 0x0200
// RichEdit messages
#ifndef WM_CONTEXTMENU
#define WM_CONTEXTMENU 0x007B
#endif
#ifndef WM_UNICHAR
#define WM_UNICHAR 0x0109
#endif
#ifndef WM_PRINTCLIENT
#define WM_PRINTCLIENT 0x0318
#endif
#ifndef EM_GETLIMITTEXT
#define EM_GETLIMITTEXT (WM_USER + 37)
#endif
#ifndef EM_POSFROMCHAR
#define EM_POSFROMCHAR (WM_USER + 38)
#define EM_CHARFROMPOS (WM_USER + 39)
#endif
#ifndef EM_SCROLLCARET
#define EM_SCROLLCARET (WM_USER + 49)
#endif
#define EM_CANPASTE (WM_USER + 50)
#define EM_DISPLAYBAND (WM_USER + 51)
#define EM_EXGETSEL (WM_USER + 52)
#define EM_EXLIMITTEXT (WM_USER + 53)
#define EM_EXLINEFROMCHAR (WM_USER + 54)
#define EM_EXSETSEL (WM_USER + 55)
#define EM_FINDTEXT (WM_USER + 56)
#define EM_FORMATRANGE (WM_USER + 57)
#define EM_GETCHARFORMAT (WM_USER + 58)
#define EM_GETEVENTMASK (WM_USER + 59)
#define EM_GETOLEINTERFACE (WM_USER + 60)
#define EM_GETPARAFORMAT (WM_USER + 61)
#define EM_GETSELTEXT (WM_USER + 62)
#define EM_HIDESELECTION (WM_USER + 63)
#define EM_PASTESPECIAL (WM_USER + 64)
#define EM_REQUESTRESIZE (WM_USER + 65)
#define EM_SELECTIONTYPE (WM_USER + 66)
#define EM_SETBKGNDCOLOR (WM_USER + 67)
#define EM_SETCHARFORMAT (WM_USER + 68)
#define EM_SETEVENTMASK (WM_USER + 69)
#define EM_SETOLECALLBACK (WM_USER + 70)
#define EM_SETPARAFORMAT (WM_USER + 71)
#define EM_SETTARGETDEVICE (WM_USER + 72)
#define EM_STREAMIN (WM_USER + 73)
#define EM_STREAMOUT (WM_USER + 74)
#define EM_GETTEXTRANGE (WM_USER + 75)
#define EM_FINDWORDBREAK (WM_USER + 76)
#define EM_SETOPTIONS (WM_USER + 77)
#define EM_GETOPTIONS (WM_USER + 78)
#define EM_FINDTEXTEX (WM_USER + 79)
#ifdef _WIN32
#define EM_GETWORDBREAKPROCEX (WM_USER + 80)
#define EM_SETWORDBREAKPROCEX (WM_USER + 81)
#endif
// RichEdit 2.0 messages
#define EM_SETUNDOLIMIT (WM_USER + 82)
#define EM_REDO (WM_USER + 84)
#define EM_CANREDO (WM_USER + 85)
#define EM_GETUNDONAME (WM_USER + 86)
#define EM_GETREDONAME (WM_USER + 87)
#define EM_STOPGROUPTYPING (WM_USER + 88)
#define EM_SETTEXTMODE (WM_USER + 89)
#define EM_GETTEXTMODE (WM_USER + 90)
// enum for use with EM_GET/SETTEXTMODE
typedef enum tagTextMode
{
TM_PLAINTEXT = 1,
TM_RICHTEXT = 2, // Default behavior
TM_SINGLELEVELUNDO = 4,
TM_MULTILEVELUNDO = 8, // Default behavior
TM_SINGLECODEPAGE = 16,
TM_MULTICODEPAGE = 32 // Default behavior
} TEXTMODE;
#define EM_AUTOURLDETECT (WM_USER + 91)
#if (_RICHEDIT_VER >= 0x0800)
#define AURL_ENABLEURL 1
#define AURL_ENABLEEMAILADDR 2
#define AURL_ENABLETELNO 4
#define AURL_ENABLEEAURLS 8
#define AURL_ENABLEDRIVELETTERS 16
#define AURL_DISABLEMIXEDLGC 32 // Disable mixed Latin Greek Cyrillic IDNs
#endif
#define EM_GETAUTOURLDETECT (WM_USER + 92)
#define EM_SETPALETTE (WM_USER + 93)
#define EM_GETTEXTEX (WM_USER + 94)
#define EM_GETTEXTLENGTHEX (WM_USER + 95)
#define EM_SHOWSCROLLBAR (WM_USER + 96)
#define EM_SETTEXTEX (WM_USER + 97)
// East Asia specific messages
#define EM_SETPUNCTUATION (WM_USER + 100)
#define EM_GETPUNCTUATION (WM_USER + 101)
#define EM_SETWORDWRAPMODE (WM_USER + 102)
#define EM_GETWORDWRAPMODE (WM_USER + 103)
#define EM_SETIMECOLOR (WM_USER + 104)
#define EM_GETIMECOLOR (WM_USER + 105)
#define EM_SETIMEOPTIONS (WM_USER + 106)
#define EM_GETIMEOPTIONS (WM_USER + 107)
#define EM_CONVPOSITION (WM_USER + 108)
#define EM_SETLANGOPTIONS (WM_USER + 120)
#define EM_GETLANGOPTIONS (WM_USER + 121)
#define EM_GETIMECOMPMODE (WM_USER + 122)
#define EM_FINDTEXTW (WM_USER + 123)
#define EM_FINDTEXTEXW (WM_USER + 124)
// RE3.0 FE messages
#define EM_RECONVERSION (WM_USER + 125)
#define EM_SETIMEMODEBIAS (WM_USER + 126)
#define EM_GETIMEMODEBIAS (WM_USER + 127)
// BiDi specific messages
#define EM_SETBIDIOPTIONS (WM_USER + 200)
#define EM_GETBIDIOPTIONS (WM_USER + 201)
#define EM_SETTYPOGRAPHYOPTIONS (WM_USER + 202)
#define EM_GETTYPOGRAPHYOPTIONS (WM_USER + 203)
// Extended edit style specific messages
#define EM_SETEDITSTYLE (WM_USER + 204)
#define EM_GETEDITSTYLE (WM_USER + 205)
// Extended edit style masks
#define SES_EMULATESYSEDIT 1
#define SES_BEEPONMAXTEXT 2
#define SES_EXTENDBACKCOLOR 4
#define SES_MAPCPS 8 // Obsolete (never used)
#if (_RICHEDIT_VER >= 0x0500)
#define SES_HYPERLINKTOOLTIPS 8
#endif
#define SES_EMULATE10 16 // Obsolete (never used)
#if (_RICHEDIT_VER >= 0x0700)
#define SES_DEFAULTLATINLIGA 16
#endif
#define SES_USECRLF 32 // Obsolete (never used)
#define SES_USEAIMM 64
#define SES_NOIME 128
#define SES_ALLOWBEEPS 256
#define SES_UPPERCASE 512
#define SES_LOWERCASE 1024
#define SES_NOINPUTSEQUENCECHK 2048
#define SES_BIDI 4096
#define SES_SCROLLONKILLFOCUS 8192
#define SES_XLTCRCRLFTOCR 16384
#define SES_DRAFTMODE 32768
#define SES_USECTF 0x00010000
#define SES_HIDEGRIDLINES 0x00020000
#define SES_USEATFONT 0x00040000
#define SES_CUSTOMLOOK 0x00080000
#define SES_LBSCROLLNOTIFY 0x00100000
#define SES_CTFALLOWEMBED 0x00200000
#define SES_CTFALLOWSMARTTAG 0x00400000
#define SES_CTFALLOWPROOFING 0x00800000
#if (_RICHEDIT_VER >= 0x0500)
#define SES_LOGICALCARET 0x01000000
#define SES_WORDDRAGDROP 0x02000000
#define SES_SMARTDRAGDROP 0x04000000
#define SES_MULTISELECT 0x08000000
#define SES_CTFNOLOCK 0x10000000
#define SES_NOEALINEHEIGHTADJUST 0x20000000
#define SES_MAX 0x20000000
#endif
// Options for EM_SETLANGOPTIONS and EM_GETLANGOPTIONS
#define IMF_AUTOKEYBOARD 0x0001
#define IMF_AUTOFONT 0x0002
#define IMF_IMECANCELCOMPLETE 0x0004 // High completes comp string when aborting, low cancels
#define IMF_IMEALWAYSSENDNOTIFY 0x0008
#define IMF_AUTOFONTSIZEADJUST 0x0010
#define IMF_UIFONTS 0x0020
#if (_RICHEDIT_VER >= 0x0800)
#define IMF_NOIMPLICITLANG 0x0040
#endif
#define IMF_DUALFONT 0x0080
#if (_RICHEDIT_VER >= 0x0800)
#define IMF_NOKBDLIDFIXUP 0x0200
#endif
#define IMF_NORTFFONTSUBSTITUTE 0x0400
#if (_RICHEDIT_VER >= 0x0800)
#define IMF_SPELLCHECKING 0x0800
#define IMF_TKBPREDICTION 0x1000
#endif
// Values for EM_GETIMECOMPMODE
#define ICM_NOTOPEN 0x0000
#define ICM_LEVEL3 0x0001
#define ICM_LEVEL2 0x0002
#define ICM_LEVEL2_5 0x0003
#define ICM_LEVEL2_SUI 0x0004
#define ICM_CTF 0x0005
// Options for EM_SETTYPOGRAPHYOPTIONS
#define TO_ADVANCEDTYPOGRAPHY 0x0001
#define TO_SIMPLELINEBREAK 0x0002
#define TO_DISABLECUSTOMTEXTOUT 0x0004
#define TO_ADVANCEDLAYOUT 0x0008
// Pegasus outline mode messages (RE 3.0)
// Outline mode message
#define EM_OUTLINE (WM_USER + 220)
// Message for getting and restoring scroll pos
#define EM_GETSCROLLPOS (WM_USER + 221)
#define EM_SETSCROLLPOS (WM_USER + 222)
// Change fontsize in current selection by wParam
#define EM_SETFONTSIZE (WM_USER + 223)
#define EM_GETZOOM (WM_USER + 224)
#define EM_SETZOOM (WM_USER + 225)
#define EM_GETVIEWKIND (WM_USER + 226)
#define EM_SETVIEWKIND (WM_USER + 227)
// RichEdit 4.0 messages
#define EM_GETPAGE (WM_USER + 228)
#define EM_SETPAGE (WM_USER + 229)
#define EM_GETHYPHENATEINFO (WM_USER + 230)
#define EM_SETHYPHENATEINFO (WM_USER + 231)
#define EM_GETPAGEROTATE (WM_USER + 235)
#define EM_SETPAGEROTATE (WM_USER + 236)
#define EM_GETCTFMODEBIAS (WM_USER + 237)
#define EM_SETCTFMODEBIAS (WM_USER + 238)
#define EM_GETCTFOPENSTATUS (WM_USER + 240)
#define EM_SETCTFOPENSTATUS (WM_USER + 241)
#define EM_GETIMECOMPTEXT (WM_USER + 242)
#define EM_ISIME (WM_USER + 243)
#define EM_GETIMEPROPERTY (WM_USER + 244)
// These messages control what rich edit does when it comes accross
// OLE objects during RTF stream in. Normally rich edit queries the client
// application only after OleLoad has been called. With these messages it is possible to
// set the rich edit control to a mode where it will query the client application before
// OleLoad is called
#define EM_GETQUERYRTFOBJ (WM_USER + 269)
#define EM_SETQUERYRTFOBJ (WM_USER + 270)
// EM_SETPAGEROTATE wparam values
#define EPR_0 0 // Text flows left to right and top to bottom
#define EPR_270 1 // Text flows top to bottom and right to left
#define EPR_180 2 // Text flows right to left and bottom to top
#define EPR_90 3 // Text flows bottom to top and left to right
#if (_RICHEDIT_VER >= 0x0800)
#define EPR_SE 5 // Text flows top to bottom and left to right (Mongolian text layout)
#endif
// EM_SETCTFMODEBIAS wparam values
#define CTFMODEBIAS_DEFAULT 0x0000
#define CTFMODEBIAS_FILENAME 0x0001
#define CTFMODEBIAS_NAME 0x0002
#define CTFMODEBIAS_READING 0x0003
#define CTFMODEBIAS_DATETIME 0x0004
#define CTFMODEBIAS_CONVERSATION 0x0005
#define CTFMODEBIAS_NUMERIC 0x0006
#define CTFMODEBIAS_HIRAGANA 0x0007
#define CTFMODEBIAS_KATAKANA 0x0008
#define CTFMODEBIAS_HANGUL 0x0009
#define CTFMODEBIAS_HALFWIDTHKATAKANA 0x000A
#define CTFMODEBIAS_FULLWIDTHALPHANUMERIC 0x000B
#define CTFMODEBIAS_HALFWIDTHALPHANUMERIC 0x000C
// EM_SETIMEMODEBIAS lparam values
#define IMF_SMODE_PLAURALCLAUSE 0x0001
#define IMF_SMODE_NONE 0x0002
// EM_GETIMECOMPTEXT wparam structure
typedef struct _imecomptext {
LONG cb; // count of bytes in the output buffer.
DWORD flags; // value specifying the composition string type.
// Currently only support ICT_RESULTREADSTR
} IMECOMPTEXT;
#define ICT_RESULTREADSTR 1
// Outline mode wparam values
#define EMO_EXIT 0 // Enter normal mode, lparam ignored
#define EMO_ENTER 1 // Enter outline mode, lparam ignored
#define EMO_PROMOTE 2 // LOWORD(lparam) == 0 ==>
// promote to body-text
// LOWORD(lparam) != 0 ==>
// promote/demote current selection
// by indicated number of levels
#define EMO_EXPAND 3 // HIWORD(lparam) = EMO_EXPANDSELECTION
// -> expands selection to level
// indicated in LOWORD(lparam)
// LOWORD(lparam) = -1/+1 corresponds
// to collapse/expand button presses
// in winword (other values are
// equivalent to having pressed these
// buttons more than once)
// HIWORD(lparam) = EMO_EXPANDDOCUMENT
// -> expands whole document to
// indicated level
#define EMO_MOVESELECTION 4 // LOWORD(lparam) != 0 -> move current
// selection up/down by indicated amount
#define EMO_GETVIEWMODE 5 // Returns VM_NORMAL or VM_OUTLINE
// EMO_EXPAND options
#define EMO_EXPANDSELECTION 0
#define EMO_EXPANDDOCUMENT 1
#define VM_NORMAL 4 // Agrees with RTF \viewkindN
#define VM_OUTLINE 2
#define VM_PAGE 9 // Screen page view (not print layout)
/// New messages as of Win8
#if (_RICHEDIT_VER >= 0x0800)
#define EM_INSERTTABLE (WM_USER + 232)
#pragma warning(push)
#pragma warning(disable:4214) // Microsoft extension -- Bitfield not int
// Data type defining table rows for EM_INSERTTABLE
typedef struct _tableRowParms
{ // EM_INSERTTABLE wparam is a (TABLEROWPARMS *)
BYTE cbRow; // Count of bytes in this structure
BYTE cbCell; // Count of bytes in TABLECELLPARMS
BYTE cCell; // Count of cells
BYTE cRow; // Count of rows
LONG dxCellMargin; // Cell left/right margin (\trgaph)
LONG dxIndent; // Row left (right if fRTL indent (similar to \trleft)
LONG dyHeight; // Row height (\trrh)
DWORD nAlignment:3; // Row alignment (like PARAFORMAT::bAlignment, \trql, trqr, \trqc)
DWORD fRTL:1; // Display cells in RTL order (\rtlrow)
DWORD fKeep:1; // Keep row together (\trkeep}
DWORD fKeepFollow:1; // Keep row on same page as following row (\trkeepfollow)
DWORD fWrap:1; // Wrap text to right/left (depending on bAlignment)
// (see \tdfrmtxtLeftN, \tdfrmtxtRightN)
DWORD fIdentCells:1; // lparam points at single struct valid for all cells
LONG cpStartRow; // cp where to insert table (-1 for selection cp)
// (can be used for either TRD by EM_GETTABLEPARMS)
BYTE bTableLevel; // Table nesting level (EM_GETTABLEPARMS only)
BYTE iCell; // Index of cell to insert/delete (EM_SETTABLEPARMS only)
} TABLEROWPARMS;
// Data type defining table cells for EM_INSERTTABLE
typedef struct _tableCellParms
{ // EM_INSERTTABLE lparam is a (TABLECELLPARMS *)
LONG dxWidth; // Cell width (\cellx)
WORD nVertAlign:2; // Vertical alignment (0/1/2 = top/center/bottom
// \clvertalt (def), \clvertalc, \clvertalb)
WORD fMergeTop:1; // Top cell for vertical merge (\clvmgf)
WORD fMergePrev:1; // Merge with cell above (\clvmrg)
WORD fVertical:1; // Display text top to bottom, right to left (\cltxtbrlv)
WORD fMergeStart:1; // Start set of horizontally merged cells (\clmgf)
WORD fMergeCont:1; // Merge with previous cell (\clmrg)
WORD wShading; // Shading in .01% (\clshdng) e.g., 10000 flips fore/back
SHORT dxBrdrLeft; // Left border width (\clbrdrl\brdrwN) (in twips)
SHORT dyBrdrTop; // Top border width (\clbrdrt\brdrwN)
SHORT dxBrdrRight; // Right border width (\clbrdrr\brdrwN)
SHORT dyBrdrBottom; // Bottom border width (\clbrdrb\brdrwN)
COLORREF crBrdrLeft; // Left border color (\clbrdrl\brdrcf)
COLORREF crBrdrTop; // Top border color (\clbrdrt\brdrcf)
COLORREF crBrdrRight; // Right border color (\clbrdrr\brdrcf)
COLORREF crBrdrBottom; // Bottom border color (\clbrdrb\brdrcf)
COLORREF crBackPat; // Background color (\clcbpat)
COLORREF crForePat; // Foreground color (\clcfpat)
} TABLECELLPARMS;
#pragma warning(pop)
#define EM_GETAUTOCORRECTPROC (WM_USER + 233)
#define EM_SETAUTOCORRECTPROC (WM_USER + 234)
#define EM_CALLAUTOCORRECTPROC (WM_USER + 255)
// AutoCorrect callback
typedef int (WINAPI *AutoCorrectProc)(LANGID langid, const wchar_t *pszBefore, wchar_t *pszAfter, LONG cchAfter, LONG *pcchReplaced);
#define ATP_NOCHANGE 0
#define ATP_CHANGE 1
#define ATP_NODELIMITER 2
#define ATP_REPLACEALLTEXT 4
#define EM_GETTABLEPARMS (WM_USER + 265)
#define EM_SETEDITSTYLEEX (WM_USER + 275)
#define EM_GETEDITSTYLEEX (WM_USER + 276)
// wparam values for EM_SETEDITSTYLEEX/EM_GETEDITSTYLEEX
// All unused bits are reserved.
#define SES_EX_NOTABLE 0x00000004
#define SES_EX_HANDLEFRIENDLYURL 0x00000100
#define SES_EX_NOTHEMING 0x00080000
#define SES_EX_NOACETATESELECTION 0x00100000
#define SES_EX_USESINGLELINE 0x00200000
#define SES_EX_MULTITOUCH 0x08000000 // Only works under Win8+
#define SES_EX_HIDETEMPFORMAT 0x10000000
#define SES_EX_USEMOUSEWPARAM 0x20000000 // Use wParam when handling WM_MOUSEMOVE message and do not call GetAsyncKeyState
#define EM_GETSTORYTYPE (WM_USER + 290)
#define EM_SETSTORYTYPE (WM_USER + 291)
#define EM_GETELLIPSISMODE (WM_USER + 305)
#define EM_SETELLIPSISMODE (WM_USER + 306)
// DWORD: *lparam for EM_GETELLIPSISMODE, lparam for EM_SETELLIPSISMODE
#define ELLIPSIS_MASK 0x00000003 // all meaningful bits
#define ELLIPSIS_NONE 0x00000000 // ellipsis disabled
#define ELLIPSIS_END 0x00000001 // ellipsis at the end (forced break)
#define ELLIPSIS_WORD 0x00000003 // ellipsis at the end (word break)
#define EM_SETTABLEPARMS (WM_USER + 307)
#define EM_GETTOUCHOPTIONS (WM_USER + 310)
#define EM_SETTOUCHOPTIONS (WM_USER + 311)
#define EM_INSERTIMAGE (WM_USER + 314)
#define EM_SETUIANAME (WM_USER + 320)
#define EM_GETELLIPSISSTATE (WM_USER + 322)
// Values for EM_SETTOUCHOPTIONS/EM_GETTOUCHOPTIONS
#define RTO_SHOWHANDLES 1
#define RTO_DISABLEHANDLES 2
#define RTO_READINGMODE 3
// lparam for EM_INSERTIMAGE
typedef struct tagRICHEDIT_IMAGE_PARAMETERS
{
LONG xWidth; // Units are HIMETRIC
LONG yHeight; // Units are HIMETRIC
LONG Ascent; // Units are HIMETRIC
LONG Type; // Valid values are TA_TOP, TA_BOTTOM and TA_BASELINE
LPCWSTR pwszAlternateText;
IStream * pIStream;
} RICHEDIT_IMAGE_PARAMETERS;
#endif
// New notifications
#define EN_MSGFILTER 0x0700
#define EN_REQUESTRESIZE 0x0701
#define EN_SELCHANGE 0x0702
#define EN_DROPFILES 0x0703
#define EN_PROTECTED 0x0704
#define EN_CORRECTTEXT 0x0705 // PenWin specific
#define EN_STOPNOUNDO 0x0706
#define EN_IMECHANGE 0x0707 // East Asia specific
#define EN_SAVECLIPBOARD 0x0708
#define EN_OLEOPFAILED 0x0709
#define EN_OBJECTPOSITIONS 0x070a
#define EN_LINK 0x070b
#define EN_DRAGDROPDONE 0x070c
#define EN_PARAGRAPHEXPANDED 0x070d
#define EN_PAGECHANGE 0x070e
#define EN_LOWFIRTF 0x070f
#define EN_ALIGNLTR 0x0710 // BiDi specific notification
#define EN_ALIGNRTL 0x0711 // BiDi specific notification
#if (_RICHEDIT_VER >= 0x0800)
#define EN_CLIPFORMAT 0x0712
#define EN_STARTCOMPOSITION 0x0713
#define EN_ENDCOMPOSITION 0x0714
// Notification structure for EN_ENDCOMPOSITION
typedef struct _endcomposition
{
NMHDR nmhdr;
DWORD dwCode;
} ENDCOMPOSITIONNOTIFY;
// Constants for ENDCOMPOSITIONNOTIFY dwCode
#define ECN_ENDCOMPOSITION 0x0001
#define ECN_NEWTEXT 0x0002
#endif
// Event notification masks
#define ENM_NONE 0x00000000
#define ENM_CHANGE 0x00000001
#define ENM_UPDATE 0x00000002
#define ENM_SCROLL 0x00000004
#define ENM_SCROLLEVENTS 0x00000008
#define ENM_DRAGDROPDONE 0x00000010
#define ENM_PARAGRAPHEXPANDED 0x00000020
#define ENM_PAGECHANGE 0x00000040
#if (_RICHEDIT_VER >= 0x0800)
#define ENM_CLIPFORMAT 0x00000080
#endif
#define ENM_KEYEVENTS 0x00010000
#define ENM_MOUSEEVENTS 0x00020000
#define ENM_REQUESTRESIZE 0x00040000
#define ENM_SELCHANGE 0x00080000
#define ENM_DROPFILES 0x00100000
#define ENM_PROTECTED 0x00200000
#define ENM_CORRECTTEXT 0x00400000 // PenWin specific
#define ENM_IMECHANGE 0x00800000 // Used by RE1.0 compatibility
#define ENM_LANGCHANGE 0x01000000
#define ENM_OBJECTPOSITIONS 0x02000000
#define ENM_LINK 0x04000000
#define ENM_LOWFIRTF 0x08000000
#if (_RICHEDIT_VER >= 0x0800)
#define ENM_STARTCOMPOSITION 0x10000000
#define ENM_ENDCOMPOSITION 0x20000000
#define ENM_GROUPTYPINGCHANGE 0x40000000
#define ENM_HIDELINKTOOLTIP 0x80000000
#endif
// New edit control styles
#define ES_SAVESEL 0x00008000
#define ES_SUNKEN 0x00004000
#define ES_DISABLENOSCROLL 0x00002000
// Same as WS_MAXIMIZE, but that doesn't make sense so we re-use the value
#define ES_SELECTIONBAR 0x01000000
// Same as ES_UPPERCASE, but re-used to completely disable OLE drag'n'drop
#define ES_NOOLEDRAGDROP 0x00000008
// Obsolete Edit Style
#define ES_EX_NOCALLOLEINIT 0x00000000 // Not supported in RE 2.0/3.0
// These flags are used in FE Windows
#define ES_VERTICAL 0x00400000 // Not supported in RE 2.0/3.0
#define ES_NOIME 0x00080000
#define ES_SELFIME 0x00040000
// Edit control options
#define ECO_AUTOWORDSELECTION 0x00000001
#define ECO_AUTOVSCROLL 0x00000040
#define ECO_AUTOHSCROLL 0x00000080
#define ECO_NOHIDESEL 0x00000100
#define ECO_READONLY 0x00000800
#define ECO_WANTRETURN 0x00001000
#define ECO_SAVESEL 0x00008000
#define ECO_SELECTIONBAR 0x01000000
#define ECO_VERTICAL 0x00400000 // FE specific
// ECO operations
#define ECOOP_SET 0x0001
#define ECOOP_OR 0x0002
#define ECOOP_AND 0x0003
#define ECOOP_XOR 0x0004
// New word break function actions
#define WB_CLASSIFY 3
#define WB_MOVEWORDLEFT 4
#define WB_MOVEWORDRIGHT 5
#define WB_LEFTBREAK 6
#define WB_RIGHTBREAK 7
// East Asia specific flags
#define WB_MOVEWORDPREV 4
#define WB_MOVEWORDNEXT 5
#define WB_PREVBREAK 6
#define WB_NEXTBREAK 7
#define PC_FOLLOWING 1
#define PC_LEADING 2
#define PC_OVERFLOW 3
#define PC_DELIMITER 4
#define WBF_WORDWRAP 0x010
#define WBF_WORDBREAK 0x020
#define WBF_OVERFLOW 0x040
#define WBF_LEVEL1 0x080
#define WBF_LEVEL2 0x100
#define WBF_CUSTOM 0x200
// East Asia specific flags
#define IMF_FORCENONE 0x0001
#define IMF_FORCEENABLE 0x0002
#define IMF_FORCEDISABLE 0x0004
#define IMF_CLOSESTATUSWINDOW 0x0008
#define IMF_VERTICAL 0x0020
#define IMF_FORCEACTIVE 0x0040
#define IMF_FORCEINACTIVE 0x0080
#define IMF_FORCEREMEMBER 0x0100
#define IMF_MULTIPLEEDIT 0x0400
// Word break flags (used with WB_CLASSIFY)
#define WBF_CLASS ((BYTE) 0x0F)
#define WBF_ISWHITE ((BYTE) 0x10)
#define WBF_BREAKLINE ((BYTE) 0x20)
#define WBF_BREAKAFTER ((BYTE) 0x40)
// Data types
#ifdef _WIN32
// Extended edit word break proc (character set aware)
typedef LONG (*EDITWORDBREAKPROCEX)(char *pchText, LONG cchText, BYTE bCharSet, INT action);
#endif
// All character format measurements are in twips
typedef struct _charformat
{
UINT cbSize;
DWORD dwMask;
DWORD dwEffects;
LONG yHeight;
LONG yOffset;
COLORREF crTextColor;
BYTE bCharSet;
BYTE bPitchAndFamily;
char szFaceName[LF_FACESIZE];
} CHARFORMATA;
typedef struct _charformatw
{
UINT cbSize;
DWORD dwMask;
DWORD dwEffects;
LONG yHeight;
LONG yOffset;
COLORREF crTextColor;
BYTE bCharSet;
BYTE bPitchAndFamily;
wchar_t szFaceName[LF_FACESIZE];
} CHARFORMATW;
#if (_RICHEDIT_VER >= 0x0200)
#ifdef UNICODE
#define CHARFORMAT CHARFORMATW
#else
#define CHARFORMAT CHARFORMATA
#endif // UNICODE
#else
#define CHARFORMAT CHARFORMATA
#endif // _RICHEDIT_VER >= 0x0200
// CHARFORMAT2 structure
#if defined(__cplusplus)
struct CHARFORMAT2W : _charformatw
{
WORD wWeight; // Font weight (LOGFONT value)
SHORT sSpacing; // Amount to space between letters
COLORREF crBackColor; // Background color
LCID lcid; // Locale ID
#if (_RICHEDIT_VER >= 0x0500)
union
{
DWORD dwReserved; // Name up to 5.0
DWORD dwCookie; // Client cookie opaque to RichEdit
};
#else
DWORD dwReserved; // Name up to 5.0
#endif
SHORT sStyle; // Style handle
WORD wKerning; // Twip size above which to kern char pair
BYTE bUnderlineType; // Underline type
BYTE bAnimation; // Animated text like marching ants
BYTE bRevAuthor; // Revision author index
#if (_RICHEDIT_VER >= 0x0800)
BYTE bUnderlineColor; // Underline color
#endif
};
struct CHARFORMAT2A : _charformat
{
WORD wWeight; // Font weight (LOGFONT value)
SHORT sSpacing; // Amount to space between letters
COLORREF crBackColor; // Background color
LCID lcid; // Locale ID
#if (_RICHEDIT_VER >= 0x0500)
union
{
DWORD dwReserved; // Name up to 5.0
DWORD dwCookie; // Client cookie opaque to RichEdit
};
#else
DWORD dwReserved; // Name up to 5.0
#endif
SHORT sStyle; // Style handle
WORD wKerning; // Twip size above which to kern char pair
BYTE bUnderlineType; // Underline type
BYTE bAnimation; // Animated text like marching ants
BYTE bRevAuthor; // Revision author index
#if (_RICHEDIT_VER >= 0x0800)
BYTE bUnderlineColor; // Underline color
#endif
};
#else // regular C-style
typedef struct _charformat2w
{
UINT cbSize;
DWORD dwMask;
DWORD dwEffects;
LONG yHeight;
LONG yOffset; // > 0 for superscript, < 0 for subscript
COLORREF crTextColor;
BYTE bCharSet;
BYTE bPitchAndFamily;
wchar_t szFaceName[LF_FACESIZE];
WORD wWeight; // Font weight (LOGFONT value)
SHORT sSpacing; // Amount to space between letters
COLORREF crBackColor; // Background color
LCID lcid; // Locale ID
#if (_RICHEDIT_VER >= 0x0500)
union
{
DWORD dwReserved; // Name up to 5.0
DWORD dwCookie; // Client cookie opaque to RichEdit
};
#else
DWORD dwReserved; // Name up to 5.0
#endif
SHORT sStyle; // Style handle
WORD wKerning; // Twip size above which to kern char pair
BYTE bUnderlineType; // Underline type
BYTE bAnimation; // Animated text like marching ants
BYTE bRevAuthor; // Revision author index
#if (_RICHEDIT_VER >= 0x0800)
BYTE bUnderlineColor; // Underline color
#endif
} CHARFORMAT2W;
typedef struct _charformat2a
{
UINT cbSize;
DWORD dwMask;
DWORD dwEffects;
LONG yHeight;
LONG yOffset; // > 0 for superscript, < 0 for subscript
COLORREF crTextColor;
BYTE bCharSet;
BYTE bPitchAndFamily;
char szFaceName[LF_FACESIZE];
WORD wWeight; // Font weight (LOGFONT value)
SHORT sSpacing; // Amount to space between letters
COLORREF crBackColor; // Background color
LCID lcid; // Locale ID
#if (_RICHEDIT_VER >= 0x0500)
union
{
DWORD dwReserved; // Name up to 5.0
DWORD dwCookie; // Client cookie opaque to RichEdit
};
#else
DWORD dwReserved; // Name up to 5.0
#endif
SHORT sStyle; // Style handle
WORD wKerning; // Twip size above which to kern char pair
BYTE bUnderlineType; // Underline type
BYTE bAnimation; // Animated text like marching ants
BYTE bRevAuthor; // Revision author index
#if (_RICHEDIT_VER >= 0x0800)
BYTE bUnderlineColor; // Underline color
#endif
} CHARFORMAT2A;
#endif // C++
#ifdef UNICODE
#define CHARFORMAT2 CHARFORMAT2W
#else
#define CHARFORMAT2 CHARFORMAT2A
#endif
#define CHARFORMATDELTA (sizeof(CHARFORMAT2) - sizeof(CHARFORMAT))
// CFM_COLOR mirrors CFE_AUTOCOLOR, a little hack to easily deal with autocolor
// CHARFORMAT masks
#define CFM_BOLD 0x00000001
#define CFM_ITALIC 0x00000002
#define CFM_UNDERLINE 0x00000004
#define CFM_STRIKEOUT 0x00000008
#define CFM_PROTECTED 0x00000010
#define CFM_LINK 0x00000020 // Exchange hyperlink extension
#define CFM_SIZE 0x80000000
#define CFM_COLOR 0x40000000
#define CFM_FACE 0x20000000
#define CFM_OFFSET 0x10000000
#define CFM_CHARSET 0x08000000
// CHARFORMAT effects
#define CFE_BOLD 0x00000001
#define CFE_ITALIC 0x00000002
#define CFE_UNDERLINE 0x00000004
#define CFE_STRIKEOUT 0x00000008
#define CFE_PROTECTED 0x00000010
#define CFE_LINK 0x00000020
#define CFE_AUTOCOLOR 0x40000000 // NOTE: this corresponds to
// CFM_COLOR, which controls it
// Masks and effects defined for CHARFORMAT2 -- an (*) indicates
// that the data is stored by RichEdit 2.0/3.0, but not displayed
#define CFM_SMALLCAPS 0x00000040 // (*)
#define CFM_ALLCAPS 0x00000080 // Displayed by 3.0
#define CFM_HIDDEN 0x00000100 // Hidden by 3.0
#define CFM_OUTLINE 0x00000200 // (*)
#define CFM_SHADOW 0x00000400 // (*)
#define CFM_EMBOSS 0x00000800 // (*)
#define CFM_IMPRINT 0x00001000 // (*)
#define CFM_DISABLED 0x00002000
#define CFM_REVISED 0x00004000
#define CFM_REVAUTHOR 0x00008000
#define CFE_SUBSCRIPT 0x00010000 // Superscript and subscript are
#define CFE_SUPERSCRIPT 0x00020000 // mutually exclusive
#define CFM_ANIMATION 0x00040000 // (*)
#define CFM_STYLE 0x00080000 // (*)
#define CFM_KERNING 0x00100000
#define CFM_SPACING 0x00200000 // Displayed by 3.0
#define CFM_WEIGHT 0x00400000
#define CFM_UNDERLINETYPE 0x00800000 // Many displayed by 3.0
#if (_RICHEDIT_VER >= 0x0600)
#define CFM_COOKIE 0x01000000 // RE 6.0
#endif
#define CFM_LCID 0x02000000
#define CFM_BACKCOLOR 0x04000000 // Higher mask bits defined above
#define CFM_SUBSCRIPT (CFE_SUBSCRIPT | CFE_SUPERSCRIPT)
#define CFM_SUPERSCRIPT CFM_SUBSCRIPT
// CHARFORMAT "ALL" masks
#define CFM_EFFECTS (CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_COLOR | \
CFM_STRIKEOUT | CFE_PROTECTED | CFM_LINK)
#define CFM_ALL (CFM_EFFECTS | CFM_SIZE | CFM_FACE | CFM_OFFSET | CFM_CHARSET)
#define CFM_EFFECTS2 (CFM_EFFECTS | CFM_DISABLED | CFM_SMALLCAPS | CFM_ALLCAPS \
| CFM_HIDDEN | CFM_OUTLINE | CFM_SHADOW | CFM_EMBOSS \
| CFM_IMPRINT | CFM_REVISED \
| CFM_SUBSCRIPT | CFM_SUPERSCRIPT | CFM_BACKCOLOR)
#if (_RICHEDIT_VER >= 0x0600)
#define CFM_ALL2 (CFM_ALL | CFM_EFFECTS2 | CFM_BACKCOLOR | CFM_LCID \
| CFM_UNDERLINETYPE | CFM_WEIGHT | CFM_REVAUTHOR \
| CFM_SPACING | CFM_KERNING | CFM_STYLE | CFM_ANIMATION \
| CFM_COOKIE)
#else
#define CFM_ALL2 (CFM_ALL | CFM_EFFECTS2 | CFM_BACKCOLOR | CFM_LCID \
| CFM_UNDERLINETYPE | CFM_WEIGHT | CFM_REVAUTHOR \
| CFM_SPACING | CFM_KERNING | CFM_STYLE | CFM_ANIMATION)
#endif
#define CFE_SMALLCAPS CFM_SMALLCAPS
#define CFE_ALLCAPS CFM_ALLCAPS
#define CFE_HIDDEN CFM_HIDDEN
#define CFE_OUTLINE CFM_OUTLINE
#define CFE_SHADOW CFM_SHADOW
#define CFE_EMBOSS CFM_EMBOSS
#define CFE_IMPRINT CFM_IMPRINT
#define CFE_DISABLED CFM_DISABLED
#define CFE_REVISED CFM_REVISED
// CFE_AUTOCOLOR and CFE_AUTOBACKCOLOR correspond to CFM_COLOR and
// CFM_BACKCOLOR, respectively, which control them
#define CFE_AUTOBACKCOLOR CFM_BACKCOLOR
#define CFM_FONTBOUND 0x00100000
#define CFM_LINKPROTECTED 0x00800000 // Word hyperlink field
#define CFM_EXTENDED 0x02000000
#define CFM_MATHNOBUILDUP 0x08000000
#define CFM_MATH 0x10000000
#define CFM_MATHORDINARY 0x20000000
#define CFM_ALLEFFECTS (CFM_EFFECTS2 | CFM_FONTBOUND | CFM_EXTENDED | CFM_MATHNOBUILDUP | CFM_MATH | CFM_MATHORDINARY)
#define CFE_FONTBOUND 0x00100000 // Font chosen by binder, not user
#define CFE_LINKPROTECTED 0x00800000
#define CFE_EXTENDED 0x02000000
#define CFE_MATHNOBUILDUP 0x08000000
#define CFE_MATH 0x10000000
#define CFE_MATHORDINARY 0x20000000
// Underline types. RE 1.0 displays only CFU_UNDERLINE
#define CFU_CF1UNDERLINE 0xFF // Map charformat's bit underline to CF2
#define CFU_INVERT 0xFE // For IME composition fake a selection
#define CFU_UNDERLINETHICKLONGDASH 18 // (*) display as dash
#define CFU_UNDERLINETHICKDOTTED 17 // (*) display as dot
#define CFU_UNDERLINETHICKDASHDOTDOT 16 // (*) display as dash dot dot
#define CFU_UNDERLINETHICKDASHDOT 15 // (*) display as dash dot
#define CFU_UNDERLINETHICKDASH 14 // (*) display as dash
#define CFU_UNDERLINELONGDASH 13 // (*) display as dash
#define CFU_UNDERLINEHEAVYWAVE 12 // (*) display as wave
#define CFU_UNDERLINEDOUBLEWAVE 11 // (*) display as wave
#define CFU_UNDERLINEHAIRLINE 10 // (*) display as single
#define CFU_UNDERLINETHICK 9
#define CFU_UNDERLINEWAVE 8
#define CFU_UNDERLINEDASHDOTDOT 7
#define CFU_UNDERLINEDASHDOT 6
#define CFU_UNDERLINEDASH 5
#define CFU_UNDERLINEDOTTED 4
#define CFU_UNDERLINEDOUBLE 3 // (*) display as single
#define CFU_UNDERLINEWORD 2 // (*) display as single
#define CFU_UNDERLINE 1
#define CFU_UNDERLINENONE 0
#define yHeightCharPtsMost 1638
// EM_SETCHARFORMAT wParam masks
#define SCF_SELECTION 0x0001
#define SCF_WORD 0x0002
#define SCF_DEFAULT 0x0000 // Set default charformat or paraformat
#define SCF_ALL 0x0004 // Not valid with SCF_SELECTION or SCF_WORD
#define SCF_USEUIRULES 0x0008 // Modifier for SCF_SELECTION; says that
// format came from a toolbar, etc., and
// hence UI formatting rules should be
// used instead of literal formatting
#define SCF_ASSOCIATEFONT 0x0010 // Associate fontname with bCharSet (one
// possible for each of Western, ME, FE,
// Thai)
#define SCF_NOKBUPDATE 0x0020 // Do not update KB layout for this change
// even if autokeyboard is on
#define SCF_ASSOCIATEFONT2 0x0040 // Associate plane-2 (surrogate) font
#if (_RICHEDIT_VER >= 0x0500)
#define SCF_SMARTFONT 0x0080 // Apply font only if it can handle script (5.0)
#define SCF_CHARREPFROMLCID 0x0100 // Get character repertoire from lcid (5.0)
#define SPF_DONTSETDEFAULT 0x0002 // Suppress setting default on empty control
#define SPF_SETDEFAULT 0x0004 // Set the default paraformat
#endif
typedef struct _charrange
{
LONG cpMin;
LONG cpMax;
} CHARRANGE;
typedef struct _textrange
{
CHARRANGE chrg;
LPSTR lpstrText; // Allocated by caller, zero terminated by RichEdit
} TEXTRANGEA;
typedef struct _textrangew
{
CHARRANGE chrg;
LPWSTR lpstrText; // Allocated by caller, zero terminated by RichEdit
} TEXTRANGEW;
#if (_RICHEDIT_VER >= 0x0200)
#ifdef UNICODE
#define TEXTRANGE TEXTRANGEW
#else
#define TEXTRANGE TEXTRANGEA
#endif // UNICODE
#else
#define TEXTRANGE TEXTRANGEA
#endif // _RICHEDIT_VER >= 0x0200
typedef DWORD (CALLBACK *EDITSTREAMCALLBACK)(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
typedef struct _editstream
{
DWORD_PTR dwCookie; // User value passed to callback as first parameter
DWORD dwError; // Last error
EDITSTREAMCALLBACK pfnCallback;
} EDITSTREAM;
// Stream formats. Flags are all in low word, since high word
// gives possible codepage choice.
#define SF_TEXT 0x0001
#define SF_RTF 0x0002
#define SF_RTFNOOBJS 0x0003 // Write only
#define SF_TEXTIZED 0x0004 // Write only
#define SF_UNICODE 0x0010 // Unicode file (UCS2 little endian)
#define SF_USECODEPAGE 0x0020 // CodePage given by high word
#define SF_NCRFORNONASCII 0x40 // Output \uN for nonASCII
#define SFF_WRITEXTRAPAR 0x80 // Output \par at end
// Flag telling stream operations to operate on selection only
// EM_STREAMIN replaces current selection
// EM_STREAMOUT streams out current selection
#define SFF_SELECTION 0x8000
// Flag telling stream operations to ignore some FE control words
// having to do with FE word breaking and horiz vs vertical text.
// Not used in RichEdit 2.0 and later
#define SFF_PLAINRTF 0x4000
// Flag telling file stream output (SFF_SELECTION flag not set) to persist
// \viewscaleN control word.
#define SFF_PERSISTVIEWSCALE 0x2000
// Flag telling file stream input with SFF_SELECTION flag not set not to
// close the document
#define SFF_KEEPDOCINFO 0x1000
// Flag telling stream operations to output in Pocket Word format
#define SFF_PWD 0x0800
// 3-bit field specifying the value of N - 1 to use for \rtfN or \pwdN
#define SF_RTFVAL 0x0700
typedef struct _findtext
{
CHARRANGE chrg;
LPCSTR lpstrText;
} FINDTEXTA;
typedef struct _findtextw
{
CHARRANGE chrg;
LPCWSTR lpstrText;
} FINDTEXTW;
#if (_RICHEDIT_VER >= 0x0200)
#ifdef UNICODE
#define FINDTEXT FINDTEXTW
#else
#define FINDTEXT FINDTEXTA
#endif // UNICODE
#else
#define FINDTEXT FINDTEXTA
#endif // _RICHEDIT_VER >= 0x0200
typedef struct _findtextexa
{
CHARRANGE chrg;
LPCSTR lpstrText;
CHARRANGE chrgText;
} FINDTEXTEXA;
typedef struct _findtextexw
{
CHARRANGE chrg;
LPCWSTR lpstrText;
CHARRANGE chrgText;
} FINDTEXTEXW;
#if (_RICHEDIT_VER >= 0x0200)
#ifdef UNICODE
#define FINDTEXTEX FINDTEXTEXW
#else
#define FINDTEXTEX FINDTEXTEXA
#endif // UNICODE
#else
#define FINDTEXTEX FINDTEXTEXA
#endif // _RICHEDIT_VER >= 0x0200
typedef struct _formatrange
{
HDC hdc;
HDC hdcTarget;
RECT rc;
RECT rcPage;
CHARRANGE chrg;
} FORMATRANGE;
// All paragraph measurements are in twips
#define MAX_TAB_STOPS 32
#define lDefaultTab 720
#define MAX_TABLE_CELLS 63
typedef struct _paraformat
{
UINT cbSize;
DWORD dwMask;
WORD wNumbering;
union
{
WORD wReserved;
WORD wEffects;
};
LONG dxStartIndent;
LONG dxRightIndent;
LONG dxOffset;
WORD wAlignment;
SHORT cTabCount;
LONG rgxTabs[MAX_TAB_STOPS];
} PARAFORMAT;
#ifdef __cplusplus
struct PARAFORMAT2 : _paraformat
{
LONG dySpaceBefore; // Vertical spacing before para
LONG dySpaceAfter; // Vertical spacing after para
LONG dyLineSpacing; // Line spacing depending on Rule
SHORT sStyle; // Style handle
BYTE bLineSpacingRule; // Rule for line spacing (see tom.doc)
BYTE bOutlineLevel; // Outline level
WORD wShadingWeight; // Shading in hundredths of a per cent
WORD wShadingStyle; // Nibble 0: style, 1: cfpat, 2: cbpat
WORD wNumberingStart; // Starting value for numbering
WORD wNumberingStyle; // Alignment, roman/arabic, (), ), ., etc.
WORD wNumberingTab; // Space bet FirstIndent & 1st-line text
WORD wBorderSpace; // Border-text spaces (nbl/bdr in pts)
WORD wBorderWidth; // Pen widths (nbl/bdr in half pts)
WORD wBorders; // Border styles (nibble/border)
};
#else // Regular C-style
typedef struct _paraformat2
{
UINT cbSize;
DWORD dwMask;
WORD wNumbering;
union
{
WORD wReserved;
WORD wEffects;
};
LONG dxStartIndent;
LONG dxRightIndent;
LONG dxOffset;
WORD wAlignment;
SHORT cTabCount;
LONG rgxTabs[MAX_TAB_STOPS];
LONG dySpaceBefore; // Vertical spacing before para
LONG dySpaceAfter; // Vertical spacing after para
LONG dyLineSpacing; // Line spacing depending on Rule
SHORT sStyle; // Style handle
BYTE bLineSpacingRule; // Rule for line spacing (see tom.doc)
BYTE bOutlineLevel; // Outline Level
WORD wShadingWeight; // Shading in hundredths of a per cent
WORD wShadingStyle; // Byte 0: style, nib 2: cfpat, 3: cbpat
WORD wNumberingStart; // Starting value for numbering
WORD wNumberingStyle; // Alignment, Roman/Arabic, (), ), ., etc.
WORD wNumberingTab; // Space bet 1st indent and 1st-line text
WORD wBorderSpace; // Border-text spaces (nbl/bdr in pts)
WORD wBorderWidth; // Pen widths (nbl/bdr in half twips)
WORD wBorders; // Border styles (nibble/border)
} PARAFORMAT2;
#endif // C++
// PARAFORMAT mask values
#define PFM_STARTINDENT 0x00000001
#define PFM_RIGHTINDENT 0x00000002
#define PFM_OFFSET 0x00000004
#define PFM_ALIGNMENT 0x00000008
#define PFM_TABSTOPS 0x00000010
#define PFM_NUMBERING 0x00000020
#define PFM_OFFSETINDENT 0x80000000
// PARAFORMAT 2.0 masks and effects
#define PFM_SPACEBEFORE 0x00000040
#define PFM_SPACEAFTER 0x00000080
#define PFM_LINESPACING 0x00000100
#define PFM_STYLE 0x00000400
#define PFM_BORDER 0x00000800 // (*)
#define PFM_SHADING 0x00001000 // (*)
#define PFM_NUMBERINGSTYLE 0x00002000 // RE 3.0
#define PFM_NUMBERINGTAB 0x00004000 // RE 3.0
#define PFM_NUMBERINGSTART 0x00008000 // RE 3.0
#define PFM_RTLPARA 0x00010000
#define PFM_KEEP 0x00020000 // (*)
#define PFM_KEEPNEXT 0x00040000 // (*)
#define PFM_PAGEBREAKBEFORE 0x00080000 // (*)
#define PFM_NOLINENUMBER 0x00100000 // (*)
#define PFM_NOWIDOWCONTROL 0x00200000 // (*)
#define PFM_DONOTHYPHEN 0x00400000 // (*)
#define PFM_SIDEBYSIDE 0x00800000 // (*)
// The following three properties are read only
#define PFM_COLLAPSED 0x01000000 // RE 3.0
#define PFM_OUTLINELEVEL 0x02000000 // RE 3.0
#define PFM_BOX 0x04000000 // RE 3.0
#define PFM_RESERVED2 0x08000000 // RE 4.0
#define PFM_TABLEROWDELIMITER 0x10000000 // RE 4.0
#define PFM_TEXTWRAPPINGBREAK 0x20000000 // RE 3.0
#define PFM_TABLE 0x40000000 // RE 3.0
// PARAFORMAT "ALL" masks
#define PFM_ALL (PFM_STARTINDENT | PFM_RIGHTINDENT | PFM_OFFSET | \
PFM_ALIGNMENT | PFM_TABSTOPS | PFM_NUMBERING | \
PFM_OFFSETINDENT| PFM_RTLPARA)
// Note: PARAFORMAT has no effects (BiDi RichEdit 1.0 does have PFE_RTLPARA)
#define PFM_EFFECTS (PFM_RTLPARA | PFM_KEEP | PFM_KEEPNEXT | PFM_TABLE \
| PFM_PAGEBREAKBEFORE | PFM_NOLINENUMBER \
| PFM_NOWIDOWCONTROL | PFM_DONOTHYPHEN | PFM_SIDEBYSIDE \
| PFM_TABLE | PFM_TABLEROWDELIMITER)
#define PFM_ALL2 (PFM_ALL | PFM_EFFECTS | PFM_SPACEBEFORE | PFM_SPACEAFTER \
| PFM_LINESPACING | PFM_STYLE | PFM_SHADING | PFM_BORDER \
| PFM_NUMBERINGTAB | PFM_NUMBERINGSTART | PFM_NUMBERINGSTYLE)
#define PFE_RTLPARA (PFM_RTLPARA >> 16)
#define PFE_KEEP (PFM_KEEP >> 16) // (*)
#define PFE_KEEPNEXT (PFM_KEEPNEXT >> 16) // (*)
#define PFE_PAGEBREAKBEFORE (PFM_PAGEBREAKBEFORE >> 16) // (*)
#define PFE_NOLINENUMBER (PFM_NOLINENUMBER >> 16) // (*)
#define PFE_NOWIDOWCONTROL (PFM_NOWIDOWCONTROL >> 16) // (*)
#define PFE_DONOTHYPHEN (PFM_DONOTHYPHEN >> 16) // (*)
#define PFE_SIDEBYSIDE (PFM_SIDEBYSIDE >> 16) // (*)
#define PFE_TEXTWRAPPINGBREAK (PFM_TEXTWRAPPINGBREAK>>16) // (*)
// The following four effects are read only
#define PFE_COLLAPSED (PFM_COLLAPSED >> 16) // (+)
#define PFE_BOX (PFM_BOX >> 16) // (+)
#define PFE_TABLE (PFM_TABLE >> 16) // Inside table row. RE 3.0
#define PFE_TABLEROWDELIMITER (PFM_TABLEROWDELIMITER>>16) // Table row start. RE 4.0
// PARAFORMAT numbering options
#define PFN_BULLET 1 // tomListBullet
// PARAFORMAT2 wNumbering options
#define PFN_ARABIC 2 // tomListNumberAsArabic: 0, 1, 2, ...
#define PFN_LCLETTER 3 // tomListNumberAsLCLetter: a, b, c, ...
#define PFN_UCLETTER 4 // tomListNumberAsUCLetter: A, B, C, ...
#define PFN_LCROMAN 5 // tomListNumberAsLCRoman: i, ii, iii, ...
#define PFN_UCROMAN 6 // tomListNumberAsUCRoman: I, II, III, ...
// PARAFORMAT2 wNumberingStyle options
#define PFNS_PAREN 0x000 // default, e.g., 1)
#define PFNS_PARENS 0x100 // tomListParentheses/256, e.g., (1)
#define PFNS_PERIOD 0x200 // tomListPeriod/256, e.g., 1.
#define PFNS_PLAIN 0x300 // tomListPlain/256, e.g., 1
#define PFNS_NONUMBER 0x400 // Used for continuation w/o number
#define PFNS_NEWNUMBER 0x8000 // Start new number with wNumberingStart
// (can be combined with other PFNS_xxx)
// PARAFORMAT alignment options
#define PFA_LEFT 1
#define PFA_RIGHT 2
#define PFA_CENTER 3
// PARAFORMAT2 alignment options
#define PFA_JUSTIFY 4 // New paragraph-alignment option 2.0 (*)
#define PFA_FULL_INTERWORD 4 // These are supported in 3.0 with advanced
// Notification structures
#ifndef WM_NOTIFY
#define WM_NOTIFY 0x004E
typedef struct _nmhdr
{
HWND hwndFrom;
UINT idFrom;
UINT code;
} NMHDR;
#endif // !WM_NOTIFY
typedef struct _msgfilter
{
NMHDR nmhdr;
UINT msg;
WPARAM wParam;
LPARAM lParam;
} MSGFILTER;
typedef struct _reqresize
{
NMHDR nmhdr;
RECT rc;
} REQRESIZE;
typedef struct _selchange
{
NMHDR nmhdr;
CHARRANGE chrg;
WORD seltyp;
} SELCHANGE;
#if (_RICHEDIT_VER >= 0x0800)
typedef struct _grouptypingchange
{
NMHDR nmhdr;
BOOL fGroupTyping;
} GROUPTYPINGCHANGE;
#endif
typedef struct _clipboardformat
{
NMHDR nmhdr;
CLIPFORMAT cf;
} CLIPBOARDFORMAT;
#define SEL_EMPTY 0x0000
#define SEL_TEXT 0x0001
#define SEL_OBJECT 0x0002
#define SEL_MULTICHAR 0x0004
#define SEL_MULTIOBJECT 0x0008
// Used with IRichEditOleCallback::GetContextMenu, this flag will be
// passed as a "selection type". It indicates that a context menu for
// a right-mouse drag drop should be generated. The IOleObject parameter
// will really be the IDataObject for the drop
#define GCM_RIGHTMOUSEDROP 0x8000
#if (_RICHEDIT_VER >= 0x0800)
typedef struct _getcontextmenuex
{
CHARRANGE chrg;
DWORD dwFlags;
POINT pt;
void* pvReserved;
} GETCONTEXTMENUEX;
// bits for GETCONTEXTMENUEX::dwFlags
#define GCMF_GRIPPER 0x00000001
#define GCMF_SPELLING 0x00000002 // pSpellingSuggestions is valid
// and points to the list of spelling suggestions
#define GCMF_TOUCHMENU 0x00004000
#define GCMF_MOUSEMENU 0x00002000
#endif
typedef struct _endropfiles
{
NMHDR nmhdr;
HANDLE hDrop;
LONG cp;
BOOL fProtected;
} ENDROPFILES;
typedef struct _enprotected
{
NMHDR nmhdr;
UINT msg;
WPARAM wParam;
LPARAM lParam;
CHARRANGE chrg;
} ENPROTECTED;
typedef struct _ensaveclipboard
{
NMHDR nmhdr;
LONG cObjectCount;
LONG cch;
} ENSAVECLIPBOARD;
#ifndef MACPORT
typedef struct _enoleopfailed
{
NMHDR nmhdr;
LONG iob;
LONG lOper;
HRESULT hr;
} ENOLEOPFAILED;
#endif
#define OLEOP_DOVERB 1
typedef struct _objectpositions
{
NMHDR nmhdr;
LONG cObjectCount;
LONG *pcpPositions;
} OBJECTPOSITIONS;
typedef struct _enlink
{
NMHDR nmhdr;
UINT msg;
WPARAM wParam;
LPARAM lParam;
CHARRANGE chrg;
} ENLINK;
typedef struct _enlowfirtf
{
NMHDR nmhdr;
char *szControl;
} ENLOWFIRTF;
// PenWin specific
typedef struct _encorrecttext
{
NMHDR nmhdr;
CHARRANGE chrg;
WORD seltyp;
} ENCORRECTTEXT;
// East Asia specific
typedef struct _punctuation
{
UINT iSize;
LPSTR szPunctuation;
} PUNCTUATION;
// East Asia specific
typedef struct _compcolor
{
COLORREF crText;
COLORREF crBackground;
DWORD dwEffects;
}COMPCOLOR;
// Clipboard formats - use as parameter to RegisterClipboardFormat()
#define CF_RTF TEXT("Rich Text Format")
#define CF_RTFNOOBJS TEXT("Rich Text Format Without Objects")
#define CF_RETEXTOBJ TEXT("RichEdit Text and Objects")
// Paste Special
typedef struct _repastespecial
{
DWORD dwAspect;
DWORD_PTR dwParam;
} REPASTESPECIAL;
// UndoName info
typedef enum _undonameid
{
UID_UNKNOWN = 0,
UID_TYPING = 1,
UID_DELETE = 2,
UID_DRAGDROP = 3,
UID_CUT = 4,
UID_PASTE = 5,
UID_AUTOTABLE = 6
} UNDONAMEID;
// Flags for the SETEXTEX data structure
#define ST_DEFAULT 0
#define ST_KEEPUNDO 1
#define ST_SELECTION 2
#define ST_NEWCHARS 4
#if (_RICHEDIT_VER >= 0x0500)
#define ST_UNICODE 8
#endif
// EM_SETTEXTEX info; this struct is passed in the wparam of the message
typedef struct _settextex
{
DWORD flags; // Flags (see the ST_XXX defines)
UINT codepage; // Code page for translation (CP_ACP for sys default,
// 1200 for Unicode, -1 for control default)
} SETTEXTEX;
// Flags for the GETEXTEX data structure
#define GT_DEFAULT 0
#define GT_USECRLF 1
#define GT_SELECTION 2
#define GT_RAWTEXT 4
#define GT_NOHIDDENTEXT 8
// EM_GETTEXTEX info; this struct is passed in the wparam of the message
typedef struct _gettextex
{
DWORD cb; // Count of bytes in the string
DWORD flags; // Flags (see the GT_XXX defines
UINT codepage; // Code page for translation (CP_ACP for sys default,
// 1200 for Unicode, -1 for control default)
LPCSTR lpDefaultChar; // Replacement for unmappable chars
LPBOOL lpUsedDefChar; // Pointer to flag set when def char used
} GETTEXTEX;
// Flags for the GETTEXTLENGTHEX data structure
#define GTL_DEFAULT 0 // Do default (return # of chars)
#define GTL_USECRLF 1 // Compute answer using CRLFs for paragraphs
#define GTL_PRECISE 2 // Compute a precise answer
#define GTL_CLOSE 4 // Fast computation of a "close" answer
#define GTL_NUMCHARS 8 // Return number of characters
#define GTL_NUMBYTES 16 // Return number of _bytes_
// EM_GETTEXTLENGTHEX info; this struct is passed in the wparam of the msg
typedef struct _gettextlengthex
{
DWORD flags; // Flags (see GTL_XXX defines)
UINT codepage; // Code page for translation (CP_ACP for default,
// 1200 for Unicode)
} GETTEXTLENGTHEX;
// BiDi specific features
typedef struct _bidioptions
{
UINT cbSize;
WORD wMask;
WORD wEffects;
} BIDIOPTIONS;
// BIDIOPTIONS masks
#if (_RICHEDIT_VER == 0x0100)
#define BOM_DEFPARADIR 0x0001 // Default paragraph direction (implies alignment) (obsolete)
#define BOM_PLAINTEXT 0x0002 // Use plain text layout (obsolete)
#endif // _RICHEDIT_VER == 0x0100
#define BOM_NEUTRALOVERRIDE 0x0004 // Override neutral layout (obsolete)
#define BOM_CONTEXTREADING 0x0008 // Context reading order
#define BOM_CONTEXTALIGNMENT 0x0010 // Context alignment
#define BOM_LEGACYBIDICLASS 0x0040 // Legacy Bidi classification (obsolete)
#if (_RICHEDIT_VER >= 0x0600)
#define BOM_UNICODEBIDI 0x0080 // Use Unicode BiDi algorithm
#endif
// BIDIOPTIONS effects
#if (_RICHEDIT_VER == 0x0100)
#define BOE_RTLDIR 0x0001 // Default paragraph direction (implies alignment) (obsolete)
#define BOE_PLAINTEXT 0x0002 // Use plain text layout (obsolete)
#endif // _RICHEDIT_VER == 0x0100
#define BOE_NEUTRALOVERRIDE 0x0004 // Override neutral layout (obsolete)
#define BOE_CONTEXTREADING 0x0008 // Context reading order
#define BOE_CONTEXTALIGNMENT 0x0010 // Context alignment
#if (_RICHEDIT_VER >= 0x0800)
#define BOE_FORCERECALC 0x0020 // Force recalc and redraw
#endif
#define BOE_LEGACYBIDICLASS 0x0040 // Legacy Bidi classification (obsolete)
#if (_RICHEDIT_VER >= 0x0600)
#define BOE_UNICODEBIDI 0x0080 // Use Unicode BiDi algorithm
#endif
// Additional EM_FINDTEXT[EX] flags
#define FR_MATCHDIAC 0x20000000
#define FR_MATCHKASHIDA 0x40000000
#define FR_MATCHALEFHAMZA 0x80000000
// UNICODE embedding character
#ifndef WCH_EMBEDDING
#define WCH_EMBEDDING (wchar_t)0xFFFC
#endif // WCH_EMBEDDING
// khyph - Kind of hyphenation
typedef enum tagKHYPH
{
khyphNil, // No Hyphenation
khyphNormal, // Normal Hyphenation
khyphAddBefore, // Add letter before hyphen
khyphChangeBefore, // Change letter before hyphen
khyphDeleteBefore, // Delete letter before hyphen
khyphChangeAfter, // Change letter after hyphen
khyphDelAndChange // Delete letter before hyphen and change
// letter preceding hyphen
} KHYPH;
typedef struct hyphresult
{
KHYPH khyph; // Kind of hyphenation
long ichHyph; // Character which was hyphenated
wchar_t chHyph; // Depending on hyphenation type, character added, changed, etc.
} HYPHRESULT;
void WINAPI HyphenateProc(_In_ wchar_t *pszWord, LANGID langid, long ichExceed, HYPHRESULT *phyphresult);
typedef struct tagHyphenateInfo
{
SHORT cbSize; // Size of HYPHENATEINFO structure
SHORT dxHyphenateZone; // If a space character is closer to the margin
// than this value, don't hyphenate (in TWIPs)
void (WINAPI* pfnHyphenate)(wchar_t*, LANGID, long, HYPHRESULT*);
} HYPHENATEINFO;
#ifdef _WIN32
#include <poppack.h>
#elif !defined(RC_INVOKED)
#pragma pack()
#endif
// Additional class for Richedit 6.0
#if (_RICHEDIT_VER >= 0x0600 )
#ifndef RICHEDIT60_CLASS
#define RICHEDIT60_CLASS L"RICHEDIT60W"
#endif
#endif
// The following identifiers are deprecated
// They were in previous versions of richedit.h
#define PFA_FULL_NEWSPAPER 5 // Not implemented
#define PFA_FULL_INTERLETTER 6 // Not implemented
#define PFA_FULL_SCALED 7 // Not implemented
#define PFA_FULL_GLYPHS 8 // Not implemented
#define AURL_ENABLEEA 1 // Deprecated: use AURL_ENABLEEAURLS
#define GCM_TOUCHMENU 0x4000 // Deprecated: Use GCMF_TOUCHMENU
#define GCM_MOUSEMENU 0x2000 // Deprecated: Use GCMF_MOUSEMENU
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // !_RICHEDIT_
|