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