CWnd::ScrollWindowEx
ウィンドウのクライアント領域の内容をスクロールします。
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