如何在LOGFONT与GDI+的Font类之间进行互相转换?

microyzy 2003-10-15 05:35:59
我使用CFontDialog来让用户选择字体,可以得到一个LOGFONT,但是不知怎么转换到GDI+的Font对象中

Font对象有一个构造函数,
Font( HDC hdc,
const LOGFONTA *logfont
);
我将控件或者窗口的HDC传过去,结果Font对象不可用
...全文
310 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
玄山 2003-10-21
  • 打赏
  • 举报
回复
难道你自己不知道Font的size吗?为什么一定要使用logFont里的lfHeight呢。
建议使用自己定义的Font的dXFontSize和dYFontSize,要什么都使用logFont里的信息,还不如直接使用GDI好了,速度还快。
microyzy 2003-10-21
  • 打赏
  • 举报
回复
等待ing
microyzy 2003-10-21
  • 打赏
  • 举报
回复
我使用GDI+的Grapics类来在图像上输出文字,所以要使用Font对象

如题目,我没说必须使用LOGFONT的,我的目的只是使用CFontDialog来选择字体,然后转换到Font后再使用Graphics来画文字,因此现在我时得到了从CFontDialog返回的LOGFONT,但是不知道对应的,Font对象的size应该设置为多少好
microyzy 2003-10-16
  • 打赏
  • 举报
回复
我跟踪了一下,发现LOGFONT.Height经常是负值?
microyzy 2003-10-16
  • 打赏
  • 举报
回复
我目前也是这样做的,这些属性我已经可以处理好,关键是Font.size和LOGFONT.Height Weight之间的转换我不知道怎么处理
玄山 2003-10-16
  • 打赏
  • 举报
回复
GDI+中的字体属性如下:
enum FontStyle{
FontStyleRegular = 0,
FontStyleBold = 1,
FontStyleItalic = 2,
FontStyleBoldItalic = 3,
FontStyleUnderline = 4,
FontStyleStrikeout = 8
};
你可以根据LOGFONT中的属性再设置相应的值。
FontStyle fontStyle = FontStyleRegular;
if(logFont.lfItalic)
fontStyle |= FontStyleItalic;
我没有直接使用Font(HDC hdc, LOGFONT* logfont)函数。
microyzy 2003-10-16
  • 打赏
  • 举报
回复
那我怎么处理Font的size?
玄山 2003-10-16
  • 打赏
  • 举报
回复
logFont.Weight == 400或500 近似于FontStyleRegular,
logFont.Weight == 700或800 近似于FontStyleBold;
lofFont.Height是负值属正常现象。
microyzy 2003-10-15
  • 打赏
  • 举报
回复
??
microyzy 2003-10-15
  • 打赏
  • 举报
回复
这样是不是只是继承了字体的名称?
microyzy 2003-10-15
  • 打赏
  • 举报
回复
wqp的代码,没看出怎么转换了:(能说说吗
这样包括下划线、倾斜、粗体等属性也能转过去吗?
玄山 2003-10-15
  • 打赏
  • 举报
回复
上面代码中SetFontSize(dXSize,dYSize,logFont)去掉,那是从我自己的代码中拷出来没删掉的,呵
玄山 2003-10-15
  • 打赏
  • 举报
回复
LOGFONT logFont;
SetFontSize(dXSize,dYSize,logFont);
FontFamily fontFamily(logFont.lfFaceName);
FontStyle fontStyle; //= FontStyleRegular;
Font font(&fontFamily,static_cast<float>(dFontSize),fontStyle,UnitPixel);

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧