首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一直刷新窗体,CPaintDC就会无效。没法绘制图片

2012-09-03 
一直刷新窗体,CPaintDC就会无效。无法绘制图片。C/C++ codevirtual void OnPaint(CDCHandle h){CPaintDC dc(

一直刷新窗体,CPaintDC就会无效。无法绘制图片。

C/C++ code
virtual void OnPaint(CDCHandle h)    {        CPaintDC dc(*this);        dc.SaveDC();        CDC dcbk = dc;        //获取背景位图的长度和高度        BITMAP bm;        m_backGroundBmp.GetBitmap(&bm);        int bmpWidth = bm.bmWidth;        int bmpHeight = bm.bmHeight;        drawBitmap(dcbk, m_backGroundBmp, m_leftUpAngle , 0, 0);        drawBitmap(dcbk, m_backGroundBmp, m_rightUpAngle , bmpWidth - m_angleWidth, 0);        drawBitmap(dcbk, m_backGroundBmp, m_leftDownAngle , 0, bmpHeight-m_angleHeight);        drawBitmap(dcbk, m_backGroundBmp, m_rightDownAngle , bmpWidth - m_angleWidth, bmpHeight-m_angleHeight);        //绘制标题字体颜色        dcbk.SetBkMode(TRANSPARENT);        dcbk.SetTextColor ( m_titleColor );//字色        CFont m_font;        dcbk.SelectFont( m_font.CreatePointFont(90,_T("宋体"),NULL));//字体        CString _title = m_title;        CRect temprc(25, 7, _title.GetLength()*20, 26);        DrawText(dcbk, _title, _title.GetLength(), temprc, NULL);//绘制软件名称版本信息等        dcbk.RestoreDC(-1);        ReleaseDC(dcbk);        ReleaseDC(dc);    }


不知道哪里有错呢? 是不是我释放CDC错了呢?
还是其他原因呢。

[解决办法]
你的位图资源bm应该设置为类的的成员,或者设置为全局的,不应该为局部变量,不然执行完这个函数,除了作用域就被释放了。所以就。。。。。。。。。。。
[解决办法]
探讨

你的位图资源bm应该设置为类的的成员,或者设置为全局的,不应该为局部变量,不然执行完这个函数,除了作用域就被释放了。所以就。。。。。。。。。。。

[解决办法]
CPaintDC 是不需要释放的。 
 
CDC dcbk = dc;为什么要这么写呢,不直接用dc就好了。同样dcbk并没有创建,是不需要释放的。

你创建的字体是需要释放的,你的是成员函数吧,记得在析构函数里面释放m_font
[解决办法]
CDC dcbk = dc;
貌似MSDN上没有这种写法吧。或者你可以直接进CDC类的声明,并没有赋值运算符重载这函数。
ReleaseDC
请用MSDN看看这个函数的说明和用法。


在你使用某个函数之前,先认真把文档看完?

热点排行