升级MFC到.NET之一:CFont转换为Font

原因:MFC下的CFont类型提供了对Windows下字体操作的封装,现有MFC项目的逻辑部分把创建好的CFont传递给画面来进行显示,所以在把CWnd类型的画面转换为Form类型后,需要将CFont类型转换为Drawing::Font类型来设置Form画面的字体。
解决方法:利用CFont的GetLogFont方法能够获取字体的逻辑结构,Drawing::Font也具有一个FromLogFont的方法来创建Font,但直接使用非托管资源LOGFONT来创建时不能成功的,可以实现一个托管的LOGFONT结构来传递字体结构解决问题。
代码示例:
1.建立托管的LOGFONT结构

[StructLayout(LayoutKind::Sequential)]
typedef ref class MANAGED_LOGFONT
{
public:
    int lfHeight;
    int lfWidth;
    int lfEscapement;
    int lfOrientation;
    int lfWeight;
    Byte lfItalic;
    Byte lfUnderline;
    Byte lfStrikeOut;
    Byte lfCharSet;
    Byte lfOutPrecision;
    Byte lfClipPrecision;
    Byte lfQuality;
    Byte lfPitchAndFamily;
    [MarshalAs(UnmanagedType::ByValTStr, SizeConst=LF_FACESIZE)]
    String^ lfFaceName;
} M_LOGFONT;

2.实现

LOGFONT logFont;
M_LOGFONT^ pManagedFont = gcnew M_LOGFONT();

pFont-> GetLogFont(&logFont);
pManagedFont->lfHeight = logFont.lfHeight;
pManagedFont->lfWidth = logFont.lfWidth;
pManagedFont->lfEscapement = logFont.lfEscapement;
pManagedFont->lfOrientation = logFont.lfOrientation;
pManagedFont->lfWeight = logFont.lfWeight;
pManagedFont->lfItalic = logFont.lfItalic;
pManagedFont->lfUnderline = logFont.lfUnderline;
pManagedFont->lfStrikeOut = logFont.lfStrikeOut;
pManagedFont->lfCharSet = logFont.lfCharSet;
pManagedFont->lfOutPrecision = logFont.lfOutPrecision;
pManagedFont->lfClipPrecision = logFont.lfClipPrecision;
pManagedFont->lfQuality = logFont.lfQuality;
pManagedFont->lfPitchAndFamily = logFont.lfPitchAndFamily;
pManagedFont->lfFaceName = gcnew String(logFont.lfFaceName);
this->Font = System::Drawing::Font:: FromLogFont(pManagedFont);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值