关于MFC CFont 的疑问
因为要交互数据,我定义了两个CFont对象,font1和font2,现在font2通过调用字体对话框的途径获得了字体的类型,但是我想让达到font1=font2的效果,就...
因为要交互数据,我定义了两个CFont 对象,font1和font2,现在 font2 通过调用字体对话框的途径获得了字体的类型,但是我想让达到 font1 = font2 的效果,就是font1中的字体和 font2 中的字体是同一种类型,但是两个对象不能直接赋值,那么应该怎么弄?谢谢
展开
3个回答
展开全部
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);
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一个月,有点笨笨的,小问题不断,呵呵,以后兄弟也要早点睡觉,熬夜对身体不好
展开全部
用CFont::GetLogFont可以获得一个包含这个字体所有信息的LOGFONT结构体,然后,另一个CFont对象调用CreateFontIndirect,该函数是负责从LOGFONT创建对象。
其实因为CFont是个HFont句柄的包装,你复制句柄并不创建新的GDI对象,你实际上还是同一个对象,而GDI句柄又没有像DumplicateHandle这样的API提供复制功能,因此CFont不让你直接这么复制。
其实因为CFont是个HFont句柄的包装,你复制句柄并不创建新的GDI对象,你实际上还是同一个对象,而GDI句柄又没有像DumplicateHandle这样的API提供复制功能,因此CFont不让你直接这么复制。
追问
谢谢兄弟
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int nIndex
);
系统中的画刷、画笔、字体等,你可以自己创建并设计,也可以使用系统内置的。如果使用系统内置的,就调用这个函数,传入一个整型索引值就OK了。你这个例子里边的SYSTEM_FONT是一个宏,相当于一个整型值,这个语句的意思是将m_Font设置为系统默认字体。
);
系统中的画刷、画笔、字体等,你可以自己创建并设计,也可以使用系统内置的。如果使用系统内置的,就调用这个函数,传入一个整型索引值就OK了。你这个例子里边的SYSTEM_FONT是一个宏,相当于一个整型值,这个语句的意思是将m_Font设置为系统默认字体。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询