gdiplus 水印_GdiPlusFont.h

本文详细介绍了GDI+中字体的创建与操作方法,包括从设备上下文、逻辑字体及字体家族创建字体的过程,并提供了获取字体信息的相关API说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//Download by http://www.NewXing.com

/**************************************************************************\

*

* Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved.

*

* Module Name:

*

* GdiplusFont.h

*

* Abstract:

*

* Font related declarations

*

\**************************************************************************/

#ifndef _GDIPLUSFONT_H

#define _GDIPLUSFONT_H

inline

Font::Font(IN HDC hdc)

{

GpFont *font = NULL;

lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);

#ifndef DCR_USE_NEW_135429

if ((INT) lastResult >= 10)

lastResult = NotFound;

#endif

SetNativeFont(font);

}

#ifdef DCR_USE_NEW_127084

inline

Font::Font(IN HDC hdc,

IN const HFONT hfont)

{

GpFont *font = NULL;

if (hfont)

{

LOGFONTA lf;

if(GetObjectA(hfont, sizeof(LOGFONTA), &lf))

lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, &lf, &font);

else

lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);

}

else

{

lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);

}

#ifndef DCR_USE_NEW_135429

if ((INT) lastResult >= 10)

lastResult = NotFound;

#endif

SetNativeFont(font);

}

#endif

inline

Font::Font(IN HDC hdc,

IN const LOGFONTW* logfont)

{

GpFont *font = NULL;

if (logfont)

{

lastResult = DllExports::GdipCreateFontFromLogfontW(hdc, logfont, &font);

}

else

{

lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);

}

#ifndef DCR_USE_NEW_135429

if ((INT) lastResult >= 10)

lastResult = NotFound;

#endif

SetNativeFont(font);

}

inline

Font::Font(IN HDC hdc,

IN const LOGFONTA* logfont)

{

GpFont *font = NULL;

if (logfont)

{

lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, logfont, &font);

}

else

{

lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);

}

#ifndef DCR_USE_NEW_135429

if ((INT) lastResult >= 10)

lastResult = NotFound;

#endif

SetNativeFont(font);

}

inline

Font::Font(

IN const FontFamily * family,

IN REAL emSize,

IN INT style,

IN Unit unit

)

{

GpFont *font = NULL;

lastResult = DllExports::GdipCreateFont(family ? family->nativeFamily : NULL,

emSize,

style,

unit,

&font);

#ifndef DCR_USE_NEW_135429

if ((INT) lastResult >= 10)

lastResult = NotFound;

#endif

SetNativeFont(font);

}

inline

Font::Font(

IN const WCHAR * familyName,

IN REAL emSize,

IN INT style,

IN Unit unit,

IN const FontCollection * fontCollection

)

{

FontFamily family(familyName, fontCollection);

GpFont * font = NULL;

lastResult = family.GetLastStatus();

if (lastResult == Ok)

{

lastResult = DllExports::GdipCreateFont(family.nativeFamily,

emSize,

style,

unit,

&font);

}

#ifndef DCR_USE_NEW_135429

if ((INT) lastResult >= 10)

lastResult = NotFound;

#endif

SetNativeFont(font);

}

inline Status

Font::GetLogFontA(IN const Graphics *g,

OUT LOGFONTA *logfontA) const

{

return SetStatus(DllExports::GdipGetLogFontA(nativeFont, g ? g->nativeGraphics : NULL, logfontA));

}

inline Status

Font::GetLogFontW(IN const Graphics *g,

OUT LOGFONTW *logfontW) const

{

return SetStatus(DllExports::GdipGetLogFontW(nativeFont, g ? g->nativeGraphics : NULL, logfontW));

}

inline Font*

Font::Clone() const

{

GpFont *cloneFont = NULL;

SetStatus(DllExports::GdipCloneFont(nativeFont, &cloneFont));

return new Font(cloneFont, lastResult);

}

inline

Font::~Font()

{

DllExports::GdipDeleteFont(nativeFont);

}

// Operations

inline BOOL

Font::IsAvailable() const

{

return (nativeFont ? TRUE : FALSE);

}

inline Status

Font::GetFamily(OUT FontFamily *family) const

{

if (family == NULL)

{

return SetStatus(InvalidParameter);

}

Status status = DllExports::GdipGetFamily(nativeFont, &(family->nativeFamily));

family->SetStatus(status);

return SetStatus(status);

}

inline INT

Font::GetStyle() const

{

INT style;

SetStatus(DllExports::GdipGetFontStyle(nativeFont, &style));

return style;

}

inline REAL

Font::GetSize() const

{

REAL size;

SetStatus(DllExports::GdipGetFontSize(nativeFont, &size));

return size;

}

inline Unit

Font::GetUnit() const

{

Unit unit;

SetStatus(DllExports::GdipGetFontUnit(nativeFont, &unit));

return unit;

}

inline REAL

Font::GetHeight(IN const Graphics *graphics) const

{

REAL height;

SetStatus(DllExports::GdipGetFontHeight(

nativeFont,

graphics ? graphics->nativeGraphics : NULL,

&height

));

return height;

}

#ifdef DCR_USE_NEW_125467

inline REAL

Font::GetHeight(IN REAL dpi = 0) const

{

REAL height;

SetStatus(DllExports::GdipGetFontHeightGivenDPI(nativeFont, dpi, &height));

return height;

}

#endif

// protected method

inline

Font::Font(IN GpFont* font,

IN Status status)

{

lastResult = status;

SetNativeFont(font);

}

// protected method

inline VOID

Font::SetNativeFont(GpFont *Font)

{

nativeFont = Font;

}

inline Status

Font::GetLastStatus(void) const

{

return lastResult;

}

// protected method

inline Status

Font::SetStatus(IN Status status) const

{

if (status != Ok)

return (lastResult = status);

else

return status;

}

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值