MFC字体问题,为什么要保存旧的字体指针?
CFont*pOldFont=pDC->SelectObject(&m_font);//1pDC->TextOutW(0,0,m_strFontName);//2pDC-...
CFont *pOldFont=pDC->SelectObject(&m_font);//1
pDC->TextOutW(0,0,m_strFontName);//2
pDC->SelectObject(pOldFont);//这句输出旧的字体有什么用啊,代码1不是输出字体了,我感觉这一句就是和代码1重复了。而且注释掉,也不影响我选择的字体输出到屏幕上,求解? 展开
pDC->TextOutW(0,0,m_strFontName);//2
pDC->SelectObject(pOldFont);//这句输出旧的字体有什么用啊,代码1不是输出字体了,我感觉这一句就是和代码1重复了。而且注释掉,也不影响我选择的字体输出到屏幕上,求解? 展开
1个回答
展开全部
目的是为了防止GDI资源泄漏,和指针创建之后要释放是一个道理。
各种GDI资源(CFont CPen CBrush等)因为在OnPaint/OnDraw中频繁使用,需要合理的释放资源,否则很容易造成界面崩溃(当然,短时间看不出问题,只能在任务管理器中看到占用内存在增加)。
旧指针pOldFont保存的目的,就是为了SelectObject(pOldFont);,这样等于是将m_font从pDC这个DC中“摘出来”,不在绑定,这样m_font就可以正常释放了,否则当m_font还在pDC中绑定的时候,是不能正常释放的,就会造成资源泄漏。
各种GDI资源(CFont CPen CBrush等)因为在OnPaint/OnDraw中频繁使用,需要合理的释放资源,否则很容易造成界面崩溃(当然,短时间看不出问题,只能在任务管理器中看到占用内存在增加)。
旧指针pOldFont保存的目的,就是为了SelectObject(pOldFont);,这样等于是将m_font从pDC这个DC中“摘出来”,不在绑定,这样m_font就可以正常释放了,否则当m_font还在pDC中绑定的时候,是不能正常释放的,就会造成资源泄漏。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询