当WindowProc收到WM_PAINT消息时如何找到windows脏区...?

时间:2010-12-08 01:23:17

标签: visual-studio-2008 visual-c++ gdi winapi

我有一个用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.

1 个答案:

答案 0 :(得分:4)

您是否尝试过使用rcPaint RECT中的PAINTSTRUCT? GetClipRgn的docs具体说它引用BeginPaint创建的剪辑区域,但只引用via SelectClipRgn中明确选择的剪辑区域。