windows-nt/Source/XPSP1/NT/public/sdk/inc/gdiplus/gdiplusstringformat.h
2020-09-26 16:20:57 +08:00

334 lines
7.7 KiB
C++

/**************************************************************************\
*
* Copyright (c) 1998-2001, Microsoft Corp. All Rights Reserved.
*
* Module Name:
*
* GdiplusStringFormat.h
*
* Abstract:
*
* GDI+ StringFormat class
*
\**************************************************************************/
#ifndef _GDIPLUSSTRINGFORMAT_H
#define _GDIPLUSSTRINGFORMAT_H
class StringFormat : public GdiplusBase
{
public:
friend class Graphics;
friend class GraphicsPath;
StringFormat(
IN INT formatFlags = 0,
IN LANGID language = LANG_NEUTRAL
)
{
nativeFormat = NULL;
lastError = DllExports::GdipCreateStringFormat(
formatFlags,
language,
&nativeFormat
);
}
static const StringFormat *GenericDefault();
static const StringFormat *GenericTypographic();
StringFormat(
IN const StringFormat *format
)
{
nativeFormat = NULL;
lastError = DllExports::GdipCloneStringFormat(
format ? format->nativeFormat : NULL,
&nativeFormat
);
}
StringFormat *Clone() const
{
GpStringFormat *clonedStringFormat = NULL;
lastError = DllExports::GdipCloneStringFormat(
nativeFormat,
&clonedStringFormat
);
if (lastError == Ok)
return new StringFormat(clonedStringFormat, lastError);
else
return NULL;
}
~StringFormat()
{
DllExports::GdipDeleteStringFormat(nativeFormat);
}
Status SetFormatFlags(IN INT flags)
{
return SetStatus(DllExports::GdipSetStringFormatFlags(
nativeFormat,
flags
));
}
INT GetFormatFlags() const
{
INT flags;
SetStatus(DllExports::GdipGetStringFormatFlags(nativeFormat, &flags));
return flags;
}
Status SetAlignment(IN StringAlignment align)
{
return SetStatus(DllExports::GdipSetStringFormatAlign(
nativeFormat,
align
));
}
StringAlignment GetAlignment() const
{
StringAlignment alignment;
SetStatus(DllExports::GdipGetStringFormatAlign(
nativeFormat,
&alignment
));
return alignment;
}
Status SetLineAlignment(IN StringAlignment align)
{
return SetStatus(DllExports::GdipSetStringFormatLineAlign(
nativeFormat,
align
));
}
StringAlignment GetLineAlignment() const
{
StringAlignment alignment;
SetStatus(DllExports::GdipGetStringFormatLineAlign(
nativeFormat,
&alignment
));
return alignment;
}
Status SetHotkeyPrefix(IN HotkeyPrefix hotkeyPrefix)
{
return SetStatus(DllExports::GdipSetStringFormatHotkeyPrefix(
nativeFormat,
(INT)hotkeyPrefix
));
}
HotkeyPrefix GetHotkeyPrefix() const
{
HotkeyPrefix hotkeyPrefix;
SetStatus(DllExports::GdipGetStringFormatHotkeyPrefix(
nativeFormat,
(INT*)&hotkeyPrefix
));
return hotkeyPrefix;
}
Status SetTabStops(
IN REAL firstTabOffset,
IN INT count,
IN const REAL *tabStops
)
{
return SetStatus(DllExports::GdipSetStringFormatTabStops(
nativeFormat,
firstTabOffset,
count,
tabStops
));
}
INT GetTabStopCount() const
{
INT count;
SetStatus(DllExports::GdipGetStringFormatTabStopCount(nativeFormat, &count));
return count;
}
Status GetTabStops(
IN INT count,
OUT REAL *firstTabOffset,
OUT REAL *tabStops
) const
{
return SetStatus(DllExports::GdipGetStringFormatTabStops(
nativeFormat,
count,
firstTabOffset,
tabStops
));
}
Status SetDigitSubstitution(
IN LANGID language,
IN StringDigitSubstitute substitute
)
{
return SetStatus(DllExports::GdipSetStringFormatDigitSubstitution(
nativeFormat,
language,
substitute
));
}
LANGID GetDigitSubstitutionLanguage(
) const
{
LANGID language;
SetStatus(DllExports::GdipGetStringFormatDigitSubstitution(
nativeFormat,
&language,
NULL
));
return language;
}
StringDigitSubstitute GetDigitSubstitutionMethod(
) const
{
StringDigitSubstitute substitute;
SetStatus(DllExports::GdipGetStringFormatDigitSubstitution(
nativeFormat,
NULL,
&substitute
));
return substitute;
}
Status SetTrimming(IN StringTrimming trimming)
{
return SetStatus(DllExports::GdipSetStringFormatTrimming(
nativeFormat,
trimming
));
}
StringTrimming StringFormat::GetTrimming() const
{
StringTrimming trimming;
SetStatus(DllExports::GdipGetStringFormatTrimming(
nativeFormat,
&trimming
));
return trimming;
}
Status SetMeasurableCharacterRanges(
IN INT rangeCount,
IN const CharacterRange *ranges
)
{
return SetStatus(DllExports::GdipSetStringFormatMeasurableCharacterRanges(
nativeFormat,
rangeCount,
ranges
));
}
INT GetMeasurableCharacterRangeCount()
{
INT count;
SetStatus(DllExports::GdipGetStringFormatMeasurableCharacterRangeCount(
nativeFormat,
&count
));
return count;
}
Status GetLastStatus() const
{
Status lastStatus = lastError;
lastError = Ok;
return lastStatus;
}
protected:
Status SetStatus(GpStatus newStatus) const
{
if (newStatus == Ok)
{
return Ok;
}
else
{
return lastError = newStatus;
}
}
StringFormat(const StringFormat &source)
{
nativeFormat = NULL;
lastError = DllExports::GdipCloneStringFormat(
source.nativeFormat,
&nativeFormat
);
}
StringFormat& operator=(const StringFormat &source)
{
DllExports::GdipDeleteStringFormat(nativeFormat);
lastError = DllExports::GdipCloneStringFormat(
source.nativeFormat,
&nativeFormat
);
return *this;
}
StringFormat(GpStringFormat * clonedStringFormat, Status status)
{
lastError = status;
nativeFormat = clonedStringFormat;
}
GpStringFormat *nativeFormat;
mutable Status lastError;
};
static BYTE GenericTypographicStringFormatBuffer[sizeof(StringFormat)] = {0};
static BYTE GenericDefaultStringFormatBuffer[sizeof(StringFormat)] = {0};
inline const StringFormat *StringFormat::GenericDefault()
{
StringFormat * genericDefaultStringFormat =
(StringFormat*)GenericDefaultStringFormatBuffer;
genericDefaultStringFormat->lastError =
DllExports::GdipStringFormatGetGenericDefault(
&(genericDefaultStringFormat->nativeFormat)
);
return genericDefaultStringFormat;
}
inline const StringFormat *StringFormat::GenericTypographic()
{
StringFormat * genericTypographicStringFormat =
(StringFormat*)GenericTypographicStringFormatBuffer;
genericTypographicStringFormat->lastError =
DllExports::GdipStringFormatGetGenericTypographic(
&genericTypographicStringFormat->nativeFormat
);
return genericTypographicStringFormat;
}
#endif // !_GDIPLUSSTRINGFORMAT_H