CWnd::ScrollWindowEx

int ScrollWindowEx(
    int dx,
    int dy,
    LPCRECT lpRectScroll,
    LPCRECT lpRectClip,
    CRgn* prgnUpdate,
    LPRECT lpRectUpdate,
    UINT flags
    );

返回值:
如果函数成功,则返回值为SIMPLEREGION(矩形的无效矩形),COMPLEXREGION(非矩形无效区域;重叠矩形)或NULLREGION(没有无效区域);否则返回值为ERROR。

参数:
dx指定了水平滚动的量,使用设备单位。在左滚时,该参数必须为负。
dy指定了垂直滚动的量,使用设备单位。在上滚时,该参数必须为负。
lpRectScroll指向RECT结构,指定了要滚动的客户区的部分。如果该参数为NULL,则将滚动整个客户区。
lpRectClip指向RECT结构,指定了要滚动的裁剪区域。这个结构优先于lpRectScroll指定的矩形。只有这个矩形中的位才会被滚动。在矩形之外的位不会被影响,即使它们是在lpRectScroll矩形之内。如果这个参数为NULL,则不会在滚动矩形上进行裁剪。
prgnUpdate标识了被修改的区域,用于保存因滚动而无效的区域。这个参数可能为NULL。
lpRectUpdate指向一个RECT结构,该结构将接收因滚动而无效的矩形的边界。这个参数可能为NULL。
flags可以具有下列值之一:
SW_ERASE当与SW_INVALIDATE一起设置时,向窗口发送一条WM_ERASEBKGND消息以擦除新的无效区域。
SW_INVALIDATE在滚动后使prgnUpdate标识的区域无效。
SW_SCROLLCHILDREN将与lpRectScroll所指定的矩形相交的所有子窗口滚动dx和dy所指定的数目的像素。Windows向与lpRectScroll相交的所有子窗口发送WM_MOVE消息,即使它们没有移动。当子窗口被滚动并且光标矩形与滚动矩形相交时,插字符被重定位。

说明:
这个函数滚动窗口的客户区内容。该函数与ScrollWindow函数类似,并具有一些附加特性。
如果没有指定SW_INVALIDATE和SW_ERASE,则ScrollWindowEx成员函数并不使滚动的区域无效。如果设置了这两者之一,则ScrollWindowEx将使区域无效。在应用程序调用UpdateWindow成员函数,或调用RedrawWindow成员函数(指定了RDW_UPDATENOW或RDW_ERASENOW),或从应用程序队列中获得WM_PAINT消息之前,这个区域将不会被更新。
如果窗口具有WS_CLIPCHILDREN风格,则prgnUpdate和lpRectUpdate指定的区域代表了必须更新的滚动窗口的全部区域,包括子窗口中所有需要更新的区域。
如果指定了SW_SCROLLCHILDREN标志,并且滚动了子窗口的一个部分,则Windows将不会正确地更新屏幕。在源矩形之外的滚动的子窗口的部分将不会被擦除,并且在新的位置也不会被正确地重画。使用Windows的DeferWindowPos函数以移动不完全位于lpRectScroll矩形之内的子窗口。如果设置了SW_SCROLLCHILDREN标志并且插字符矩形与滚动矩形相交,则光标将被重新定位。
所有输入和输出的坐标(属于lpRectScroll,lpRectClip,lpRectUpdate和prgnUpdate)都被假定使用了客户坐标,而不管窗口具有的是CS_OWNDC风格还是CS_CLASSDC风格。如果有必要,可以使用Windows的LPtoDP和DPtoLP函数将该坐标与逻辑坐标相互转换。

请参阅:
CWnd::RedrawWindow, CDC::ScrollDC, CWnd::ScrollWindow, CWnd::UpdateWindow, ::DeferWindowPos, ::ScrollWindowEx