http://blog.youkuaiyun.com/zengwh/archive/2009/08/20/4465037.aspx
ScrollDC与ScrollWindowEx的异同
1.函数原型:
BOOL ScrollDC(HDC hDC , int dx , int dy , const RECT *lprcScroll , const RECT *lprcClip , HRGN hrgnUpdate , LPRECT lprcUpdate );
int ScrollWindowEx(HWND hWnd , int dx , int dy , const RECT *prcScroll , const RECT *prcClip , HRGN hrgnUpdate , LPRECT prcUpdate , UINT flags );
2.相同点:
a)两者都可以将某区域滚动到另外一区域,同时计算脏区域。
b)两者最终的实现都是通过内部的BitBlt实现的 。
c)如果要对重绘的区域进行精细的管理和计算,则传入hrfgUpdate,否则传入prcUpdate即可。
3.不同点:
a)ScrollDC只是用于DC,因此它不会发出WM_PAINT进行重绘 ;而ScrollWindowEx则会。另外就是ScrollWindowEx还可以在滚动时进行其他控制,见flags的值。
b)如果需要滚动整个客户区,则需要用到ScrollWindowEx(来自MSDN),个人觉得ScrollDC也可以实现。
BOOL ScrollDC(HDC hDC , int dx , int dy , const RECT *lprcScroll , const RECT *lprcClip , HRGN hrgnUpdate , LPRECT lprcUpdate );
int ScrollWindowEx(HWND hWnd , int dx , int dy , const RECT *prcScroll , const RECT *prcClip , HRGN hrgnUpdate , LPRECT prcUpdate , UINT flags );
2.相同点:
a)两者都可以将某区域滚动到另外一区域,同时计算脏区域。
b)两者最终的实现都是通过内部的BitBlt实现的 。
c)如果要对重绘的区域进行精细的管理和计算,则传入hrfgUpdate,否则传入prcUpdate即可。
3.不同点:
a)ScrollDC只是用于DC,因此它不会发出WM_PAINT进行重绘 ;而ScrollWindowEx则会。另外就是ScrollWindowEx还可以在滚动时进行其他控制,见flags的值。
b)如果需要滚动整个客户区,则需要用到ScrollWindowEx(来自MSDN),个人觉得ScrollDC也可以实现。