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也可以实现。