www.pudn.com > GdiplusTest16.zip > GdiPlusStringFormat.h


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