複製鏈接
請複製以下鏈接發送給好友

ScrollWindowEx

鎖定
Windows API(Application Programming Interface,應用程序編程接口)函數,該函數滾動指定窗體客户區域的目錄。
中文名
ScrollWindowEx
Windows CE
不支持
Windows NT
3.1
頭文件
winuser.h

ScrollWindowEx函數原型

int ScrollWindowEx(
HWND hWnd, // handle to window
int dx, // horizontal scrolling
int dy, // vertical scrolling
CONST RECT *prcScroll, // client area
CONST RECT *prcClip, // clipping rectangle
HRGN hrgnUpdate, // handle to update region
LPRECT prcUpdate, // invalidated region
UINT flags // scrolling options
);

ScrollWindowEx函數參數

hWnd:客户區域將被滾動的窗體句柄。
dx:在設備單元中,指定水平滾動數量。在向左滾動時此參數必須為負。
dy:在設備單元中,指定垂直滾動數量。在向上滾動時此參數必須為負。
prcScroll:指向RECT結構,它指定了將被滾動的客户區域部分。
prcClip:指向包含了類似於被剪下矩形的RECT結構。只有在剪下內部的小塊圖形才受影響。從矩形外向內部的滾動部分將被着色;而從內向外的滾動部分將不再被着色。
hrgnUpdate:處理已被修改的區域,保存這些由於滾動而無效的區域。此參數可以為空。
prcUpdate:指向RECT結構,它接收由於滾動使得矩形無效部分的邊界。此參數值可以為空。
flags:指定控制滾動的標誌。這個參數可以是下面的值:
SW_ERASE:通過發送WM_ERASEBKGND消息給窗體。
SW_INVALIDATE:在滾動後,使得由參數hrgnUpdate標識的無效區域被擦除。
SW_SCROLLCHILDREN:動所有由參數prcScroll指出交叉重疊矩形的子窗體。子窗體按照dx和dy規定的像素個數滾動。系統發送消息給所有由prcScroll指出交叉重疊矩形的子窗體,即使他們不移動。
返回值:如果函數運行成功,返回值為SIMPLEREGION(矩形的無效區域),COMPLEXREGION(非矩形的無效區域)或NULLREGION(沒有使無效的區域)如果函數運行失敗,返回值為ERROR。若想獲得更多的錯誤信息,請調用GetLastError函數。
注意:如果SW_INVALIDATE和SW_ERASE標誌沒有被設定,那麼函數ScrollWindowEx不能使滾動離開的區域失效。如果其中任意一個標誌被設置,ScrollWindowEx函數就可以使區域無效。這塊區域將不再被更新直到應用程序調用theUpdateWindow函數,調用theRedrawWindow函數(指定RDW_UPDATENOW或RDW_ERASENOW標誌)或是從申請隊列中找到WM_PAINT消息。
如果窗體擁有WS_CLIPCHILDREN類型,那麼由hrgnUpdate和prcUpdate指定的返回區域描述了必須更新的滾動窗體的全部區域,包括所需更新子窗體的任何區域。
若SW_SCROLLCHILDREN標誌被設置,在子窗體被滾動時,系統將不能完全更新屏幕。位於矩形外邊的滾動子窗體部分不被擦除,也不在它的新方向上被重畫。為了移動子窗體使之完全不在prcScroll指定的矩形條中,可使用DeferWindowPos函數。若標誌SW_SCROLLCHILDREN被設置並且^符號交叉滾動矩形,則光標也重新設置。
所有輸入輸出均被定義為客户端如果有必要,使用IptoDP和dptoLP函數轉換邏輯相關性。
Windows CE:參數flags不支持SW_SCROLLCHILDREN。參數dx和dy中只有一個為零。
速查:Windows NT 3.1、Windows 95、Windows CE 1.0以上,頭文件:winuser.h;庫文件:user32.lib。

ScrollWindowExWindowEx和DC的比較

ScrollWindowEx相同點

a)兩者都可以將某區域滾動到另外一區域,同時計算髒區域。
b)兩者最終的實現都是通過內部的BitBlt實現的
c)如果要對重繪的區域進行精細的管理和計算,則傳入hrfgUpdate,否則傳入prcUpdate即可。

ScrollWindowEx不同點

a)ScrollDC只是用於DC,因此它不會發出WM_PAINT進行重繪;而ScrollWindowEx則會。另外就是ScrollWindowEx還可以在滾動時進行其他控制,見flags的值。
b)如果需要滾動整個客户區,則需要用到ScrollWindowEx(來自MSDN),個人覺得ScrollDC也可以實現。