关于MFC CFont 的疑问

因为要交互数据,我定义了两个CFont对象,font1和font2,现在font2通过调用字体对话框的途径获得了字体的类型,但是我想让达到font1=font2的效果,就... 因为要交互数据,我定义了两个CFont 对象,font1和font2,现在 font2 通过调用字体对话框的途径获得了字体的类型,但是我想让达到 font1 = font2 的效果,就是font1中的字体和 font2 中的字体是同一种类型,但是两个对象不能直接赋值,那么应该怎么弄?谢谢 展开
 我来答
L_o_o_n_i_e
2011-04-09 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5186万
展开全部
CFont* font2 = pWnd->GetFont(); -- 或无论你怎样得到了font2
if (font2)
{
LOGFONT lf2;
font2->GetLogFont(&lf2); // 这里取得LOGFONT结构
// 字体名在 lf2.lfFaceName 里。
}
你可以把lf2 里 你要的参数的值赋给 font1 的 LOGFONT lf; 结构里。
font1.CreateFontIndirect(&lf);
oldfont = pDC->SelectObject(&font1);
注意,不用时要
pDC->SelectObject(oldfont);
DeleteObject(font1);
DeleteObject(font2);
以免内存泄漏。
--------
LOGFONT lf; 的结构成员你知道的吧,例如:
lf.lfHeight = 240;
lf.lfWidth = 120;
lf.lfEscapement = m_ang;
lf.lfOrientation = m_ang;
lf.lfWeight = 520;
lf.lfItalic = 0;
lf.lfUnderline = 0;
lf.lfStrikeOut = 0;
lf.lfCharSet = GB2312_CHARSET;
lf.lfOutPrecision = 0;
lf.lfClipPrecision = CLIP_STROKE_PRECIS;
lf.lfQuality = 0;
lf.lfPitchAndFamily = 0;
strcpy(lf.lfFaceName, "MS Song");
font.CreateFontIndirect(&lf);
追问
谢谢,弄出来了,我也是这种方法,因为是自己一味想出来的,所以不敢保证是正确的,总是报告内存错误,有了你的解答后,确定了这个方法没有错,呵呵,经过试验,发现没有初始化过的cfont对象没有这样的错误,就感觉是create的问题,上网又查了一下确实如此。我在CreateFontIndire()之前没有DeleteObject()掉上次创建的。多谢了,自己刚学MFC一个月,有点笨笨的,小问题不断,呵呵,以后兄弟也要早点睡觉,熬夜对身体不好
Frank7258
2011-04-09 · TA获得超过1503个赞
知道小有建树答主
回答量:381
采纳率:0%
帮助的人:551万
展开全部
用CFont::GetLogFont可以获得一个包含这个字体所有信息的LOGFONT结构体,然后,另一个CFont对象调用CreateFontIndirect,该函数是负责从LOGFONT创建对象。

其实因为CFont是个HFont句柄的包装,你复制句柄并不创建新的GDI对象,你实际上还是同一个对象,而GDI句柄又没有像DumplicateHandle这样的API提供复制功能,因此CFont不让你直接这么复制。
追问
谢谢兄弟
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户16407
2011-04-09 · TA获得超过326个赞
知道小有建树答主
回答量:598
采纳率:0%
帮助的人:0
展开全部
int nIndex
);
系统中的画刷、画笔、字体等,你可以自己创建并设计,也可以使用系统内置的。如果使用系统内置的,就调用这个函数,传入一个整型索引值就OK了。你这个例子里边的SYSTEM_FONT是一个宏,相当于一个整型值,这个语句的意思是将m_Font设置为系统默认字体。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式