📄 tomfmt.cpp
字号:
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetLineSpacingRule (
long *pValue) //@parm Out parm to receive line spacing rule
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetLineSpacingRule");
return GetParameter((long *)&_PF.bLineSpacingRule, PFM_LINESPACING,
1, pValue);
}
/*
* ITextPara::GetListAlignment(long * pValue)
*
* @mfunc
* Property get method that gets the kind of bullet/numbering text
* alignment to use with paragraphs.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetListAlignment(
long * pValue) //@parm Out parm to receive numbering alignment
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetListAlignment");
HRESULT hr = GetParameter((long *)&_PF.wNumberingStyle,
PFM_NUMBERINGSTYLE, 2, pValue);
if(hr == NOERROR && *pValue != tomUndefined)
*pValue &= 3; // Kill all but alignment bits
return hr;
}
/*
* ITextPara::GetListLevelIndex(long * pValue)
*
* @mfunc
* Property get method that gets the list level index to use
* with paragraphs.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetListLevelIndex(
long * pValue) //@parm Out parm to receive list level index
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetListLevelIndex");
HRESULT hr = GetParameter((long *)&_PF.wNumberingStyle,
PFM_NUMBERINGSTYLE, 2, pValue);
if(hr == NOERROR)
*pValue = (*pValue >> 4) & 0xf; // Kill all but list level index
return hr;
}
/*
* ITextPara::GetListStart(long * pValue)
*
* @mfunc
* Property get method that gets the numbering start value to use
* with paragraphs.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetListStart(
long * pValue) //@parm Out parm to receive numbering start value
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetListSpace");
return GetParameter((long *)&_PF.wNumberingStart, PFM_NUMBERINGSTART, 2,
pValue);
}
/*
* ITextPara::GetListTab(long * pValue)
*
* @mfunc
* Property get method that gets the distance between the first indent
* and the start of text on the first line.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetListTab(
float * pValue) //@parm Out parm to receive list tab to text
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetListTab");
return GetParameter((long *)&_PF.wNumberingTab, PFM_NUMBERINGTAB, -2,
(long *)pValue);
}
/*
* ITextPara::GetListType(long * pValue)
*
* @mfunc
* Property get method that gets the type of list to use
* with paragraphs.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*
* @devnote
* TOM's values are:
*
* List Type Value Meaning
* tomNoList 0 Turn off paragraph numbering
* tomListBullet 1 default is bullet
* tomNumberAsArabic 2 0, 1, 2, ...
* tomNumberAsLCLetter 3 a, b, c, ...
* tomNumberAsUCLetter 4 A, B, C, ...
* tomNumberAsLCRoman 5 i, ii, iii, ...
* tomNumberAsUCRoman 6 I, II, III, ...
* tomNumberAsSequence 7 ListStart is 1st Unicode to use
*
* Nibble 2 of _PF.wNumberingStyle says whether to number with trailing
* parenthesis, both parentheses, follow by period, or leave plain. This
* This nibble needs to be returned in nibble 4 of *pValue.
*/
STDMETHODIMP CTxtPara::GetListType (
long *pValue) //@parm Out parm to receive type of list
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetListType");
HRESULT hr = GetParameter((long *)&_PF.wNumbering,
PFM_NUMBERING, 2, pValue);
// OR in Number style bits (see note above)
if(hr == NOERROR && *pValue != tomUndefined)
*pValue |= (_PF.wNumberingStyle << 8) & 0xf0000;
return hr;
}
/*
* ITextPara::GetNoLineNumber(long * pValue)
*
* @mfunc
* Property get method that gets the tomBool for whether to
* suppress line numbering for the paragraphs in a range.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetNoLineNumber (
long *pValue) //@parm Out parm to receive tomBool
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetNoLineNumber");
return EffectGetter(pValue, PFM_NOLINENUMBER);
}
/*
* ITextPara::GetPageBreakBefore(long * pValue)
*
* @mfunc
* Property get method that gets the tomBool for whether to
* eject the page before the paragraphs in this range.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetPageBreakBefore (
long *pValue) //@parm Out parm to receive tomBool
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetPageBreakBefore");
return EffectGetter(pValue, PFM_PAGEBREAKBEFORE);
}
/*
* ITextPara::GetRightIndent(float * pValue)
*
* @mfunc
* Property get method that gets the amount used to indent the
* right margin of a paragraph relative to the right margin. The
* amount is given in floating-point points.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetRightIndent (
float *pValue) //@parm Out parm to receive right indent
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetRightIndent");
return GetParameter(&_PF.dxRightIndent, PFM_RIGHTINDENT, -4,
(long *)pValue);
}
/*
* ITextPara::GetSpaceAfter(float * pValue)
*
* @mfunc
* Property get method that gets the amount used to space vertically
* after a paragraph. The amount is given in floating-point points.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetSpaceAfter (
float *pValue) //@parm Out parm to receive space-after value
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetSpaceAfter");
return GetParameter(&_PF.dySpaceAfter, PFM_SPACEAFTER, -4,
(long *)pValue);
}
/*
* ITextPara::GetSpaceBefore(float * pValue)
*
* @mfunc
* Property get method that gets the amount used to space vertically
* before starting a paragraph. The amount is given in floating-point
* points.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetSpaceBefore (
float *pValue) //@parm Out parm to receive space-before value
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetSpaceBefore");
return GetParameter(&_PF.dySpaceBefore, PFM_SPACEBEFORE, -4,
(long *)pValue);
}
/*
* ITextPara::GetStyle(long * pValue)
*
* @mfunc
* Property get method that gets the style handle for the
* paragraphs in this range.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetStyle (
long * pValue) //@parm Out parm to receive paragraph style handle
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetStyle");
return GetParameter((long *)&_PF.sStyle, PFM_STYLE, 2, pValue);
}
/*
* ITextPara::GetTab(long iTab, float *ptbPos, long *ptAlign, long *ptbLeader)
*
* @mfunc
* Method that gets tab parameters for the iTab th tab, that
* is, set *ptbPos, *ptbAlign, and *ptbLeader equal to the iTab th
* tab's displacement, alignment, and leader style, respectively.
* iTab has special values defined in the table below. The
* displacement is given in floating-point points.
*
* @rdesc
* HRESULT = (!pdxptab || !ptbt || !pstyle || no iTab tab) ?
* E_INVALIDARG : (exists) ? NOERROR : S_FALSE
*/
STDMETHODIMP CTxtPara::GetTab (
long iTab, //@parm Index of tab to retrieve info for
float * ptbPos, //@parm Out parm to receive tab displacement
long * ptbAlign, //@parm Out parm to receive tab type
long * ptbLeader) //@parm Out parm to receive tab style
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetTab");
if(!ptbPos || !ptbAlign || !ptbLeader)
return E_INVALIDARG;
*ptbAlign = *ptbLeader = 0;
HRESULT hr = UpdateFormat(); // If live Para object, update
// _PF to current _prg values
if(!(_PF.dwMask & PFM_TABSTOPS)) // Tabs are undefined (more than
{ // one set of definitions)
*ptbPos = tomFloatUndefined;
return hr;
}
LONG dxTab = 0; // Default 0 in case GetTab fails
if(iTab < 0 && iTab >= tomTabBack) // Save *ptbPos if it's supposed
dxTab = FPPTS_TO_TWIPS(*ptbPos); // be used (in general might get
// floating-point error)
hr = _PF.GetTab(iTab, &dxTab, ptbAlign, ptbLeader);
*ptbPos = TWIPS_TO_FPPTS(dxTab);
return (hr == NOERROR && !dxTab) ? S_FALSE : hr;
}
/*
* ITextPara::GetTabCount(long * pValue)
*
* @mfunc
* Property get method that gets the tab count.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetTabCount (
long * pValue) //@parm Out parm to receive tab count
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetTabCount");
HRESULT hr = GetParameter((long *)&_PF.cTabCount, PFM_TABSTOPS, 2, pValue);
if (hr == NOERROR && *pValue != tomUndefined && _PF.cTabCount == 1 &&
(_PF.rgxTabs[0] & PFT_DEFAULT) == PFT_DEFAULT)
{
*pValue = 0; // Our internal count of 1
} // for default tab should
return hr; // be 0 for TOM
}
/*
* ITextPara::GetWidowControl(long * pValue)
*
* @mfunc
* Property get method that gets the tomBool for whether to
* control widows and orphans for the paragraphs in a range.
*
* @rdesc
* HRESULT = (!pValue) ? E_INVALIDARG : NOERROR;
*/
STDMETHODIMP CTxtPara::GetWidowControl (
long * pValue) //@parm Out parm to receive tomBool
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::GetWidowControl");
return EffectGetter(pValue, PFM_NOWIDOWCONTROL);
}
/*
* ITextPara::IsEqual(ITextPara * pPara, long * pB)
*
* @mfunc
* Method that sets pB = tomTrue if this range has the same
* properties as *pPara. The IsEqual() method ignores entries for which
* either para object has a tomUndefined value.
*
* @rdesc
* HRESULT = (equal objects) ? NOERROR : S_FALSE
*/
STDMETHODIMP CTxtPara::IsEqual (
ITextPara * pPara, //@parm ITextPara to compare to
long * pB) //@parm Out parm to receive comparison result
{
#ifndef PEGASUS
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::IsEqual");
if(pB)
*pB = tomFalse;
if(!SameVtables(this, pPara))
return S_FALSE;
HRESULT hr = UpdateFormat(); // Update _PFs in case they are
if(hr != NOERROR) // attached to ranges
return hr;
CTxtPara *pP = (CTxtPara *)pPara;
hr = pP->UpdateFormat();
if(hr != NOERROR)
return hr;
CParaFormat *pPF = &(pP->_PF);
DWORD dwMask = pPF->dwMask; // Save mask
if(_PF.dwMask != dwMask) // The two have to be the same
return S_FALSE; // for equality
_PF.Delta(pPF);
if(dwMask != pPF->dwMask)
{
pPF->dwMask = dwMask;
return S_FALSE;
}
if(pB)
*pB = tomTrue;
#endif
return NOERROR;
}
/*
* ITextPara::Reset(long Value)
*
* @mfunc
* Method that resets the paragraph formatting to the default
* values to 1) those defined by the RTF \pard control word (Value =
* tomDefault), and 2) all undefined values (Value = tomUndefined).
*
* @rdesc
* HRESULT = (if success) ? NOERROR :
* (protected) ? E_ACCESSDENIED : E_OUTOFMEMORY
*/
STDMETHODIMP CTxtPara::Reset (
long Value) //@parm Kind of reset (tomDefault or tomUndefined)
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::Reset");
HRESULT hr = CanChange(NULL);
if(hr != NOERROR) // Takes care of zombie
return hr; // and protection
if(Value == tomDefault)
{
if(_prg)
{
CopyFormat(&_PF, _prg->GetPed()->GetParaFormat(-1), sizeof(CParaFormat));
FormatSetter(PFM_ALL2);
}
else
_PF.InitDefault(0);
}
else if(Value == tomUndefined && !_prg) // Only applicable
_PF.dwMask = 0; // for clones
else
return E_INVALIDARG;
return NOERROR;
}
/*
* ITextPara::SetAlignment(long Value)
*
* @mfunc
* Property put method that sets the paragraph alignment to Value
*
* @rdesc
* HRESULT = (Value > 3) ? E_INVALIDARG :
* (if success) ? NOERROR :
* (protected) ? E_ACCESSDENIED : E_OUTOFMEMORY
*/
STDMETHODIMP CTxtPara::SetAlignment (
long Value) //@parm New paragraph alignment
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::SetAlignment");
if(Value == tomUndefined) // NINCH
return NOERROR;
if((DWORD)Value > 3)
return E_INVALIDARG;
_PF.wAlignment = g_rgTOMtoREAlign[Value];
return FormatSetter(PFM_ALIGNMENT);
}
/*
* ITextPara::SetHyphenation(long Value)
*
* @mfunc
* Property put method that sets the tomBool that controls the
* suppression of hyphenation for the paragraphs in the range.
*
* @rdesc
* HRESULT = (if success) ? NOERROR :
* (protected) ? E_ACCESSDENIED : E_OUTOFMEMORY
*/
STDMETHODIMP CTxtPara::SetHyphenation (
long Value) //@parm New tomBool for suppressing hyphenation
{
TRACEBEGIN(TRCSUBSYSTOM, TRCSCOPEEXTERN, "CTxtPara::SetHyphenation");
if(Value == tomTrue) // Invert meaning for RichEdit
Value = tomFalse; // Word inverted it late in the game...
else if (Value == tomFalse)
Value = tomTrue;
return EffectSetter(Value, PFM_DONOTHYPHEN);
}
/*
* ITextPara::SetDuplicate(ITextPara *pPara)
*
* @mfunc
* Property put method that applies the paragraph formatting of pPara
* to this para object. Note that tomUndefined values in pPara have
* no effect (NINCH - NoInputNoCHange).
*
* @rdesc
* HRESULT = (!pPara) ? E_INVALIDARG :
* (if success) ? NOERROR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -