// Copyright 2010 The win Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // +build windows package win const ( // 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 MSFTEDIT_CLASS = "RICHEDIT50W" RICHEDIT_CLASS = "RichEdit20W" ) // RichEdit messages const ( EM_CANPASTE = WM_USER + 50 EM_DISPLAYBAND = WM_USER + 51 EM_EXGETSEL = WM_USER + 52 EM_EXLIMITTEXT = WM_USER + 53 EM_EXLINEFROMCHAR = WM_USER + 54 EM_EXSETSEL = WM_USER + 55 EM_FINDTEXT = WM_USER + 56 EM_FORMATRANGE = WM_USER + 57 EM_GETCHARFORMAT = WM_USER + 58 EM_GETEVENTMASK = WM_USER + 59 EM_GETOLEINTERFACE = WM_USER + 60 EM_GETPARAFORMAT = WM_USER + 61 EM_GETSELTEXT = WM_USER + 62 EM_HIDESELECTION = WM_USER + 63 EM_PASTESPECIAL = WM_USER + 64 EM_REQUESTRESIZE = WM_USER + 65 EM_SELECTIONTYPE = WM_USER + 66 EM_SETBKGNDCOLOR = WM_USER + 67 EM_SETCHARFORMAT = WM_USER + 68 EM_SETEVENTMASK = WM_USER + 69 EM_SETOLECALLBACK = WM_USER + 70 EM_SETPARAFORMAT = WM_USER + 71 EM_SETTARGETDEVICE = WM_USER + 72 EM_STREAMIN = WM_USER + 73 EM_STREAMOUT = WM_USER + 74 EM_GETTEXTRANGE = WM_USER + 75 EM_FINDWORDBREAK = WM_USER + 76 EM_SETOPTIONS = WM_USER + 77 EM_GETOPTIONS = WM_USER + 78 EM_FINDTEXTEX = WM_USER + 79 EM_GETWORDBREAKPROCEX = WM_USER + 80 EM_SETWORDBREAKPROCEX = WM_USER + 81 ) // RichEdit 2.0 messages const ( EM_SETUNDOLIMIT = WM_USER + 82 EM_REDO = WM_USER + 84 EM_CANREDO = WM_USER + 85 EM_GETUNDONAME = WM_USER + 86 EM_GETREDONAME = WM_USER + 87 EM_STOPGROUPTYPING = WM_USER + 88 EM_SETTEXTMODE = WM_USER + 89 EM_GETTEXTMODE = WM_USER + 90 ) type TEXTMODE int32 const ( TM_PLAINTEXT TEXTMODE = 1 TM_RICHTEXT = 2 // Default behavior TM_SINGLELEVELUNDO = 4 TM_MULTILEVELUNDO = 8 // Default behavior TM_SINGLECODEPAGE = 16 TM_MULTICODEPAGE = 32 // Default behavior ) const ( EM_AUTOURLDETECT = WM_USER + 91 ) // RichEdit 8.0 messages const ( AURL_ENABLEURL = 1 AURL_ENABLEEMAILADDR = 2 AURL_ENABLETELNO = 4 AURL_ENABLEEAURLS = 8 AURL_ENABLEDRIVELETTERS = 16 AURL_DISABLEMIXEDLGC = 32 // Disable mixed Latin Greek Cyrillic IDNs ) const ( EM_GETAUTOURLDETECT = WM_USER + 92 EM_SETPALETTE = WM_USER + 93 EM_GETTEXTEX = WM_USER + 94 EM_GETTEXTLENGTHEX = WM_USER + 95 EM_SHOWSCROLLBAR = WM_USER + 96 EM_SETTEXTEX = WM_USER + 97 ) // East Asia specific messages const ( EM_SETPUNCTUATION = WM_USER + 100 EM_GETPUNCTUATION = WM_USER + 101 EM_SETWORDWRAPMODE = WM_USER + 102 EM_GETWORDWRAPMODE = WM_USER + 103 EM_SETIMECOLOR = WM_USER + 104 EM_GETIMECOLOR = WM_USER + 105 EM_SETIMEOPTIONS = WM_USER + 106 EM_GETIMEOPTIONS = WM_USER + 107 EM_CONVPOSITION = WM_USER + 108 ) const ( EM_SETLANGOPTIONS = WM_USER + 120 EM_GETLANGOPTIONS = WM_USER + 121 EM_GETIMECOMPMODE = WM_USER + 122 EM_FINDTEXTW = WM_USER + 123 EM_FINDTEXTEXW = WM_USER + 124 ) // RE3.0 FE messages const ( EM_RECONVERSION = WM_USER + 125 EM_SETIMEMODEBIAS = WM_USER + 126 EM_GETIMEMODEBIAS = WM_USER + 127 ) // BiDi specific messages const ( EM_SETBIDIOPTIONS = WM_USER + 200 EM_GETBIDIOPTIONS = WM_USER + 201 EM_SETTYPOGRAPHYOPTIONS = WM_USER + 202 EM_GETTYPOGRAPHYOPTIONS = WM_USER + 203 ) // Extended edit style specific messages const ( EM_SETEDITSTYLE = WM_USER + 204 EM_GETEDITSTYLE = WM_USER + 205 ) // Extended edit style masks const ( SES_EMULATESYSEDIT = 1 SES_BEEPONMAXTEXT = 2 SES_EXTENDBACKCOLOR = 4 SES_MAPCPS = 8 // Obsolete (never used) SES_HYPERLINKTOOLTIPS = 8 SES_EMULATE10 = 16 // Obsolete (never used) SES_DEFAULTLATINLIGA = 16 SES_USECRLF = 32 // Obsolete (never used) SES_NOFOCUSLINKNOTIFY = 32 SES_USEAIMM = 64 SES_NOIME = 128 SES_ALLOWBEEPS = 256 SES_UPPERCASE = 512 SES_LOWERCASE = 1024 SES_NOINPUTSEQUENCECHK = 2048 SES_BIDI = 4096 SES_SCROLLONKILLFOCUS = 8192 SES_XLTCRCRLFTOCR = 16384 SES_DRAFTMODE = 32768 SES_USECTF = 0x00010000 SES_HIDEGRIDLINES = 0x00020000 SES_USEATFONT = 0x00040000 SES_CUSTOMLOOK = 0x00080000 SES_LBSCROLLNOTIFY = 0x00100000 SES_CTFALLOWEMBED = 0x00200000 SES_CTFALLOWSMARTTAG = 0x00400000 SES_CTFALLOWPROOFING = 0x00800000 SES_LOGICALCARET = 0x01000000 SES_WORDDRAGDROP = 0x02000000 SES_SMARTDRAGDROP = 0x04000000 SES_MULTISELECT = 0x08000000 SES_CTFNOLOCK = 0x10000000 SES_NOEALINEHEIGHTADJUST = 0x20000000 SES_MAX = 0x20000000 ) // Options for EM_SETLANGOPTIONS and EM_GETLANGOPTIONS const ( IMF_AUTOKEYBOARD = 0x0001 IMF_AUTOFONT = 0x0002 IMF_IMECANCELCOMPLETE = 0x0004 // High completes comp string when aborting, low cancels IMF_IMEALWAYSSENDNOTIFY = 0x0008 IMF_AUTOFONTSIZEADJUST = 0x0010 IMF_UIFONTS = 0x0020 IMF_NOIMPLICITLANG = 0x0040 IMF_DUALFONT = 0x0080 IMF_NOKBDLIDFIXUP = 0x0200 IMF_NORTFFONTSUBSTITUTE = 0x0400 IMF_SPELLCHECKING = 0x0800 IMF_TKBPREDICTION = 0x1000 IMF_IMEUIINTEGRATION = 0x2000 ) // Values for EM_GETIMECOMPMODE const ( ICM_NOTOPEN = 0x0000 ICM_LEVEL3 = 0x0001 ICM_LEVEL2 = 0x0002 ICM_LEVEL2_5 = 0x0003 ICM_LEVEL2_SUI = 0x0004 ICM_CTF = 0x0005 ) // Options for EM_SETTYPOGRAPHYOPTIONS const ( TO_ADVANCEDTYPOGRAPHY = 0x0001 TO_SIMPLELINEBREAK = 0x0002 TO_DISABLECUSTOMTEXTOUT = 0x0004 TO_ADVANCEDLAYOUT = 0x0008 ) // Pegasus outline mode messages (RE 3.0) const ( // Outline mode message EM_OUTLINE = WM_USER + 220 // Message for getting and restoring scroll pos EM_GETSCROLLPOS = WM_USER + 221 EM_SETSCROLLPOS = WM_USER + 222 // Change fontsize in current selection by wParam EM_SETFONTSIZE = WM_USER + 223 EM_GETZOOM = WM_USER + 224 EM_SETZOOM = WM_USER + 225 EM_GETVIEWKIND = WM_USER + 226 EM_SETVIEWKIND = WM_USER + 227 ) // RichEdit 4.0 messages const ( EM_GETPAGE = WM_USER + 228 EM_SETPAGE = WM_USER + 229 EM_GETHYPHENATEINFO = WM_USER + 230 EM_SETHYPHENATEINFO = WM_USER + 231 EM_GETPAGEROTATE = WM_USER + 235 EM_SETPAGEROTATE = WM_USER + 236 EM_GETCTFMODEBIAS = WM_USER + 237 EM_SETCTFMODEBIAS = WM_USER + 238 EM_GETCTFOPENSTATUS = WM_USER + 240 EM_SETCTFOPENSTATUS = WM_USER + 241 EM_GETIMECOMPTEXT = WM_USER + 242 EM_ISIME = WM_USER + 243 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 const ( EM_GETQUERYRTFOBJ = WM_USER + 269 EM_SETQUERYRTFOBJ = WM_USER + 270 ) // EM_SETPAGEROTATE wparam values const ( EPR_0 = 0 // Text flows left to right and top to bottom EPR_270 = 1 // Text flows top to bottom and right to left EPR_180 = 2 // Text flows right to left and bottom to top EPR_90 = 3 // Text flows bottom to top and left to right EPR_SE = 5 // Text flows top to bottom and left to right (Mongolian text layout) ) // EM_SETCTFMODEBIAS wparam values const ( CTFMODEBIAS_DEFAULT = 0x0000 CTFMODEBIAS_FILENAME = 0x0001 CTFMODEBIAS_NAME = 0x0002 CTFMODEBIAS_READING = 0x0003 CTFMODEBIAS_DATETIME = 0x0004 CTFMODEBIAS_CONVERSATION = 0x0005 CTFMODEBIAS_NUMERIC = 0x0006 CTFMODEBIAS_HIRAGANA = 0x0007 CTFMODEBIAS_KATAKANA = 0x0008 CTFMODEBIAS_HANGUL = 0x0009 CTFMODEBIAS_HALFWIDTHKATAKANA = 0x000A CTFMODEBIAS_FULLWIDTHALPHANUMERIC = 0x000B CTFMODEBIAS_HALFWIDTHALPHANUMERIC = 0x000C ) // EM_SETIMEMODEBIAS lparam values const ( IMF_SMODE_PLAURALCLAUSE = 0x0001 IMF_SMODE_NONE = 0x0002 ) // EM_GETIMECOMPTEXT wparam structure type IMECOMPTEXT struct { // count of bytes in the output buffer. Cb int32 // value specifying the composition string type. // Currently only support ICT_RESULTREADSTR Flags uint32 } const ICT_RESULTREADSTR = 1 // Outline mode wparam values const ( // Enter normal mode, lparam ignored EMO_EXIT = 0 // Enter outline mode, lparam ignored EMO_ENTER = 1 // LOWORD(lparam) == 0 ==> // promote to body-text // LOWORD(lparam) != 0 ==> // promote/demote current selection // by indicated number of levels EMO_PROMOTE = 2 // 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 EMO_EXPAND = 3 // LOWORD(lparam) != 0 -> move current // selection up/down by indicated amount EMO_MOVESELECTION = 4 // Returns VM_NORMAL or VM_OUTLINE EMO_GETVIEWMODE = 5 ) // EMO_EXPAND options const ( EMO_EXPANDSELECTION = 0 EMO_EXPANDDOCUMENT = 1 ) const ( // Agrees with RTF \viewkindN VM_NORMAL = 4 VM_OUTLINE = 2 // Screen page view (not print layout) VM_PAGE = 9 ) // New messages as of Win8 const ( EM_INSERTTABLE = WM_USER + 232 ) // Data type defining table rows for EM_INSERTTABLE // Note: The Richedit.h is completely #pragma pack(4)-ed type TABLEROWPARMS struct { // EM_INSERTTABLE wparam is a (TABLEROWPARMS *) CbRow uint32 // Count of bytes in this structure CbCell uint32 // Count of bytes in TABLECELLPARMS CCell uint32 // Count of cells CRow uint32 // Count of rows DxCellMargin int32 // Cell left/right margin (\trgaph) DxIndent int32 // Row left (right if fRTL indent (similar to \trleft) DyHeight int32 // Row height (\trrh) // nAlignment:3 Row alignment (like PARAFORMAT::bAlignment, \trql, trqr, \trqc) // fRTL:1 Display cells in RTL order (\rtlrow) // fKeep:1 Keep row together (\trkeep} // fKeepFollow:1 Keep row on same page as following row (\trkeepfollow) // fWrap:1 Wrap text to right/left (depending on bAlignment) (see \tdfrmtxtLeftN, \tdfrmtxtRightN) // fIdentCells:1 lparam points at single struct valid for all cells Flags uint32 CpStartRow int32 // cp where to insert table (-1 for selection cp) (can be used for either TRD by EM_GETTABLEPARMS) BTableLevel uint32 // Table nesting level (EM_GETTABLEPARMS only) ICell uint32 // Index of cell to insert/delete (EM_SETTABLEPARMS only) } // Data type defining table cells for EM_INSERTTABLE // Note: The Richedit.h is completely #pragma pack(4)-ed type TABLECELLPARMS struct { // EM_INSERTTABLE lparam is a (TABLECELLPARMS *) DxWidth int32 // Cell width (\cellx) // nVertAlign:2 Vertical alignment (0/1/2 = top/center/bottom \clvertalt (def), \clvertalc, \clvertalb) // fMergeTop:1 Top cell for vertical merge (\clvmgf) // fMergePrev:1 Merge with cell above (\clvmrg) // fVertical:1 Display text top to bottom, right to left (\cltxtbrlv) // fMergeStart:1 Start set of horizontally merged cells (\clmgf) // fMergeCont:1 Merge with previous cell (\clmrg) Flags uint32 WShading uint32 // Shading in .01% (\clshdng) e.g., 10000 flips fore/back DxBrdrLeft int32 // Left border width (\clbrdrl\brdrwN) (in twips) DyBrdrTop int32 // Top border width (\clbrdrt\brdrwN) DxBrdrRight int32 // Right border width (\clbrdrr\brdrwN) DyBrdrBottom int32 // Bottom border width (\clbrdrb\brdrwN) CrBrdrLeft COLORREF // Left border color (\clbrdrl\brdrcf) CrBrdrTop COLORREF // Top border color (\clbrdrt\brdrcf) CrBrdrRight COLORREF // Right border color (\clbrdrr\brdrcf) CrBrdrBottom COLORREF // Bottom border color (\clbrdrb\brdrcf) CrBackPat COLORREF // Background color (\clcbpat) CrForePat COLORREF // Foreground color (\clcfpat) } const ( EM_GETAUTOCORRECTPROC = WM_USER + 233 EM_SETAUTOCORRECTPROC = WM_USER + 234 EM_CALLAUTOCORRECTPROC = WM_USER + 255 ) // AutoCorrect callback type AutoCorrectProc func(langid LANGID, pszBefore *uint16, pszAfter *uint16, cchAfter int32, pcchReplaced *int32) int const ( ATP_NOCHANGE = 0 ATP_CHANGE = 1 ATP_NODELIMITER = 2 ATP_REPLACEALLTEXT = 4 ) const ( EM_GETTABLEPARMS = WM_USER + 265 EM_SETEDITSTYLEEX = WM_USER + 275 EM_GETEDITSTYLEEX = WM_USER + 276 ) // wparam values for EM_SETEDITSTYLEEX/EM_GETEDITSTYLEEX // All unused bits are reserved. const ( SES_EX_NOTABLE = 0x00000004 SES_EX_NOMATH = 0x00000040 SES_EX_HANDLEFRIENDLYURL = 0x00000100 SES_EX_NOTHEMING = 0x00080000 SES_EX_NOACETATESELECTION = 0x00100000 SES_EX_USESINGLELINE = 0x00200000 SES_EX_MULTITOUCH = 0x08000000 // Only works under Win8+ SES_EX_HIDETEMPFORMAT = 0x10000000 SES_EX_USEMOUSEWPARAM = 0x20000000 // Use wParam when handling WM_MOUSEMOVE message and do not call GetAsyncKeyState ) const ( EM_GETSTORYTYPE = WM_USER + 290 EM_SETSTORYTYPE = WM_USER + 291 EM_GETELLIPSISMODE = WM_USER + 305 EM_SETELLIPSISMODE = WM_USER + 306 ) // uint32: *lparam for EM_GETELLIPSISMODE, lparam for EM_SETELLIPSISMODE const ( ELLIPSIS_MASK = 0x00000003 // all meaningful bits ELLIPSIS_NONE = 0x00000000 // ellipsis disabled ELLIPSIS_END = 0x00000001 // ellipsis at the end (forced break) ELLIPSIS_WORD = 0x00000003 // ellipsis at the end (word break) ) const ( EM_SETTABLEPARMS = WM_USER + 307 EM_GETTOUCHOPTIONS = WM_USER + 310 EM_SETTOUCHOPTIONS = WM_USER + 311 EM_INSERTIMAGE = WM_USER + 314 EM_SETUIANAME = WM_USER + 320 EM_GETELLIPSISSTATE = WM_USER + 322 ) // Values for EM_SETTOUCHOPTIONS/EM_GETTOUCHOPTIONS const ( RTO_SHOWHANDLES = 1 RTO_DISABLEHANDLES = 2 RTO_READINGMODE = 3 ) // lparam for EM_INSERTIMAGE type RICHEDIT_IMAGE_PARAMETERS struct { XWidth int32 // Units are HIMETRIC YHeight int32 // Units are HIMETRIC Ascent int32 // Units are HIMETRIC Type int32 // Valid values are TA_TOP, TA_BOTTOM and TA_BASELINE PwszAlternateText *uint16 PIStream uintptr } // New notifications const ( EN_MSGFILTER = 0x0700 EN_REQUESTRESIZE = 0x0701 EN_SELCHANGE = 0x0702 EN_DROPFILES = 0x0703 EN_PROTECTED = 0x0704 EN_CORRECTTEXT = 0x0705 // PenWin specific EN_STOPNOUNDO = 0x0706 EN_IMECHANGE = 0x0707 // East Asia specific EN_SAVECLIPBOARD = 0x0708 EN_OLEOPFAILED = 0x0709 EN_OBJECTPOSITIONS = 0x070a EN_LINK = 0x070b EN_DRAGDROPDONE = 0x070c EN_PARAGRAPHEXPANDED = 0x070d EN_PAGECHANGE = 0x070e EN_LOWFIRTF = 0x070f EN_ALIGNLTR = 0x0710 // BiDi specific notification EN_ALIGNRTL = 0x0711 // BiDi specific notification EN_CLIPFORMAT = 0x0712 EN_STARTCOMPOSITION = 0x0713 EN_ENDCOMPOSITION = 0x0714 ) // Notification structure for EN_ENDCOMPOSITION type ENDCOMPOSITIONNOTIFY struct { Nmhdr NMHDR DwCode uint32 } // Constants for ENDCOMPOSITIONNOTIFY dwCode const ( ECN_ENDCOMPOSITION = 0x0001 ECN_NEWTEXT = 0x0002 ) // Event notification masks const ( ENM_NONE = 0x00000000 ENM_CHANGE = 0x00000001 ENM_UPDATE = 0x00000002 ENM_SCROLL = 0x00000004 ENM_SCROLLEVENTS = 0x00000008 ENM_DRAGDROPDONE = 0x00000010 ENM_PARAGRAPHEXPANDED = 0x00000020 ENM_PAGECHANGE = 0x00000040 ENM_CLIPFORMAT = 0x00000080 ENM_KEYEVENTS = 0x00010000 ENM_MOUSEEVENTS = 0x00020000 ENM_REQUESTRESIZE = 0x00040000 ENM_SELCHANGE = 0x00080000 ENM_DROPFILES = 0x00100000 ENM_PROTECTED = 0x00200000 ENM_CORRECTTEXT = 0x00400000 // PenWin specific ENM_IMECHANGE = 0x00800000 // Used by RE1.0 compatibility ENM_LANGCHANGE = 0x01000000 ENM_OBJECTPOSITIONS = 0x02000000 ENM_LINK = 0x04000000 ENM_LOWFIRTF = 0x08000000 ENM_STARTCOMPOSITION = 0x10000000 ENM_ENDCOMPOSITION = 0x20000000 ENM_GROUPTYPINGCHANGE = 0x40000000 ENM_HIDELINKTOOLTIP = 0x80000000 ) // New edit control styles const ( ES_SAVESEL = 0x00008000 ES_SUNKEN = 0x00004000 ES_DISABLENOSCROLL = 0x00002000 ES_SELECTIONBAR = 0x01000000 // Same as WS_MAXIMIZE, but that doesn't make sense so we re-use the value ES_NOOLEDRAGDROP = 0x00000008 // Same as ES_UPPERCASE, but re-used to completely disable OLE drag'n'drop ) // Obsolete Edit Style const ( ES_EX_NOCALLOLEINIT = 0x00000000 // Not supported in RE 2.0/3.0 ) // These flags are used in FE Windows const ( ES_VERTICAL = 0x00400000 // Not supported in RE 2.0/3.0 ES_NOIME = 0x00080000 ES_SELFIME = 0x00040000 ) // Edit control options const ( ECO_AUTOWORDSELECTION = 0x00000001 ECO_AUTOVSCROLL = 0x00000040 ECO_AUTOHSCROLL = 0x00000080 ECO_NOHIDESEL = 0x00000100 ECO_READONLY = 0x00000800 ECO_WANTRETURN = 0x00001000 ECO_SAVESEL = 0x00008000 ECO_SELECTIONBAR = 0x01000000 ECO_VERTICAL = 0x00400000 // FE specific ) // ECO operations const ( ECOOP_SET = 0x0001 ECOOP_OR = 0x0002 ECOOP_AND = 0x0003 ECOOP_XOR = 0x0004 ) // New word break function actions const ( WB_CLASSIFY = 3 WB_MOVEWORDLEFT = 4 WB_MOVEWORDRIGHT = 5 WB_LEFTBREAK = 6 WB_RIGHTBREAK = 7 ) // East Asia specific flags const ( WB_MOVEWORDPREV = 4 WB_MOVEWORDNEXT = 5 WB_PREVBREAK = 6 WB_NEXTBREAK = 7 PC_FOLLOWING = 1 PC_LEADING = 2 PC_OVERFLOW = 3 PC_DELIMITER = 4 WBF_WORDWRAP = 0x010 WBF_WORDBREAK = 0x020 WBF_OVERFLOW = 0x040 WBF_LEVEL1 = 0x080 WBF_LEVEL2 = 0x100 WBF_CUSTOM = 0x200 ) // East Asia specific flags const ( IMF_FORCENONE = 0x0001 IMF_FORCEENABLE = 0x0002 IMF_FORCEDISABLE = 0x0004 IMF_CLOSESTATUSWINDOW = 0x0008 IMF_VERTICAL = 0x0020 IMF_FORCEACTIVE = 0x0040 IMF_FORCEINACTIVE = 0x0080 IMF_FORCEREMEMBER = 0x0100 IMF_MULTIPLEEDIT = 0x0400 ) // Word break flags (used with WB_CLASSIFY) const ( WBF_CLASS byte = 0x0F WBF_ISWHITE byte = 0x10 WBF_BREAKLINE byte = 0x20 WBF_BREAKAFTER byte = 0x40 ) type CHARFORMAT struct { CbSize uint32 DwMask uint32 DwEffects uint32 YHeight int32 YOffset int32 CrTextColor COLORREF BCharSet byte BPitchAndFamily byte SzFaceName [LF_FACESIZE]uint16 } type CHARFORMAT2 struct { CHARFORMAT WWeight uint16 // Font weight (LOGFONT value) SSpacing int16 // Amount to space between letters CrBackColor COLORREF // Background color Lcid LCID // Locale ID DwCookie uint32 // Client cookie opaque to RichEdit SStyle int16 // Style handle WKerning uint16 // Twip size above which to kern char pair BUnderlineType byte // Underline type BAnimation byte // Animated text like marching ants BRevAuthor byte // Revision author index BUnderlineColor byte // Underline color } // CHARFORMAT masks const ( CFM_BOLD = 0x00000001 CFM_ITALIC = 0x00000002 CFM_UNDERLINE = 0x00000004 CFM_STRIKEOUT = 0x00000008 CFM_PROTECTED = 0x00000010 CFM_LINK = 0x00000020 // Exchange hyperlink extension CFM_SIZE = 0x80000000 CFM_COLOR = 0x40000000 CFM_FACE = 0x20000000 CFM_OFFSET = 0x10000000 CFM_CHARSET = 0x08000000 ) // CHARFORMAT effects const ( CFE_BOLD = 0x00000001 CFE_ITALIC = 0x00000002 CFE_UNDERLINE = 0x00000004 CFE_STRIKEOUT = 0x00000008 CFE_PROTECTED = 0x00000010 CFE_LINK = 0x00000020 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 CFM_SMALLCAPS = 0x00000040 // (*) CFM_ALLCAPS = 0x00000080 // Displayed by 3.0 CFM_HIDDEN = 0x00000100 // Hidden by 3.0 CFM_OUTLINE = 0x00000200 // (*) CFM_SHADOW = 0x00000400 // (*) CFM_EMBOSS = 0x00000800 // (*) CFM_IMPRINT = 0x00001000 // (*) CFM_DISABLED = 0x00002000 CFM_REVISED = 0x00004000 CFM_REVAUTHOR = 0x00008000 CFE_SUBSCRIPT = 0x00010000 // Superscript and subscript are CFE_SUPERSCRIPT = 0x00020000 // mutually exclusive CFM_ANIMATION = 0x00040000 // (*) CFM_STYLE = 0x00080000 // (*) CFM_KERNING = 0x00100000 CFM_SPACING = 0x00200000 // Displayed by 3.0 CFM_WEIGHT = 0x00400000 CFM_UNDERLINETYPE = 0x00800000 // Many displayed by 3.0 CFM_COOKIE = 0x01000000 // RE 6.0 CFM_LCID = 0x02000000 CFM_BACKCOLOR = 0x04000000 // Higher mask bits defined above CFM_SUBSCRIPT = (CFE_SUBSCRIPT | CFE_SUPERSCRIPT) CFM_SUPERSCRIPT = CFM_SUBSCRIPT // CHARFORMAT "ALL" masks CFM_EFFECTS = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_COLOR | CFM_STRIKEOUT | CFE_PROTECTED | CFM_LINK CFM_ALL = CFM_EFFECTS | CFM_SIZE | CFM_FACE | CFM_OFFSET | CFM_CHARSET 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 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 CFE_SMALLCAPS = CFM_SMALLCAPS CFE_ALLCAPS = CFM_ALLCAPS CFE_HIDDEN = CFM_HIDDEN CFE_OUTLINE = CFM_OUTLINE CFE_SHADOW = CFM_SHADOW CFE_EMBOSS = CFM_EMBOSS CFE_IMPRINT = CFM_IMPRINT CFE_DISABLED = CFM_DISABLED CFE_REVISED = CFM_REVISED // CFE_AUTOCOLOR and CFE_AUTOBACKCOLOR correspond to CFM_COLOR and // CFM_BACKCOLOR, respectively, which control them CFE_AUTOBACKCOLOR = CFM_BACKCOLOR CFM_FONTBOUND = 0x00100000 CFM_LINKPROTECTED = 0x00800000 // Word hyperlink field CFM_EXTENDED = 0x02000000 CFM_MATHNOBUILDUP = 0x08000000 CFM_MATH = 0x10000000 CFM_MATHORDINARY = 0x20000000 CFM_ALLEFFECTS = (CFM_EFFECTS2 | CFM_FONTBOUND | CFM_EXTENDED | CFM_MATHNOBUILDUP | CFM_MATH | CFM_MATHORDINARY) CFE_FONTBOUND = 0x00100000 // Font chosen by binder, not user CFE_LINKPROTECTED = 0x00800000 CFE_EXTENDED = 0x02000000 CFE_MATHNOBUILDUP = 0x08000000 CFE_MATH = 0x10000000 CFE_MATHORDINARY = 0x20000000 // Underline types. RE 1.0 displays only CFU_UNDERLINE CFU_CF1UNDERLINE = 0xFF // Map charformat's bit underline to CF2 CFU_INVERT = 0xFE // For IME composition fake a selection CFU_UNDERLINETHICKLONGDASH = 18 // (*) display as dash CFU_UNDERLINETHICKDOTTED = 17 // (*) display as dot CFU_UNDERLINETHICKDASHDOTDOT = 16 // (*) display as dash dot dot CFU_UNDERLINETHICKDASHDOT = 15 // (*) display as dash dot CFU_UNDERLINETHICKDASH = 14 // (*) display as dash CFU_UNDERLINELONGDASH = 13 // (*) display as dash CFU_UNDERLINEHEAVYWAVE = 12 // (*) display as wave CFU_UNDERLINEDOUBLEWAVE = 11 // (*) display as wave CFU_UNDERLINEHAIRLINE = 10 // (*) display as single CFU_UNDERLINETHICK = 9 CFU_UNDERLINEWAVE = 8 CFU_UNDERLINEDASHDOTDOT = 7 CFU_UNDERLINEDASHDOT = 6 CFU_UNDERLINEDASH = 5 CFU_UNDERLINEDOTTED = 4 CFU_UNDERLINEDOUBLE = 3 // (*) display as single CFU_UNDERLINEWORD = 2 // (*) display as single CFU_UNDERLINE = 1 CFU_UNDERLINENONE = 0 ) const YHeightCharPtsMost = 1638 const ( // EM_SETCHARFORMAT wParam masks SCF_SELECTION = 0x0001 SCF_WORD = 0x0002 SCF_DEFAULT = 0x0000 // Set default charformat or paraformat SCF_ALL = 0x0004 // Not valid with SCF_SELECTION or SCF_WORD SCF_USEUIRULES = 0x0008 // Modifier for SCF_SELECTION; says that came from a toolbar, etc., and UI formatting rules should be instead of literal formatting SCF_ASSOCIATEFONT = 0x0010 // Associate fontname with bCharSet (one possible for each of Western, ME, FE, Thai) SCF_NOKBUPDATE = 0x0020 // Do not update KB layout for this change even if autokeyboard is on SCF_ASSOCIATEFONT2 = 0x0040 // Associate plane-2 (surrogate) font SCF_SMARTFONT = 0x0080 // Apply font only if it can handle script (5.0) SCF_CHARREPFROMLCID = 0x0100 // Get character repertoire from lcid (5.0) SPF_DONTSETDEFAULT = 0x0002 // Suppress setting default on empty control SPF_SETDEFAULT = 0x0004 // Set the default paraformat ) type CHARRANGE struct { CpMin int32 CpMax int32 } type TEXTRANGE struct { Chrg CHARRANGE LpstrText *uint16 // Allocated by caller, zero terminated by RichEdit } type EDITSTREAM struct { DwCookie uintptr // User value passed to callback as first parameter DwError uint32 // Last error PfnCallback uintptr } const ( // Stream formats. Flags are all in low word, since high word gives possible codepage choice. SF_TEXT = 0x0001 SF_RTF = 0x0002 SF_RTFNOOBJS = 0x0003 // Write only SF_TEXTIZED = 0x0004 // Write only SF_UNICODE = 0x0010 // Unicode file (UCS2 little endian) SF_USECODEPAGE = 0x0020 // CodePage given by high word SF_NCRFORNONASCII = 0x40 // Output \uN for nonASCII 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 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 SFF_PLAINRTF = 0x4000 // Flag telling file stream output (SFF_SELECTION flag not set) to persist // \viewscaleN control word. SFF_PERSISTVIEWSCALE = 0x2000 // Flag telling file stream input with SFF_SELECTION flag not set not to // close the document SFF_KEEPDOCINFO = 0x1000 // Flag telling stream operations to output in Pocket Word format SFF_PWD = 0x0800 // 3-bit field specifying the value of N - 1 to use for \rtfN or \pwdN SF_RTFVAL = 0x0700 ) type FINDTEXT struct { Chrg CHARRANGE LpstrText *uint16 } type FINDTEXTEX struct { chrg CHARRANGE lpstrText *uint16 chrgText CHARRANGE } type FORMATRANGE struct { hdc HDC hdcTarget HDC rc RECT rcPage RECT chrg CHARRANGE } // All paragraph measurements are in twips const ( MAX_TAB_STOPS = 32 LDefaultTab = 720 MAX_TABLE_CELLS = 63 ) type PARAFORMAT struct { CbSize uint32 DwMask uint32 WNumbering uint16 WEffects uint16 DxStartIndent int32 DxRightIndent int32 DxOffset int32 WAlignment uint16 CTabCount int16 RgxTabs [MAX_TAB_STOPS]int32 } type PARAFORMAT2 struct { PARAFORMAT DySpaceBefore int32 // Vertical spacing before para DySpaceAfter int32 // Vertical spacing after para DyLineSpacing int32 // Line spacing depending on Rule SStyle int16 // Style handle BLineSpacingRule byte // Rule for line spacing (see tom.doc) BOutlineLevel byte // Outline level WShadingWeight uint16 // Shading in hundredths of a per cent WShadingStyle uint16 // Nibble 0: style, 1: cfpat, 2: cbpat WNumberingStart uint16 // Starting value for numbering WNumberingStyle uint16 // Alignment, roman/arabic, (), ), ., etc. WNumberingTab uint16 // Space bet FirstIndent & 1st-line text WBorderSpace uint16 // Border-text spaces (nbl/bdr in pts) WBorderWidth uint16 // Pen widths (nbl/bdr in half pts) WBorders uint16 // Border styles (nibble/border) } const ( // PARAFORMAT mask values PFM_STARTINDENT = 0x00000001 PFM_RIGHTINDENT = 0x00000002 PFM_OFFSET = 0x00000004 PFM_ALIGNMENT = 0x00000008 PFM_TABSTOPS = 0x00000010 PFM_NUMBERING = 0x00000020 PFM_OFFSETINDENT = 0x80000000 // PARAFORMAT 2.0 masks and effects PFM_SPACEBEFORE = 0x00000040 PFM_SPACEAFTER = 0x00000080 PFM_LINESPACING = 0x00000100 PFM_STYLE = 0x00000400 PFM_BORDER = 0x00000800 // (*) PFM_SHADING = 0x00001000 // (*) PFM_NUMBERINGSTYLE = 0x00002000 // RE 3.0 PFM_NUMBERINGTAB = 0x00004000 // RE 3.0 PFM_NUMBERINGSTART = 0x00008000 // RE 3.0 PFM_RTLPARA = 0x00010000 PFM_KEEP = 0x00020000 // (*) PFM_KEEPNEXT = 0x00040000 // (*) PFM_PAGEBREAKBEFORE = 0x00080000 // (*) PFM_NOLINENUMBER = 0x00100000 // (*) PFM_NOWIDOWCONTROL = 0x00200000 // (*) PFM_DONOTHYPHEN = 0x00400000 // (*) PFM_SIDEBYSIDE = 0x00800000 // (*) // The following two paragraph-format properties are read only PFM_COLLAPSED = 0x01000000 // RE 3.0 PFM_OUTLINELEVEL = 0x02000000 // RE 3.0 PFM_BOX = 0x04000000 // RE 3.0 PFM_RESERVED2 = 0x08000000 // RE 4.0 PFM_TABLEROWDELIMITER = 0x10000000 // RE 4.0 PFM_TEXTWRAPPINGBREAK = 0x20000000 // RE 3.0 PFM_TABLE = 0x40000000 // RE 3.0 // PARAFORMAT "ALL" masks 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) PFM_EFFECTS = PFM_RTLPARA | PFM_KEEP | PFM_KEEPNEXT | PFM_TABLE | PFM_PAGEBREAKBEFORE | PFM_NOLINENUMBER | PFM_NOWIDOWCONTROL | PFM_DONOTHYPHEN | PFM_SIDEBYSIDE | PFM_TABLE | PFM_TABLEROWDELIMITER PFM_ALL2 = PFM_ALL | PFM_EFFECTS | PFM_SPACEBEFORE | PFM_SPACEAFTER | PFM_LINESPACING | PFM_STYLE | PFM_SHADING | PFM_BORDER | PFM_NUMBERINGTAB | PFM_NUMBERINGSTART | PFM_NUMBERINGSTYLE PFE_RTLPARA = PFM_RTLPARA >> 16 PFE_KEEP = PFM_KEEP >> 16 // (*) PFE_KEEPNEXT = PFM_KEEPNEXT >> 16 // (*) PFE_PAGEBREAKBEFORE = PFM_PAGEBREAKBEFORE >> 16 // (*) PFE_NOLINENUMBER = PFM_NOLINENUMBER >> 16 // (*) PFE_NOWIDOWCONTROL = PFM_NOWIDOWCONTROL >> 16 // (*) PFE_DONOTHYPHEN = PFM_DONOTHYPHEN >> 16 // (*) PFE_SIDEBYSIDE = PFM_SIDEBYSIDE >> 16 // (*) PFE_TEXTWRAPPINGBREAK = PFM_TEXTWRAPPINGBREAK >> 16 // (*) // The following four effects are read only PFE_COLLAPSED = PFM_COLLAPSED >> 16 // (+) PFE_BOX = PFM_BOX >> 16 // (+) PFE_TABLE = PFM_TABLE >> 16 // Inside table row. RE 3.0 PFE_TABLEROWDELIMITER = PFM_TABLEROWDELIMITER >> 16 // Table row start. RE 4.0 // PARAFORMAT numbering options PFN_BULLET = 1 // tomListBullet // PARAFORMAT2 wNumbering options PFN_ARABIC = 2 // tomListNumberAsArabic: 0, 1, 2, ... PFN_LCLETTER = 3 // tomListNumberAsLCLetter: a, b, c, ... PFN_UCLETTER = 4 // tomListNumberAsUCLetter: A, B, C, ... PFN_LCROMAN = 5 // tomListNumberAsLCRoman: i, ii, iii, ... PFN_UCROMAN = 6 // tomListNumberAsUCRoman: I, II, III, ... // PARAFORMAT2 wNumberingStyle options PFNS_PAREN = 0x000 // default, e.g., 1) PFNS_PARENS = 0x100 // tomListParentheses/256, e.g., (1) PFNS_PERIOD = 0x200 // tomListPeriod/256, e.g., 1. PFNS_PLAIN = 0x300 // tomListPlain/256, e.g., 1 PFNS_NONUMBER = 0x400 // Used for continuation w/o number PFNS_NEWNUMBER = 0x8000 // Start new number with wNumberingStart // (can be combined with other PFNS_xxx) // PARAFORMAT alignment options PFA_LEFT = 1 PFA_RIGHT = 2 PFA_CENTER = 3 // PARAFORMAT2 alignment options PFA_JUSTIFY = 4 // New paragraph-alignment option 2.0 (*) PFA_FULL_INTERWORD = 4 // These are supported in 3.0 with advanced ) type MSGFILTER struct { Nmhdr NMHDR Msg uint32 WParam uintptr LParam uintptr } type REQRESIZE struct { Nmhdr NMHDR Rc RECT } type SELCHANGE struct { Nmhdr NMHDR Chrg CHARRANGE Seltyp uint16 } type GROUPTYPINGCHANGE struct { Nmhdr NMHDR FGroupTyping BOOL } type CLIPBOARDFORMAT struct { Nmhdr NMHDR Cf CLIPFORMAT } const ( SEL_EMPTY = 0x0000 SEL_TEXT = 0x0001 SEL_OBJECT = 0x0002 SEL_MULTICHAR = 0x0004 SEL_MULTIOBJECT = 0x0008 ) const ( // 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 GCM_RIGHTMOUSEDROP = 0x8000 ) type GETCONTEXTMENUEX struct { Chrg CHARRANGE DwFlags uint32 Pt POINT PvReserved uintptr } const ( // bits for GETCONTEXTMENUEX::dwFlags GCMF_GRIPPER = 0x00000001 GCMF_SPELLING = 0x00000002 // pSpellingSuggestions is valid and points to the list of spelling suggestions GCMF_TOUCHMENU = 0x00004000 GCMF_MOUSEMENU = 0x00002000 ) type ENDROPFILES struct { Nmhdr NMHDR HDrop HANDLE Cp int32 FProtected BOOL } type ENPROTECTED struct { Nmhdr NMHDR Msg uint32 WParam uintptr LParam uintptr Chrg CHARRANGE } type ENSAVECLIPBOARD struct { Nmhdr NMHDR CObjectCount int32 Cch int32 } type ENOLEOPFAILED struct { Nmhdr NMHDR Iob int32 LOper int32 Hr HRESULT } const OLEOP_DOVERB = 1 type OBJECTPOSITIONS struct { Nmhdr NMHDR CObjectCount int32 PcpPositions *int32 } type ENLINK struct { Nmhdr NMHDR Msg uint32 WParam uintptr LParam uintptr Chrg CHARRANGE } type ENLOWFIRTF struct { Nmhdr NMHDR SzControl *byte } // PenWin specific type ENCORRECTTEXT struct { Nmhdr NMHDR Chrg CHARRANGE Seltyp uint16 } // East Asia specific type PUNCTUATION struct { ISize uint32 SzPunctuation *byte } // East Asia specific type COMPCOLOR struct { CrText COLORREF CrBackground COLORREF DwEffects uint32 } const ( // Clipboard formats - use as parameter to RegisterClipboardFormat() CF_RTF = "Rich Text Format" CF_RTFNOOBJS = "Rich Text Format Without Objects" CF_RETEXTOBJ = "RichEdit Text and Objects" ) // Paste Special type REPASTESPECIAL struct { DwAspect uint32 DwParam uintptr } // UndoName info type UNDONAMEID int32 const ( UID_UNKNOWN UNDONAMEID = 0 UID_TYPING = 1 UID_DELETE = 2 UID_DRAGDROP = 3 UID_CUT = 4 UID_PASTE = 5 UID_AUTOTABLE = 6 ) const ( // Flags for the SETEXTEX data structure ST_DEFAULT = 0 ST_KEEPUNDO = 1 ST_SELECTION = 2 ST_NEuint16S = 4 ST_UNICODE = 8 ) // EM_SETTEXTEX info; this struct is passed in the wparam of the message type SETTEXTEX struct { Flags uint32 // Flags (see the ST_XXX defines) Codepage uint32 // Code page for translation (CP_ACP for sys default, 1200 for Unicode, -1 for control default) } const ( // Flags for the GETEXTEX data structure GT_DEFAULT = 0 GT_USECRLF = 1 GT_SELECTION = 2 GT_RAWTEXT = 4 GT_NOHIDDENTEXT = 8 ) // EM_GETTEXTEX info; this struct is passed in the wparam of the message type GETTEXTEX struct { Cb uint32 // Count of bytes in the string Flags uint32 // Flags (see the GT_XXX defines Codepage uint32 // Code page for translation (CP_ACP for sys default, 1200 for Unicode, -1 for control default) LpDefaultChar *byte // Replacement for unmappable chars LpUsedDefChar *BOOL // Pointer to flag set when def char used } const ( // Flags for the GETTEXTLENGTHEX data structure GTL_DEFAULT = 0 // Do default (return # of chars) GTL_USECRLF = 1 // Compute answer using CRLFs for paragraphs GTL_PRECISE = 2 // Compute a precise answer GTL_CLOSE = 4 // Fast computation of a "close" answer GTL_NUMCHARS = 8 // Return number of characters GTL_NUMBYTES = 16 // Return number of _bytes_ ) // EM_GETTEXTLENGTHEX info; this struct is passed in the wparam of the msg type GETTEXTLENGTHEX struct { Flags uint32 // Flags (see GTL_XXX defines) Codepage uint32 // Code page for translation (CP_ACP for default, 1200 for Unicode) } // BiDi specific features type BIDIOPTIONS struct { CbSize uint32 WMask uint16 WEffects uint16 } const ( // BIDIOPTIONS masks BOM_NEUTRALOVERRIDE = 0x0004 // Override neutral layout (obsolete) BOM_CONTEXTREADING = 0x0008 // Context reading order BOM_CONTEXTALIGNMENT = 0x0010 // Context alignment BOM_LEGACYBIDICLASS = 0x0040 // Legacy Bidi classification (obsolete) BOM_UNICODEBIDI = 0x0080 // Use Unicode BiDi algorithm // BIDIOPTIONS effects BOE_NEUTRALOVERRIDE = 0x0004 // Override neutral layout (obsolete) BOE_CONTEXTREADING = 0x0008 // Context reading order BOE_CONTEXTALIGNMENT = 0x0010 // Context alignment BOE_FORCERECALC = 0x0020 // Force recalc and redraw BOE_LEGACYBIDICLASS = 0x0040 // Legacy Bidi classification (obsolete) BOE_UNICODEBIDI = 0x0080 // Use Unicode BiDi algorithm // Additional EM_FINDTEXT[EX] flags FR_MATCHDIAC = 0x20000000 FR_MATCHKASHIDA = 0x40000000 FR_MATCHALEFHAMZA = 0x80000000 // UNICODE embedding character WCH_EMBEDDING uint16 = 0xFFFC ) // khyph - Kind of hyphenation type KHYPH int32 const ( KhyphNil KHYPH = iota // 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 ) type HYPHRESULT struct { Khyph KHYPH // Kind of hyphenation IchHyph int32 // Character which was hyphenated ChHyph uint16 // Depending on hyphenation type, character added, changed, etc. } type HYPHENATEINFO struct { CbSize int16 // Size of HYPHENATEINFO structure DxHyphenateZone int16 // If a space character is closer to the margin than this value, don't hyphenate (in TWIPs) PfnHyphenate uintptr } const ( // Additional class for Richedit 6.0 RICHEDIT60_CLASS = "RICHEDIT60W" )