|
|
/**************************************************************************\
* * 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
|