有关SDK中绘图的一个有关问题
有关SDK中绘图的一个问题。
我在一个SDK工程里的OnTimer里响应了一个时钟事件,每次响应时执行一次绘图工作,其中包含以下代码:
...
HBRUSH brush;
...
brush=::CreateSolidBrush(RGB(255,255,255));
FillRect(hdc,&rect,brush); //填充背景
...
结果在程序执行过程中发现,开始时程序一切正常,该语句以后的位图操作都能顺利执行,可是程序执行一定时间之后,屏幕就一直成白色了,只有在后面的位图操作里的TextOut(..)输出的字符串能够正常显示。
当我把上面的三行语句注释掉以后,改用BitBlt(....,BLACKNESS)填充背景时,程序才不会出现上述情况。请问这是什么原因?是因为反复创建对象造成的内存问题么??
------解决方案--------------------
如果你的HBRUSH brush;语句在函数体内,那你必须用完后DeleteObject(brush),因为资源泄漏了,长时间运行,资源耗尽,就会不正常
可改为改为ExtTextOut函数填充背景,就像CDC::FillSolidFill函数一样用它
我在一个SDK工程里的OnTimer里响应了一个时钟事件,每次响应时执行一次绘图工作,其中包含以下代码:
...
HBRUSH brush;
...
brush=::CreateSolidBrush(RGB(255,255,255));
FillRect(hdc,&rect,brush); //填充背景
...
结果在程序执行过程中发现,开始时程序一切正常,该语句以后的位图操作都能顺利执行,可是程序执行一定时间之后,屏幕就一直成白色了,只有在后面的位图操作里的TextOut(..)输出的字符串能够正常显示。
当我把上面的三行语句注释掉以后,改用BitBlt(....,BLACKNESS)填充背景时,程序才不会出现上述情况。请问这是什么原因?是因为反复创建对象造成的内存问题么??
------解决方案--------------------
如果你的HBRUSH brush;语句在函数体内,那你必须用完后DeleteObject(brush),因为资源泄漏了,长时间运行,资源耗尽,就会不正常
可改为改为ExtTextOut函数填充背景,就像CDC::FillSolidFill函数一样用它