我有一个用C ++编写的内部API(没有MFC),在win32 API之上实现。我的应用程序正在为每个WM_PAINT调用绘制整个窗口。有没有办法我只能找到脏/内部区域,以便我可以优化我的绘图功能,只在与脏区域相交的视图中绘制。
我在BeginPaint - EndPaint语句之间尝试了以下代码并且失败了。整个窗户都是黑色的。如果我将Optimize标志设置为0,则窗口绘制正常,但绘图太慢。有什么建议...... ??。
#if Optimize
// get the inval region and pass it down
HRGN invalRegion = CreateRectRgn(0,0,0,0);
int retVal = ::GetClipRgn( myHDC,invalRegion);
Assert (retVal != -1);
if(retVal == 0)
return; // nothing to draw.
else if(retVal == 1)
Draw(invalRegion); // a valid dirty region handle.
else
#endif
Draw(NULL); // this results in drawing calls to all views in the window.
答案 0 :(得分:4)
您是否尝试过使用rcPaint RECT
中的PAINTSTRUCT
? GetClipRgn的docs具体说它不引用BeginPaint创建的剪辑区域,但只引用via SelectClipRgn
中明确选择的剪辑区域。