windows-nt/Source/XPSP1/NT/windows/richedit/re30/_edit.h
2020-09-26 16:20:57 +08:00

1263 lines
53 KiB
C++

/* _EDIT.H
*
* Purpose:
* Base classes for rich-text manipulation
*
* Authors:
* Christian Fortini
* Murray Sargent (and many others)
*
* Copyright (c) 1995-1998, Microsoft Corporation. All rights reserved.
*/
#ifndef _EDIT_H
#define _EDIT_H
#include "textserv.h"
#include "textsrv2.h"
#include "_ldte.h"
#include "_m_undo.h"
#include "_notmgr.h"
#include "_doc.h"
#include "_objmgr.h"
#include "_cfpf.h"
#include "_callmgr.h"
#include "_magelln.h"
// Forward declarations
class CRchTxtPtr;
class CTxtSelection;
class CTxtStory;
class CTxtUndo;
class CMeasurer;
class CRenderer;
class CDisplay;
class CDisplayPrinter;
class CDrawInfo;
class CDetectURL;
class CUniscribe;
class CTxtBreaker;
// Macro for finding parent "this" of embedded class. If this turns out to be
// globally useful we should move it to _common.h.
#define GETPPARENT(pmemb, struc, membname) (\
(struc FAR *)(((char FAR *)(pmemb))-offsetof(struc, membname)))
// These wonderful constants are for backward compatibility. They are the
// sizes used for initialization and reset in RichEdit 1.0
const LONG cInitTextMax = (32 * 1024) - 1;
const LONG cResetTextMax = (64 * 1024);
extern DWORD CALLBACK ReadHGlobal (DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
extern DWORD GetKbdFlags(WORD vkey, DWORD dwFlags);
extern BYTE szUTF8BOM[];
extern WORD g_wFlags; // Toggled by Ctrl-"
#define KF_SMARTQUOTES 0x0001 // Enable smart quotes
#define SmartQuotesEnabled() (g_wFlags & KF_SMARTQUOTES)
struct SPrintControl
{
union
{
DWORD _dwAllFlags; // Make it easy to set all flags at once.
struct
{
ULONG _fDoPrint:1; // Whether actual print is required
ULONG _fPrintFromDraw:1; // Whether draw is being used to print
};
};
SPrintControl(void) { _dwAllFlags = 0; }
};
enum DOCUMENTTYPE
{
DT_LTRDOC = 1, // DT_LTRDOC and DT_RTLDOC are mutually
DT_RTLDOC = 2, // exclusive
};
// Context rule settings.
// Optimally, these would be an enum, but we run into sign extension glitchs
// sticking an enum into a 2-bit field.
#define CTX_NONE 0 // No context direction/alignment.
#define CTX_NEUTRAL 1 // No strong characters in the control, direction/alignment follows keyboard.
#define CTX_LTR 2 // LTR direction/alignment (first strong character is LTR)
#define CTX_RTL 3 // RTL direction/alignment (first strong character is RTL)
#define IsStrongContext(x) (x >= CTX_LTR)
class CDocInfo // Contains ITextDocument info
{
public:
BSTR pName; // Document filename
HANDLE hFile; // Handle used unless full file sharing
WORD wFlags; // Open, share, create, and save flags
WORD wCpg; // Code page
LONG dwDefaultTabStop; // TOM settable default tab stop
LCID lcid; // Document lcid (for RTF \deflang)
LCID lcidfe; // Document FE lcid (for RTF \deflangfe)
LPSTR lpstrLeadingPunct; // Leading kinsoku characters
LPSTR lpstrFollowingPunct;// Following kinsoku characters
COLORREF *prgColor; // Special color array
char cColor; // Allocated count of colors in pColor
BYTE bDocType; // 0-1-2: export none-\ltrdoc-\rtldoc
// If 0x80 or'd in, PWD instead of RTF
BYTE bCaretType; // Caret type
CDocInfo() {InitDocInfo();} // constructor
~CDocInfo(); // destructor
void InitDocInfo();
};
const DWORD tomInvalidCpg = 0xFFFF;
const DWORD tomInvalidLCID = 0xFFFE;
// This depends on the number of property bits defined in textserv.h. However, this is
// for private use by the text services so it is defined here.
#define MAX_PROPERTY_BITS 21
#define SPF_SETDEFAULT 4
// IDispatch global declarations
extern ITypeInfo * g_pTypeInfoDoc;
extern ITypeInfo * g_pTypeInfoSel;
extern ITypeInfo * g_pTypeInfoFont;
extern ITypeInfo * g_pTypeInfoPara;
HRESULT GetTypeInfoPtrs();
HRESULT GetTypeInfo(UINT iTypeInfo, ITypeInfo *&pTypeInfo,
ITypeInfo **ppTypeInfo);
BOOL IsSameVtables(IUnknown *punk1, IUnknown *punk2);
// Map from keyboard to font. (converse is handled in font.cpp)
typedef struct _kbdFont
{
WORD iKbd;
SHORT iCF;
} KBDFONT;
DWORD GetCharFlags(DWORD ch, BYTE bDefaultCharset = 0);
CUniscribe* GetUniscribe(void);
#define fBIDI 1
#define fDIGITSHAPE 2
#define fSURROGATE 0x00000010 // (0x10 - 0x80 No fontbind supported)
#define fUNIC_CTRL 0x00000020
/* The font signature low DWORD has the bit definitions (note: SDK 98
has Thai - Chinese off by one bit compared to FS_xxx defs in wingdi.h)
0 1252 Latin 1
1 1250 Latin 2: Eastern Europe
2 1251 Cyrillic
3 1253 Greek
4 1254 Turkish
5 1255 Hebrew
6 1256 Arabic
7 1257 Baltic
8 1258 Vietnamese
9 - 15 Reserved for ANSI
16 874 Thai
17 932 JIS/Japan
18 936 Chinese: Simplified chars--PRC, Hong Kong, Singapore
19 949 Korean Unified Hangul Code (Hangul TongHabHyung Code)
20 950 Chinese: Traditional chars--Taiwan
We define bit masks which are similar to the values above shifted over
one byte (add 8) to make room for _dwCharFlags
*/
#define fHILATIN1 0x00000100
#define fLATIN2 0x00000200
#define fCYRILLIC 0x00000400
#define fGREEK 0x00000800
#define fTURKISH 0x00001000
#define fHEBREW 0x00002000
#define fARABIC 0x00004000
#define fBALTIC 0x00008000
#define fVIETNAMESE 0x00010000
#define fARMENIAN 0x00020000
#define fOEM 0x00040000
#define fCOMBINING 0x00080000
#define fASCIIUPR 0x00100000 // ASCII 0x40-0x7F
#define fBELOWX40 0x00200000 // ASCII 0x00-0x3F
#define fSYMBOL 0x00400000
#define fOTHER 0x00800000
#define fTHAI 0x01000000
#define fKANA 0x02000000
#define fCHINESE 0x04000000 // Simplified Chinese
#define fHANGUL 0x08000000
#define fBIG5 0x10000000 // Traditional Chinese
#define fDEVANAGARI 0x20000000
#define fTAMIL 0x40000000
#define fGEORGIAN 0x80000000
#define fASCII (fASCIIUPR | fBELOWX40)
#define fLATIN1 (fASCII | fHILATIN1)
#define fFE (fKANA | fCHINESE | fBIG5 | fHANGUL)
#define fABOVEX7FF (fTHAI | fFE | fDEVANAGARI | fTAMIL | fOTHER)
#define fLATIN (fHILATIN1 | fLATIN2 | fTURKISH | fBALTIC | fVIETNAMESE)
#define fNEEDWORDBREAK fTHAI
#define fNEEDCHARBREAK (fTHAI | fDEVANAGARI | fTAMIL)
#define fNEEDCSSEQCHECK (fTHAI | fDEVANAGARI | fTAMIL)
#define fCOMPLEX_SCRIPT (fBIDI | fARABIC | fHEBREW | fTHAI | fDEVANAGARI | fTAMIL | fCOMBINING | fDIGITSHAPE | fSURROGATE)
#define RB_DEFAULT 0x00000000 // perform default behavior
#define RB_NOSELCHECK 0x00000001 // for OnTxRButtonUp, bypass pt in selection check
#define RB_FORCEINSEL 0x00000002 // force point into selection (used by keyboard to get context menus)
// flags for OnTxLButtonUp
#define LB_RELEASECAPTURE 0x00000001 // Force release mouse capture
#define LB_FLUSHNOTIFY 0x00000002 // 1.0 mode force selection change notification if selChange is cached
enum AccentIndices
{
ACCENT_GRAVE = 1,
ACCENT_ACUTE,
ACCENT_CARET,
ACCENT_TILDE,
ACCENT_UMLAUT,
ACCENT_CEDILLA
};
#define KBD_CHAR 2 // Must be a bit value > 1
// ================================== CTxtEdit ============================================
// Outer most class for a Text Control.
class CTxtEdit : public ITextServices, public IRichEditOle, public ITextDocument2
{
public:
friend class CCallMgr;
friend class CMagellanBMPStateWrap;
CTxtEdit(ITextHost2 *phost, IUnknown *punkOuter);
~CTxtEdit ();
// Initialization
BOOL Init(const RECT *prcClient);
// A helper function
LONG GetTextLength() const {return _story.GetTextLength();}
LONG GetAdjustedTextLength();
// Access to ActiveObject members
IUnknown * GetPrivateIUnknown() { return &_unk; }
CLightDTEngine *GetDTE() { return &_ldte; }
IUndoMgr * GetUndoMgr() { return _pundo; }
IUndoMgr * GetRedoMgr() { return _predo; }
IUndoMgr * CreateUndoMgr(DWORD dwLim, USFlags flags);
CCallMgr * GetCallMgr() {
Assert(_pcallmgr);
return _pcallmgr;
}
CObjectMgr * GetObjectMgr();
// the callback is provided by the client
// to help with OLE support
BOOL HasObjects() {return !!_pobjmgr;}
IRichEditOleCallback *GetRECallback()
{ return _pobjmgr ? _pobjmgr->GetRECallback() : NULL; }
LRESULT HandleSetUndoLimit(LONG Count);
LRESULT HandleSetTextMode(DWORD mode);
CNotifyMgr * GetNotifyMgr();
CDetectURL * GetDetectURL() {return _pdetecturl;}
CUniscribe * Getusp() const {return GetUniscribe();}
#if !defined(NOMAGELLAN)
CMagellan mouse;
LRESULT HandleMouseWheel(WPARAM wparam, LPARAM lparam);
#endif
// Misc helpers
LONG GetAcpFromCp(LONG cp, BOOL fPrecise=0);
LONG GetCpFromAcp(LONG acp, BOOL fPrecise=0);
BOOL Get10Mode() const {return _f10Mode;}
LONG GetCpAccelerator() const {return _cpAccelerator;}
short GetFreezeCount() const {return _cFreeze;}
BOOL fCpMap() const {return _f10Mode;}
BOOL fInOurHost() const {return _fInOurHost;}
BOOL fInplaceActive() const {return _fInPlaceActive;}
BOOL fHideSelection() const {return _fHideSelection;}
BOOL fXltCRCRLFtoCR() const {return _fXltCRCRLFtoCR;}
BOOL fUsePassword() const {return _fUsePassword;}
BOOL fUseCRLF() const {return _f10Mode;}
BOOL fUseLineServices() const {return _bTypography & TO_ADVANCEDTYPOGRAPHY;}
BOOL fUseSimpleLineBreak() const {return (_bTypography & TO_SIMPLELINEBREAK) != 0;}
BOOL IsAutoFont() const {return _fAutoFont;};
BOOL IsAutoKeyboard() const {return _fAutoKeyboard;};
BOOL IsAutoFontSizeAdjust() const{return _fAutoFontSizeAdjust;};
BOOL IsBiDi() const {return (_dwCharFlags & fBIDI) != 0;}
BOOL IsComplexScript() const {return _dwCharFlags & fCOMPLEX_SCRIPT;}
BOOL IsFE() const {return (_dwCharFlags & fFE) != 0;}
BOOL IsInOutlineView() const {return _fOutlineView;}
BOOL IsMouseDown() const {return _fMouseDown;}
BOOL IsRich() const {return _fRich;}
BOOL IsLeftScrollbar() const;
BOOL IsSelectionBarRight() const {return IsLeftScrollbar(); }
void SetfSelChangeCharFormat() {_fSelChangeCharFormat = TRUE; }
BOOL DelayChangeNotification() {return _f10DeferChangeNotify;}
BOOL GetOOMNotified() {return _fOOMNotified;}
void SetOOMNotified(BOOL ff)
{
Assert(ff == 1 || ff == 0);
_fOOMNotified = ff;
}
//plain-text controls always use the UIFont
bool fUseUIFont() const {return !_fRich || _fUIFont;}
BOOL IsTransparent() {return _fTransparent;}
LONG GetZoomNumerator() const {return _wZoomNumerator;}
LONG GetZoomDenominator() const {return _wZoomDenominator;}
void SetZoomNumerator(LONG x) {_wZoomNumerator = (WORD)x;}
void SetZoomDenominator(LONG x) {_wZoomDenominator = (WORD)x;}
DWORD GetCpFirstStrong() {return _cpFirstStrong;}
void SetReleaseHost();
DWORD GetCharFlags() const {return _dwCharFlags;}
void OrCharFlags(DWORD dwFlags, IUndoBuilder* publdr = NULL);
void Beep();
void HandleKbdContextMenu();
void Set10Mode();
void SetContextDirection(BOOL fUseKbd = FALSE);
void ItemizeDoc(IUndoBuilder* publdr = NULL, LONG cchRange = -1);
HRESULT UpdateAccelerator();
HRESULT UpdateOutline();
HRESULT MoveSelection(LPARAM lparam, IUndoBuilder *publdr);
HRESULT PopAndExecuteAntiEvent(IUndoMgr *pundomgr, void *pAE);
HRESULT CutOrCopySelection(UINT msg, WPARAM wparam, LPARAM lparam,
IUndoBuilder *publdr);
HRESULT PasteDataObjectToRange(
IDataObject *pdo,
CTxtRange *prg,
CLIPFORMAT cf,
REPASTESPECIAL *rps,
IUndoBuilder *publdr,
DWORD dwFlags );
// Story access
CTxtStory * GetTxtStory () {return &_story;}
// Get access to cached CCharFormat and CParaFormat structures
const CCharFormat* GetCharFormat(LONG iCF)
{return _story.GetCharFormat(iCF);}
const CParaFormat* GetParaFormat(LONG iPF)
{return _story.GetParaFormat(iPF);}
LONG Get_iCF() {return _story.Get_iCF();}
LONG Get_iPF() {return _story.Get_iPF();}
void Set_iCF(LONG iCF) {_story.Set_iCF(iCF);}
void Set_iPF(LONG iPF) {_story.Set_iPF(iPF);}
HRESULT HandleStyle(CCharFormat *pCFTarget, const CCharFormat *pCF,
DWORD dwMask, DWORD dwMask2);
HRESULT HandleStyle(CParaFormat *pPFTarget, const CParaFormat *pPF,
DWORD dwMask);
// Get host interface pointer
ITextHost2 *GetHost() {return _phost;}
// Helper for getting CDocInfo ptr and creating it if NULL
CDocInfo * GetDocInfo();
HRESULT InitDocInfo();
LONG GetDefaultTab()
{return _pDocInfo ? _pDocInfo->dwDefaultTabStop : lDefaultTab;};
HRESULT SetDefaultLCID (LCID lcid);
HRESULT GetDefaultLCID (LCID *pLCID);
HRESULT SetDefaultLCIDFE (LCID lcid);
HRESULT GetDefaultLCIDFE (LCID *pLCID);
HRESULT SetDocumentType (LONG DocType);
HRESULT GetDocumentType (LONG *pDocType);
HRESULT GetFollowingPunct(LPSTR *plpstrFollowingPunct);
HRESULT SetFollowingPunct(LPSTR lpstrFollowingPunct);
HRESULT GetLeadingPunct (LPSTR *plpstrLeadingPunct);
HRESULT SetLeadingPunct (LPSTR lpstrLeadingPunct);
HRESULT GetViewKind (LRESULT *plres);
HRESULT SetViewKind (long Value);
HRESULT GetViewScale (long *pValue);
HRESULT SetViewScale (long Value);
// Notification Management Methods. In principle, these methods
// could form a separate class, but for space savings, they are part
// of the CTxtEdit class
HRESULT TxNotify(DWORD iNotify, void *pv); //@cmember General-purpose
// notification
void SendScrollEvent(DWORD iNotify); //@cmember Send scroll
// event
void SendUpdateEvent(); //@cmember Send EN_UPDATE
// event
//@cmember Use EN_PROTECTED
BOOL QueryUseProtection( CTxtRange *prg, // to query protection
UINT msg,WPARAM wparam, LPARAM lparam);// usage
//@cmember Indicates whether
// protection checking enabled
BOOL IsProtectionCheckingEnabled()
{return !!(_dwEventMask & ENM_PROTECTED);}
// FUTURE (alexgo): maybe we can use just one method :-)
BOOL IsntProtectedOrReadOnly(UINT msg, WPARAM wparam, LPARAM lparam);
BOOL IsProtected(UINT msg, WPARAM wparam, LPARAM lparam);
BOOL IsProtectedRange(UINT msg, WPARAM wparam, LPARAM lparam, CTxtRange *prg);
void SetStreaming(BOOL flag) {_fStreaming = flag;}
BOOL IsStreaming() {return _fStreaming;}
DWORD GetEventMask(){return _dwEventMask;}//@cmember Get event mask
//@cmember Handles EN_LINK
BOOL HandleLinkNotification(UINT msg, WPARAM wparam, LPARAM lparam,
BOOL *pfInLink = NULL);
HRESULT CloseFile (BOOL bSave);
// Helper for determine when to load message filter
BOOL LoadMsgFilter (UINT msg, WPARAM wparam, LPARAM lparam);
//--------------------------------------------------------------
// Inline proxies to ITextHost methods
//--------------------------------------------------------------
// Persisted properties (persisted by the host)
// Get methods: called by the Text Services component to get
// the value of a given persisted property
// FUTURE (alexgo) !! some of these need to get cleaned up
BOOL TxGetAutoSize() const;
BOOL TxGetAutoWordSel() const;
COLORREF TxGetBackColor() const {return _phost->TxGetSysColor(COLOR_WINDOW);}
TXTBACKSTYLE TxGetBackStyle() const;
HRESULT TxGetDefaultCharFormat(CCharFormat *pCF, DWORD &dwMask);
void TxGetClientRect(LPRECT prc) const {_phost->TxGetClientRect(prc);}
HRESULT TxGetExtent(SIZEL *psizelExtents)
{return _phost->TxGetExtent(psizelExtents);}
COLORREF TxGetForeColor() const {return _phost->TxGetSysColor(COLOR_WINDOWTEXT);}
DWORD TxGetMaxLength() const;
void TxSetMaxToMaxText(LONG cExtra = 0);
BOOL TxGetModified() const {return _fModified;}
HRESULT TxGetDefaultParaFormat(CParaFormat *pPF);
TCHAR TxGetPasswordChar() const;
BOOL TxGetReadOnly() const {return _fReadOnly;}
BOOL TxGetSaveSelection() const;
DWORD TxGetScrollBars() const ;
LONG TxGetSelectionBarWidth() const;
void TxGetViewInset(LPRECT prc, CDisplay *pdp) const;
BOOL TxGetWordWrap() const;
BOOL TxClientToScreen (LPPOINT lppt) {return _phost->TxClientToScreen(lppt); }
BOOL TxScreenToClient (LPPOINT lppt) {return _phost->TxScreenToClient(lppt); }
// ITextServices 2 wrappers
BOOL TxIsDoubleClickPending();
HRESULT TxGetWindow(HWND *phwnd);
HRESULT TxSetForegroundWindow();
HPALETTE TxGetPalette();
HRESULT TxGetFEFlags(LONG *pFEFlags);
// Allowed only when in in-place
// The host will fail if not in-place
HDC TxGetDC() {return _phost->TxGetDC();}
INT TxReleaseDC(HDC hdc) {return _phost->TxReleaseDC(hdc);}
// Helper functions for metafile support
INT TxReleaseMeasureDC( HDC hMeasureDC );
void TxUpdateWindow()
{
_phost->TxViewChange(_fInPlaceActive ? TRUE : FALSE);
}
void TxScrollWindowEx (INT dx, INT dy, LPCRECT lprcScroll, LPCRECT lprcClip,
HRGN hrgnUpdate, LPRECT lprcUpdate, UINT fuScroll);
void TxSetCapture(BOOL fCapture)
{_phost->TxSetCapture(fCapture);}
void TxSetFocus()
{_phost->TxSetFocus();}
// Allowed any-time
BOOL TxShowScrollBar(INT fnBar, BOOL fShow)
{return _phost->TxShowScrollBar(fnBar, fShow);}
BOOL TxEnableScrollBar (INT fuSBFlags, INT fuArrowFlags)
{return _phost->TxEnableScrollBar(fuSBFlags, fuArrowFlags);}
BOOL TxSetScrollRange(INT fnBar, LONG nMinPos, INT nMaxPos, BOOL fRedraw)
{return _phost->TxSetScrollRange(fnBar, nMinPos, nMaxPos, fRedraw);}
BOOL TxSetScrollPos (INT fnBar, INT nPos, BOOL fRedraw)
{return _phost->TxSetScrollPos(fnBar, nPos, fRedraw);}
void TxInvalidateRect(const LPRECT prc, BOOL fMode)
{_phost->TxInvalidateRect(prc, fMode);}
BOOL TxCreateCaret(HBITMAP hbmp, INT xWidth, INT yHeight)
{return _phost->TxCreateCaret(hbmp, xWidth, yHeight);}
BOOL TxShowCaret(BOOL fShow)
{return _phost->TxShowCaret(fShow);}
BOOL TxSetCaretPos(INT x, INT y)
{return _phost->TxSetCaretPos(x, y);}
BOOL TxSetTimer(UINT idTimer, UINT uTimeout)
{return _phost->TxSetTimer(idTimer, uTimeout);}
void TxKillTimer(UINT idTimer)
{_phost->TxKillTimer(idTimer);}
COLORREF TxGetSysColor(int nIndex){ return _phost->TxGetSysColor(nIndex);}
int TxWordBreakProc(TCHAR* pch, INT ich, INT cb, INT action, LONG cpStart, LONG cp = -1);
// IME
HIMC TxImmGetContext() {return _phost->TxImmGetContext();}
void TxImmReleaseContext(HIMC himc)
{_phost->TxImmReleaseContext( himc );}
// Selection access
CTxtSelection *GetSel();
CTxtSelection *GetSelNC() { return _psel; }
LONG GetSelMin() const;
LONG GetSelMost() const;
void GetSelRangeForRender(LONG *pcpSelMin, LONG *pcpSelMost);
void DiscardSelection();
// Property Change Helpers
HRESULT OnRichEditChange(BOOL fFlag);
HRESULT OnTxMultiLineChange(BOOL fMultiLine);
HRESULT OnTxReadOnlyChange(BOOL fReadOnly);
HRESULT OnShowAccelerator(BOOL fPropertyFlag);
HRESULT OnUsePassword(BOOL fPropertyFlag);
HRESULT OnTxHideSelectionChange(BOOL fHideSelection);
HRESULT OnSaveSelection(BOOL fPropertyFlag);
HRESULT OnAutoWordSel(BOOL fPropertyFlag);
HRESULT OnTxVerticalChange(BOOL fVertical);
HRESULT NeedViewUpdate(BOOL fPropertyFlag);
HRESULT OnWordWrapChange(BOOL fPropertyFlag);
HRESULT OnAllowBeep(BOOL fPropertyFlag);
HRESULT OnDisableDrag(BOOL fPropertyFlag);
HRESULT OnTxBackStyleChange(BOOL fPropertyFlag);
HRESULT OnMaxLengthChange(BOOL fPropertyFlag);
HRESULT OnCharFormatChange(BOOL fPropertyFlag);
HRESULT OnParaFormatChange(BOOL fPropertyFlag);
HRESULT OnClientRectChange(BOOL fPropertyFlag);
HRESULT OnScrollChange(BOOL fProperyFlag);
HRESULT OnSetTypographyOptions(WPARAM wparam, LPARAM lparam);
HRESULT OnHideSelectionChange(BOOL fHideSelection);
// Helpers
HRESULT TxCharFromPos(LPPOINT ppt, LRESULT *pacp);
HRESULT OnTxUsePasswordChange(BOOL fUsePassword);
HRESULT FormatAndPrint(
HDC hdcDraw,
HDC hicTargetDev,
DVTARGETDEVICE *ptd,
RECT *lprcBounds,
RECT *lprcWBounds);
HRESULT RectChangeHelper(
CDrawInfo *pdi,
DWORD dwDrawAspect,
LONG lindex,
void *pvAspect,
DVTARGETDEVICE *ptd,
HDC hdcDraw,
HDC hicTargetDev,
const RECT **pprcClient,
RECT *prcLocal);
//
// PUBLIC INTERFACE METHODS
//
// -----------------------------
// IUnknown interface
// -----------------------------
virtual HRESULT WINAPI QueryInterface(REFIID riid, void **ppvObject);
virtual ULONG WINAPI AddRef(void);
virtual ULONG WINAPI Release(void);
//--------------------------------------------------------------
// ITextServices methods
//--------------------------------------------------------------
//@cmember Generic Send Message interface
virtual HRESULT TxSendMessage(
UINT msg,
WPARAM wparam,
LPARAM lparam,
LRESULT *plresult);
//@cmember Rendering
virtual HRESULT TxDraw(
DWORD dwDrawAspect, // draw aspect
LONG lindex, // currently unused
void * pvAspect, // info for drawing
// optimizations (OCX 96)
DVTARGETDEVICE * ptd, // information on target
// device '
HDC hdcDraw, // rendering device context
HDC hicTargetDev, // target information
// context
LPCRECTL lprcBounds, // bounding (client)
// rectangle
LPCRECTL lprcWBounds, // clipping rect for
// metafiles
LPRECT lprcUpdate, // dirty rectange insde
// lprcBounds
BOOL (CALLBACK * pfnContinue) (DWORD), // for
// interupting
DWORD dwContinue, // long displays (currently
// unused)
LONG lViewID); // Specifies view to redraw
//@cmember Horizontal scrollbar support
virtual HRESULT TxGetHScroll(
LONG *plMin,
LONG *plMax,
LONG *plPos,
LONG *plPage,
BOOL * pfEnabled );
//@cmember Horizontal scrollbar support
virtual HRESULT TxGetVScroll(
LONG *plMin,
LONG *plMax,
LONG *plPos,
LONG *plPage,
BOOL * pfEnabled );
//@cmember Setcursor
virtual HRESULT OnTxSetCursor(
DWORD dwDrawAspect, // draw aspect
LONG lindex, // currently unused
void * pvAspect, // info for drawing
// optimizations (OCX 96)
DVTARGETDEVICE * ptd, // information on target
// device '
HDC hdcDraw, // rendering device context
HDC hicTargetDev, // target information
// context
LPCRECT lprcClient,
INT x,
INT y);
//@cmember Hit-test
virtual HRESULT TxQueryHitPoint(
DWORD dwDrawAspect, // draw aspect
LONG lindex, // currently unused
void * pvAspect, // info for drawing
// optimizations (OCX 96)
DVTARGETDEVICE * ptd, // information on target
// device '
HDC hdcDraw, // rendering device context
HDC hicTargetDev, // target information
// context
LPCRECT lprcClient,
INT x,
INT y,
DWORD * pHitResult);
//@member Inplace activate notification
virtual HRESULT OnTxInPlaceActivate(const RECT *prcClient);
//@member Inplace deactivate notification
virtual HRESULT OnTxInPlaceDeactivate();
//@member UI activate notification
virtual HRESULT OnTxUIActivate();
//@member UI deactivate notification
virtual HRESULT OnTxUIDeactivate();
//@member Get text in control
virtual HRESULT TxGetText(BSTR *pbstrText);
//@member Set text in control
virtual HRESULT TxSetText(LPCTSTR pszText);
//@member Get x position of
virtual HRESULT TxGetCurTargetX(LONG *);
//@member Get baseline position
virtual HRESULT TxGetBaseLinePos(LONG *);
//@member Get Size to fit / Natural size
virtual HRESULT TxGetNaturalSize(
DWORD dwAspect,
HDC hdcDraw,
HDC hicTargetDev,
DVTARGETDEVICE *ptd,
DWORD dwMode,
const SIZEL *psizelExtent,
LONG *pwidth,
LONG *pheight);
//@member Drag & drop
virtual HRESULT TxGetDropTarget( IDropTarget **ppDropTarget );
//@member Bulk bit property change notifications
virtual HRESULT OnTxPropertyBitsChange(DWORD dwMask, DWORD dwBits);
//@cmember Fetch the cached drawing size
virtual HRESULT TxGetCachedSize(DWORD *pdwWidth, DWORD *pdwHeight);
// IDispatch methods
STDMETHOD(GetTypeInfoCount)( UINT * pctinfo);
STDMETHOD(GetTypeInfo)(
UINT itinfo,
LCID lcid,
ITypeInfo **pptinfo);
STDMETHOD(GetIDsOfNames)(
REFIID riid,
OLECHAR **rgszNames,
UINT cNames,
LCID lcid,
DISPID * rgdispid);
STDMETHOD(Invoke)(
DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS * pdispparams,
VARIANT * pvarResult,
EXCEPINFO * pexcepinfo,
UINT * puArgErr);
// ITextDocument2 methods
STDMETHOD(GetName)(BSTR *pName);
STDMETHOD(GetSelection)(ITextSelection **ppSel);
STDMETHOD(GetStoryCount)(long *pCount);
STDMETHOD(GetStoryRanges)(ITextStoryRanges **ppStories);
STDMETHOD(GetSaved)(long *pValue);
STDMETHOD(SetSaved)(long Value);
STDMETHOD(GetDefaultTabStop)(float *pValue);
STDMETHOD(SetDefaultTabStop)(float Value);
STDMETHOD(New)();
STDMETHOD(Open)(VARIANT *pVar, long Flags, long CodePage);
STDMETHOD(Save)(VARIANT *pVar, long Flags, long CodePage);
STDMETHOD(Freeze)(long *pCount);
STDMETHOD(Unfreeze)(long *pCount);
STDMETHOD(BeginEditCollection)();
STDMETHOD(EndEditCollection)();
STDMETHOD(Undo)(long Count, long *prop);
STDMETHOD(Redo)(long Count, long *prop);
STDMETHOD(Range)(long cpFirst, long cpLim, ITextRange ** ppRange);
STDMETHOD(RangeFromPoint)(long x, long y, ITextRange **ppRange);
STDMETHOD(AttachMsgFilter)(IUnknown *pFilter);
STDMETHOD(GetEffectColor)( long Index, COLORREF *pcr);
STDMETHOD(SetEffectColor)( long Index, COLORREF cr);
STDMETHOD(GetCaretType)( long *pCaretType);
STDMETHOD(SetCaretType)( long CaretType);
STDMETHOD(GetImmContext)( long *pContext);
STDMETHOD(ReleaseImmContext)( long Context);
STDMETHOD(GetPreferredFont)( long cp, long CodePage, long lOption, long curCodepage,
long curFontSize, BSTR *pFontName, long *pPitchAndFamily, long *pNewFontSize);
STDMETHOD(GetNotificationMode)( long *plMode);
STDMETHOD(SetNotificationMode)( long lMode);
STDMETHOD(GetClientRect)( long Type, long *pLeft, long *pTop, long *pRight, long *pBottom);
STDMETHOD(GetSelectionEx)(ITextSelection **ppSel);
STDMETHOD(GetWindow)( long *phWnd );
STDMETHOD(GetFEFlags)( long *pFlags );
STDMETHOD(UpdateWindow)( void );
STDMETHOD(CheckTextLimit)( long cch, long *pcch );
STDMETHOD(IMEInProgress)( long lMode );
STDMETHOD(SysBeep)( void );
STDMETHOD(Update)( long lMode );
STDMETHOD(Notify)( long lNotify );
// IRichEditOle methods
STDMETHOD(GetClientSite) ( LPOLECLIENTSITE *lplpolesite);
STDMETHOD_(LONG,GetObjectCount) (THIS);
STDMETHOD_(LONG,GetLinkCount) (THIS);
STDMETHOD(GetObject) ( LONG iob, REOBJECT *lpreobject,
DWORD dwFlags);
STDMETHOD(InsertObject) ( REOBJECT *lpreobject);
STDMETHOD(ConvertObject) ( LONG iob, REFCLSID rclsidNew,
LPCSTR lpstrUserTypeNew);
STDMETHOD(ActivateAs) ( REFCLSID rclsid, REFCLSID rclsidAs);
STDMETHOD(SetHostNames) ( LPCSTR lpstrContainerApp,
LPCSTR lpstrContainerObj);
STDMETHOD(SetLinkAvailable) ( LONG iob, BOOL fAvailable);
STDMETHOD(SetDvaspect) ( LONG iob, DWORD dvaspect);
STDMETHOD(HandsOffStorage) ( LONG iob);
STDMETHOD(SaveCompleted) ( LONG iob, LPSTORAGE lpstg);
STDMETHOD(InPlaceDeactivate) (THIS);
STDMETHOD(ContextSensitiveHelp) ( BOOL fEnterMode);
STDMETHOD(GetClipboardData) ( CHARRANGE *lpchrg, DWORD reco,
LPDATAOBJECT *lplpdataobj);
STDMETHOD(ImportDataObject) ( LPDATAOBJECT lpdataobj,
CLIPFORMAT cf, HGLOBAL hMetaPict);
private:
// Get/Set text helpers
LONG GetTextRange(LONG cpFirst, LONG cch, TCHAR *pch);
LONG GetTextEx(GETTEXTEX *pgt, TCHAR *pch);
LONG GetTextLengthEx(GETTEXTLENGTHEX *pgtl);
//--------------------------------------------------------------
// WinProc dispatch methods
// Internally called by the WinProc
//--------------------------------------------------------------
// Keyboard
HRESULT OnTxKeyDown (WORD vkey, DWORD dwFlags, IUndoBuilder *publdr);
HRESULT OnTxChar (WORD vkey, DWORD dwFlags, IUndoBuilder *publdr);
HRESULT OnTxSysChar (WORD vkey, DWORD dwFlags, IUndoBuilder *publdr);
HRESULT OnTxSysKeyDown (WORD vkey, DWORD dwFlags, IUndoBuilder *publdr);
HRESULT OnTxSpecialKeyDown(WORD vkey, DWORD dwFlags, IUndoBuilder *publdr);
// Mouse
HRESULT OnTxLButtonDblClk(INT x, INT y, DWORD dwFlags);
HRESULT OnTxLButtonDown (INT x, INT y, DWORD dwFlags);
HRESULT OnTxLButtonUp (INT x, INT y, DWORD dwFlags, int ffOptions);
HRESULT OnTxRButtonDown (INT x, INT y, DWORD dwFlags);
HRESULT OnTxRButtonUp (INT x, INT y, DWORD dwFlags, int ffOptions);
HRESULT OnTxMouseMove (INT x, INT y, DWORD dwFlags, IUndoBuilder *publdr);
HRESULT OnTxMButtonDown (INT x, INT y, DWORD dwFlags);
HRESULT OnTxMButtonUp (INT x, INT y, DWORD dwFlags);
HCURSOR TxSetCursor(HCURSOR hcur, BOOL bText)
{
return (_phost && _fInOurHost) ? (_phost)->TxSetCursor2(hcur, bText) :
::SetCursor(hcur);
}
// Timer
HRESULT OnTxTimer(UINT idTimer);
void CheckInstallContinuousScroll ();
void CheckRemoveContinuousScroll ();
// Scrolling
HRESULT TxHScroll(WORD wCode, int xPos);
LRESULT TxVScroll(WORD wCode, int yPos);
HRESULT TxLineScroll(LONG cli, LONG cach);
// Magellan mouse scrolling
BOOL StopMagellanScroll();
// Paint, size message
LRESULT OnSize(HWND hwnd, WORD fwSizeType, int nWidth, int nHeight);
// Selection commands
LRESULT OnGetSelText(TCHAR *psz);
LRESULT OnGetSel(LONG *pacpMin, LONG *pacpMost);
LRESULT OnSetSel(LONG acpMin, LONG acpMost);
void OnExGetSel(CHARRANGE *pcr);
// Editing commands
void OnClear(IUndoBuilder *publdr);
// Format range related commands
LRESULT OnFormatRange(FORMATRANGE *pfr, SPrintControl prtcon, BOOL fSetupDC = FALSE);
BOOL OnDisplayBand(const RECT *prc, BOOL fPrintFromDraw);
// Scrolling commands
void OnScrollCaret();
// Focus messages
LRESULT OnSetFocus();
LRESULT OnKillFocus();
// System notifications
HRESULT OnContextMenu(LPARAM lparam);
// Get/Set other properties commands
LRESULT OnFindText(UINT msg, DWORD flags, FINDTEXTEX *pftex);
LRESULT OnGetWordBreakProc();
LRESULT OnSetWordBreakProc();
// Richedit stuff
LRESULT OnGetCharFormat(CHARFORMAT2 *pCF2, DWORD dwFlags);
LRESULT OnGetParaFormat(PARAFORMAT2 *pPF2, DWORD dwFlags);
LRESULT OnSetCharFormat(WPARAM wparam, CCharFormat *pCF, IUndoBuilder *publdr,
DWORD dwMask, DWORD dwMask2);
LRESULT OnSetParaFormat(WPARAM wparam, CParaFormat *pPF, IUndoBuilder *publdr,
DWORD dwMask);
LRESULT OnSetFont(HFONT hfont);
LRESULT OnSetFontSize(LONG yPoint, IUndoBuilder *publdr);
LRESULT OnDropFiles(HANDLE hDropFiles);
// Other services
HRESULT TxPosFromChar(LONG acp, LPPOINT ppt);
HRESULT TxGetLineCount(LRESULT *plres);
HRESULT TxLineFromCp(LONG acp, LRESULT *plres);
HRESULT TxLineLength(LONG acp, LRESULT *plres);
HRESULT TxLineIndex (LONG ili, LRESULT *plres);
HRESULT TxFindText(DWORD flags, LONG acpMin, LONG acpMost, const WCHAR *pch,
LONG *pacpMin, LONG *pacpMost);
HRESULT TxFindWordBreak(INT nFunction, LONG acp, LRESULT *plres);
HRESULT SetText(LPCWSTR pwszText, DWORD flags, LONG CodePage,
IUndoBuilder *publdr = NULL, LRESULT *plres = NULL);
LONG GetDefaultCodePage(UINT msg);
// Other miscelleneous
#ifdef DEBUG
void OnDumpPed();
#endif
COleObject * ObjectFromIOB(LONG iob);
// Only when the selection is going away should this value be NULLed. We
// use SelectionNull function rather than CTxtSelection::~CTxtSelection
// to avoid circular dependencies.
friend void SelectionNull(CTxtEdit *ped);
void SetSelectionToNull()
{if(_fFocus)
DestroyCaret();
_psel = NULL;
}
// Helper for converting a rich text object to plain text.
void HandleRichToPlainConversion();
// Helper for clearing the undo buffers.
void ClearUndo(IUndoBuilder *publdr);
// Helper for setting the automatic EOP
void SetRichDocEndEOP(LONG cchToReplace);
#ifndef MACPORT
// Helper for OnDropFiles. Not present on the Macintosh
LRESULT CTxtEdit::InsertFromFile ( LPCTSTR lpFile );
#endif
//
// Data Members
//
public:
static DWORD _dwTickDblClick; // time of last double-click
static POINT _ptDblClick; // position of last double-click
static HCURSOR _hcurArrow;
// static HCURSOR _hcurCross; // OutlineSymbol drag not impl
static HCURSOR _hcurHand;
static HCURSOR _hcurIBeam;
static HCURSOR _hcurItalic;
static HCURSOR _hcurSelBar;
typedef HRESULT (CTxtEdit::*FNPPROPCHG)(BOOL fPropFlag);
static FNPPROPCHG _fnpPropChg[MAX_PROPERTY_BITS];
// Only wrapper functions should use this member...
ITextHost2* _phost; // host
// word break procedure
EDITWORDBREAKPROC _pfnWB; // word break procedure
// display subsystem
CDisplay * _pdp; // display
CDisplayPrinter * _pdpPrinter;// display for printer
// undo
IUndoMgr * _pundo; // the undo stack
IUndoMgr * _predo; // the redo stack
// data transfer
CLightDTEngine _ldte; // the data transfer engine
CNotifyMgr _nm; // the notification manager (for floating
// OLE support
CObjectMgr * _pobjmgr; // handles most high-level OLE stuff
// Re-entrancy && Notification Management
CCallMgr * _pcallmgr;
// URL detection
CDetectURL * _pdetecturl;// manages auto-detection of URL strings
CDocInfo * _pDocInfo; // Document info (name, flags, code page)
CTxtBreaker * _pbrk; // text-breaker object
DWORD _dwEventMask; // Event mask
union
{
DWORD _dwFlags; // All together now
struct
{
#define TXTBITS (TXTBIT_RICHTEXT | \
TXTBIT_READONLY | \
TXTBIT_USEPASSWORD | \
TXTBIT_HIDESELECTION | \
TXTBIT_VERTICAL | \
TXTBIT_ALLOWBEEP | \
TXTBIT_DISABLEDRAG )
// State information. Flags in TXTBITS must appear in same bit
// positions as the following (saves code in Init())
// TXTBIT_RICHTEXT 0 _fRich
// TXTBIT_MULTILINE 1
// TXTBIT_READONLY 2 _fReadOnly
// TXTBIT_SHOWACCELERATOR 3
// TXTBIT_USEPASSWORD 4 _fUsePassword
// TXTBIT_HIDESELECTION 5 _fHideSelection
// TXTBIT_SAVESELECTION 6
// TXTBIT_AUTOWORDSEL 7
// TXTBIT_VERTICAL 8
// TXTBIT_SELECTIONBAR 9
// TXTBIT_WORDWRAP 10
// TXTBIT_ALLOWBEEP 11 _fAllowBeep
// TXTBIT_DISABLEDRAG 12 _fDisableDrag
// TXTBIT_VIEWINSETCHANGE 13
// TXTBIT_BACKSTYLECHANGE 14
// TXTBIT_MAXLENGTHCHANGE 15
// TXTBIT_SCROLLBARCHANGE 16
// TXTBIT_CHARFORMATCHANGE 17
// TXTBIT_PARAFORMATCHANGE 18
// TXTBIT_EXTENTCHANGE 19
// TXTBIT_CLIENTRECTCHANGE 20
#ifdef MACPORT
//NOTE: Different BIT ordering on the MAC requires that we flip the following bit fields.
// This is because they are unioned with _dwFlags which is bit compared using the
// TXTBIT_xxx flags
// IMPORTANT: For Mac, all 32 bits must be filled out, else they'll be shifted.
DWORD _fUpdateSelection :1; // 31: If true, update sel at level 0
DWORD _fDragged :1; // 30: Was the selection actually dragged?
DWORD _fKoreanBlockCaret :1; // 29: Display Korean block caret during Kor IME
DWORD _fCheckAIMM :1; // 28: if FALSE check if client has loaded AIMM
DWORD _fInOurHost :1; // 27: Whether we are in our host
DWORD _fSaved :1; // 26: ITextDocument Saved property
DWORD _fHost2 :1; // 25: TRUE iff _phost is a phost2
DWORD _fMButtonCapture :1; // 24: captured mButton down.
DWORD _fContinuousScroll :1; // 23: We have a timer running to support scrolling.
// Font binding (see also _fAutoFontSizeAdjust)
DWORD _fAutoKeyboard :1; // 22: auto switching keyboard
DWORD _fAutoFont :1; // 21: auto switching font
// Miscellaneous bits
DWORD _fUseUndo :1; // 20: Only set to zero if undo limit is 0
DWORD _f10Mode :1; // 19: Use Richedit10 behavior
DWORD _fRichPrevAccel :1; // 18: Rich state previous to accelerator
DWORD _fWantDrag :1; // 17: Want to initiate drag & drop
DWORD _fStreaming :1; // 16: Currently streaming text in or out
DWORD _fScrollCaretOnFocus:1; // 15: Scroll caret into view on set focus
DWORD _fModified :1; // 14: Control text has been modified
DWORD _fIconic :1; // 13: Control/parent window is iconized
DWORD _fDisableDrag :1; // 12: Disable Drag
DWORD _fAllowBeep :1; // 11: Allow beep at doc boundaries
DWORD _fTransparent :1; // 10: Background transparency
DWORD _fMouseDown :1; // 9: One mouse button is current down
DWORD _fEatLeftDown :1; // 8: Eat the next left down?
DWORD _fFocus :1; // 7: Control has keyboard focus
DWORD _fOverstrike :1; // 6: Overstrike mode vs insert mode
DWORD _fHideSelection :1; // 5: Hide selection when inactive
DWORD _fUsePassword :1; // 4: Whether to use password char
DWORD _fInPlaceActive :1; // 3: Control is in place active
DWORD _fReadOnly :1; // 2: Control is read only
DWORD _fCapture :1; // 1: Control has mouse capture
DWORD _fRich :1; // 0: Use rich-text formatting
#else
DWORD _fRich :1; // 0: Use rich-text formatting
DWORD _fCapture :1; // 1: Control has mouse capture
DWORD _fReadOnly :1; // 2: Control is read only
DWORD _fInPlaceActive :1; // 3: Control is in place active
DWORD _fUsePassword :1; // 4: Whether to use password char
DWORD _fHideSelection :1; // 5: Hide selection when inactive
DWORD _fOverstrike :1; // 6: Overstrike mode vs insert mode
DWORD _fFocus :1; // 7: Control has keyboard focus
DWORD _fEatLeftDown :1; // 8: Eat the next left down?
DWORD _fMouseDown :1; // 9: One mouse button is current down
DWORD _fTransparent :1; // 10: Background transparency
DWORD _fAllowBeep :1; // 11: Allow beep at doc boundaries
DWORD _fDisableDrag :1; // 12: Disable Drag
DWORD _fIconic :1; // 13: Control/parent window is iconized
DWORD _fModified :1; // 14: Control text has been modified
DWORD _fScrollCaretOnFocus:1; // 15: Scroll caret into view on set focus
DWORD _fStreaming :1; // 16: Currently streaming text in or out
DWORD _fWantDrag :1; // 17: Want to initiate drag & drop
DWORD _fRichPrevAccel :1; // 18: Rich state previous to accelerator
// Miscellaneous bits
DWORD _f10Mode :1; // 19: Use Richedit10 behavior
DWORD _fUseUndo :1; // 20: Only set to zero if undo limit is 0
// Font binding (see also _fAutoFontSizeAdjust)
DWORD _fAutoFont :1; // 21: auto switching font
DWORD _fAutoKeyboard :1; // 22: auto switching keyboard
DWORD _fContinuousScroll :1; // 23: Timer runs to support scrolling
DWORD _fMButtonCapture :1; // 24: captured mButton down
DWORD _fHost2 :1; // 25: TRUE iff _phost is a phost2
DWORD _fSaved :1; // 26: ITextDocument Saved property
DWORD _fInOurHost :1; // 27: Whether we are in our host
DWORD _fCheckAIMM :1; // 28: if FALSE check if client has loaded AIMM
DWORD _fKoreanBlockCaret :1; // 29: Display Korean block caret during Kor IME
// Drag/Drop UI refinement.
DWORD _fDragged :1; // 30: Was the selection actually dragged?
DWORD _fUpdateSelection :1; // 31: If true, update sel at level 0
#endif
};
};
#define CD_LTR 2
#define CD_RTL 3
WORD _nContextDir :2; // 0: no context; else CD_LTR or CD_RTL
WORD _nContextAlign :2; // Current context alignment; default CTX_NONE
WORD _fNeutralOverride :1; // Override direction of neutrals for layout
WORD _fSuppressNotify :1; // Don't send SelChange Notification if True
WORD _cActiveObjPosTries :2; // Counter protecting against infinite repaint
// loop when trying to put dragged-away
// in-place active object where it belongs
WORD _fSingleCodePage :1; // If TRUE, only allow single code page
// (currently doesn't check streaming...)
WORD _fSelfDestruct :1; // This CTxtEdit is selfdestructing
WORD _fAutoFontSizeAdjust:1; // Auto switching font size adjust
// Miscellaneous bits used for BiDi input
WORD _fHbrCaps :1; // Initialization of state of hebrew and caps lock status
WORD _fActivateKbdOnFocus:1; // Activate new kbd layout on WM_SETFOCUS
WORD _fOutlineView :1; // Outline view is active
// More IME bit
WORD _fIMEInProgress :1; // TRUE if IME composition is in progress
// Shutdown bit
WORD _fReleaseHost :1; // TRUE if edit control needs to release host in
// edit control destructor.
union
{
WORD _bEditStyle;
struct
{
WORD _fSystemEditMode :1; // 1: Behave more like sys edit
WORD _fSystemEditBeep :1; // 2: Beep when system edit does
WORD _fExtendBackColor :1; // 4: Extend BkClr to margin
WORD _fUnusedEditStyle1 :1; // 8: SES_MAPCPS not used
WORD _fUnusedEditStyle2 :1; // 16: SES_EMULATE10 not used
WORD _fUnusedEditStyle3 :1; // 32: SES_USECRLF not used
WORD _fUnusedEditStyle4 :1; // 64: SES_USEAIMM handled in cmsgflt
WORD _fUnusedEditStyle5 :1; // 128: SES_NOIME handled in cmsgflt
WORD _fUnusedEditStyle6 :1; // 256: SES_ALLOWBEEPS not used
WORD _fUpperCase :1; // 512: Convert all input to upper case
WORD _fLowerCase :1; // 1024: Convert all input to lower case
WORD _fNoInputSequenceChk:1; // 2048: Disable ISCheck
WORD _fBiDi :1; // 4096: Set Bidi document
WORD _fScrollCPOnKillFocus:1;// 8192: Scroll to cp=0 upon Kill focus
WORD _fXltCRCRLFtoCR :1; // 16384: Translate CRCRLF to CR instead of ' '
WORD _fUnUsedEditStyle :1; // 32768: Unused
};
};
WORD _fOOMNotified :1; // flag determining if a OOM notification was already sent
WORD _fDualFont :1; // Dual font support for FE typing
// Default = TRUE
WORD _fUIFont :1; // If TRUE, use UI font
WORD _fItemizePending :1; // Updated range hasn't been itemized
WORD _fSelChangeCharFormat :1; // TRUE if the selection has been used to change
// the character format of a specific set of
// characters. The purpose of this has to do with
// maintaining the illusion of having a default
// charformat on machines whose default language
// is a complex script i.e. Arabic. The idea is
// that all EM_SETCHARFORMAT messages that would
// just update the default format, are converted
// to SCF_ALL so that all the text has the change
// applied to it. Bug 5462 caused this change.
// (a-rsail).
WORD _fExWordBreakProc :1; // detemines which WordbreakProc Callback to use
// Extended or regular
WORD _f10DeferChangeNotify :1; // 1.0 mode immulation, defer selection change
// notification until the mouse is up
WORD _fUnUsed :9; // Available for use
DWORD _dwCharFlags; // Char flags for text in control
private:
SHORT _cpAccelerator; // Range for accelerator
BYTE _bTypography; // Typography options
BYTE _bMouseFlags; // CTRL, Mouse buttons, SHIFT
SHORT _cFreeze; // Freeze count
WORD _wZoomNumerator;
WORD _wZoomDenominator;
// Have to have mouse point on a per-instance basis to handle
// simultaneous scrolling of two or more controls.
// TODO: convert this back to DWORD from whence it came (lparam)
POINT _mousePt; // Last known mouse position.
// NOTE: the int's can be switched to SHORTs, since pixels are used and
// 32768 pixels is a mighty big screen!
DWORD _cchTextMost; // Maximum allowed text
DWORD _cpFirstStrong; // cp of first strong directional character.
// used for plain text controls whose direcitonality
// depends on text input into the control.
friend class CRchTxtPtr;
IUnknown * _punk; // IUnknown to use
class CUnknown : public IUnknown
{
friend class CCallMgr;
private:
DWORD _cRefs; // Reference count
public:
void Init() {_cRefs = 1; }
HRESULT WINAPI QueryInterface(REFIID riid, void **ppvObj);
ULONG WINAPI AddRef();
ULONG WINAPI Release();
};
friend class CUnknown;
CUnknown _unk; // Object that implements IUnknown
CTxtStory _story;
CTxtSelection * _psel; // Selection object
ITextMsgFilter * _pMsgFilter; // Pointer to message filter.
};
#endif