一直刷新窗体,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应该设置为类的的成员,或者设置为全局的,不应该为局部变量,不然执行完这个函数,除了作用域就被释放了。所以就。。。。。。。。。。。
[解决办法]
[解决办法]
CPaintDC 是不需要释放的。
CDC dcbk = dc;为什么要这么写呢,不直接用dc就好了。同样dcbk并没有创建,是不需要释放的。
你创建的字体是需要释放的,你的是成员函数吧,记得在析构函数里面释放m_font
[解决办法]
CDC dcbk = dc;
貌似MSDN上没有这种写法吧。或者你可以直接进CDC类的声明,并没有赋值运算符重载这函数。
ReleaseDC
请用MSDN看看这个函数的说明和用法。
在你使用某个函数之前,先认真把文档看完?