问题1:如何有效的降低GDI的使用数,用GDIPool?
问题2:
CPen pen( PS_SOLID, 0, clrArrow );
CBrush* pOldBrush = dc.SelectObject( &brush );
CPen* pOldPen = dc.SelectObject( pen );
dc.Polygon( arPoints, POINTS_COUNT );
dc.SelectObject( pOldPen );
dc.SelectObject( pOldBrush );这样写代码会增加程序中GDI(Pen和Brush)的个数吗?
问题3:我用了GDIPool来保存同样的CPen对象,当再有需要的地方,就去GDIPool中get,如果GDIPool中没有 再分配。
结果我做了测试,每次都可以从GDIPool中得到,但CPen的使用数还是很多,各位帮我解决下啊!
问题2:
CPen pen( PS_SOLID, 0, clrArrow );
CBrush* pOldBrush = dc.SelectObject( &brush );
CPen* pOldPen = dc.SelectObject( pen );
dc.Polygon( arPoints, POINTS_COUNT );
dc.SelectObject( pOldPen );
dc.SelectObject( pOldBrush );这样写代码会增加程序中GDI(Pen和Brush)的个数吗?
问题3:我用了GDIPool来保存同样的CPen对象,当再有需要的地方,就去GDIPool中get,如果GDIPool中没有 再分配。
结果我做了测试,每次都可以从GDIPool中得到,但CPen的使用数还是很多,各位帮我解决下啊!
解决方案 »
- 用CWebBrowser控件做的浏览器 可不可以阻止网页弹出??
- 求《WINDOWS核心编程》的示例的源码
- select函数中的超时,为啥小于1秒时不起作用,非要1秒以上?
- 一个无模式对话框,如果不在OnNcDestroy或PostNcDestroy中delete this,会不会产生内存泄漏?[VC++6.0]
- 广州市爱喜软件公司怎么样?请各位大胆发言啊,谢谢了!
- 怎样在纸的1厘米处打印一条线????急
- ATL接口中怎么才能传入一个自定义的结构,不想用BYTE*,那个达人知道???
- 文件读写的问题
- 新建一个基于CRecordset的类,为什么会出现这样的错误啊,大家帮帮忙啊
- 为什么我的执行如下代码,我的CSTATIC 背景色成黑色了,请大侠帮忙,本人是超级菜鸟.
- 请问 amr 音频文件的录制怎末弄啊??怎末用MFC开发??(先100分,分数可以最加)!!!
- 用com如何读取Excel2003文件?
pOldBrush->DeleteObject();
pOldPen->DeleteObject();只要不出错,尽可能多的DeleteObject
另外,我们要实现一个基础控件库,主要想解决GDI占用数量多的问题,如果创建200个同样的BUTTON,就必须要使用200个CPen吗?
能不能给个创建后及时释放的实例代码?
画笔画刷占用资源比较少 即便是经常用经常释放也没有什么问题 如果是
位图CBitmap CDC* CDC等就需要好好考虑了 这些东西对资源占用比较大
而且多次创建 删除也同样会造成系统速度慢。
class CSelPen : public CGDIObject<CPen>
{
public:
CSelPen(CDC * pDC, COLORREF col, int sty=PS_SOLID, int wid=1)
: CGDIObject<CPen>(pDC)
{
VERIFY(m_cNewObj.CreatePen(sty, wid, col));
Select(&m_cNewObj);
} CSelPen(CDC * pDC, int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0,
const DWORD* lpStyle = NULL) : CGDIObject<CPen>(pDC)
{
VERIFY(m_cNewObj.CreatePen(nPenStyle, nWidth, pLogBrush, nStyleCount, lpStyle));
Select(&m_cNewObj);
}
};
不过你的刷子brush是怎样生成的?记得要delete掉
各位给点资料或者代码什么的,谢谢啊