CWnd::ScrollWindowEx
更新 : 2007 年 11 月
ウィンドウのクライアント領域の内容をスクロールします。
int ScrollWindowEx(
int dx,
int dy,
LPCRECT lpRectScroll,
LPCRECT lpRectClip,
CRgn* prgnUpdate,
LPRECT lpRectUpdate,
UINT flags
);
パラメータ
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 で指定したピクセル数だけスクロールします。lpRectScroll と交わるすべての子ウィンドウが移動しない場合でも、Windows は WM_MOVE メッセージをそれらの子ウィンドウに送信します。子ウィンドウがスクロールされ、カーソル四角形がスクロール四角形と交差するときに、カレットの位置は再設定されます。
戻り値
関数が正常終了した場合は、SIMPLEREGION (無効化された四角形領域)、COMPLEXREGION (無効化された四角形でない領域; 重なり合った四角形)、または NULLREGION (無効化される領域なし) のいずれかを返します。それ以外の場合は、ERROR を返します。
解説
この関数は、ScrollWindow 関数に類似しており、追加機能があります。
ScrollWindowEx と ScrollWindowEx を指定しない場合は、ScrollWindowEx メンバ関数がスクロール元の領域を無効にしません。どちらかのフラグを設定すると、ScrollWindowEx がこの領域を無効にします。アプリケーションが UpdateWindow メンバ関数、または RedrawWindow メンバ関数 (RDW_UPDATENOW または RDW_ERASENOW を指定) を呼び出すか、アプリケーション キューから WM_PAINT メッセージを取得するまで、領域は更新されません。
CreateWindow スタイルのウィンドウの場合、prgnUpdate と lpRectUpdate で返される領域は、ウィンドウのスクロールによって更新が必要になったすべての領域です。子ウィンドウ内に更新の必要な領域があれば、この領域も含まれます。
SW_SCROLLCHILDREN フラグが指定されている場合、子ウィンドウの一部がスクロールされると、Windows は画面が正しく更新しません。スクロールした子ウィンドウの領域が元の四角形からはみ出すと、その部分は削除されず、スクロール先に正しく再描画されません。lpRectScroll 四角形から一部でもはみ出している子ウィンドウを移動するには、DeferWindowPos Windows 関数を使用します。SW_SCROLLCHILDREN フラグを設定した場合は、カレット四角形がスクロール四角形と交差すると、カーソルが再配置されます。
ウィンドウのクラス スタイルが CS_OWNDC か CS_CLASSDC かに関係なく、入出力座標 (lpRectScroll、lpRectClip、lpRectUpdate、および prgnUpdate 用) はすべてクライアント座標にあるものと想定します。必要に応じて、論理座標との変換を行うには、LPtoDP Windows 関数および DPtoLP Windows 関数を使用します。
必要条件
ヘッダー : afxwin.h