CScrollView クラス
更新 : 2007 年 11 月
スクロール機能を持つ CView です。
class CScrollView : public CView
解説
CView から派生したクラスでは、メッセージ マップに登録されたメンバ関数 OnHScroll と OnVScroll をオーバーライドすると、標準スクロールを直接扱うことができます。CScrollView は CView の機能に次の機能を追加します。
ウィンドウとビューポートのサイズおよびマップ モードを管理します。
スクロール バー メッセージに応答して自動的にスクロールします。
キーボード、非スクロール マウス、または IntelliMouse ホイールからのメッセージに応答して自動的にスクロールします。
キーボードから取得したメッセージに応答して自動的にスクロールするには、WM_KEYDOWN メッセージを追加し、VK_DOWN および VK_PREV をテストし、SetScrollPos を呼び出します。
マウス ホイールのスクロールを直接扱うには、メッセージに割り当てられているメンバ関数 OnMouseWheel と OnRegisteredMouseWheel をオーバーライドします。これらのメンバ関数のクラスは CScrollView であるため、WM_MOUSEWHEEL の推奨動作であるホイール回転メッセージをサポートします。
自動スクロールを利用できるようにするには、CView の代わりに CScrollView からビュー クラスを派生させます。ビューが最初に作成されるとき、ドキュメントのサイズをもとにスクロールできるビューのサイズを計算するには、CView::OnInitialUpdate または CView::OnUpdate をオーバーライドした関数から SetScrollSizes メンバ関数を呼び出します。(ドキュメントのサイズを問い合わせるコードはユーザーが独自に書く必要があります。例については「SCRIBBLE サンプル : MFC MDI 描画アプリケーション」を参照してください。)
SetScrollSizes メンバ関数を呼び出すと、ビューのマップ モード、スクロール ビューの全体の大きさ、および水平と垂直のスクロール量を設定できます。すべてのサイズは論理単位です。ビューの論理サイズは、通常ドキュメントに格納されているデータから計算されますが、固定サイズにすることもできます。両方のアプローチの例については、「CScrollView::SetScrollSizes」を参照してください。
水平および垂直のスクロール量は論理単位で指定します。既定では、スクロール ボックスの外側のスクロール バー シャフトをクリックすると、CScrollView は "ページ" 単位でスクロールします。スクロール バー両端の矢印をクリックすると、CScrollView は "行" 単位でスクロールします。既定では、ページはビュー全体のサイズの 1/10、行はページ サイズの 1/10 です。これらの既定値は、SetScrollSizes メンバ関数に独自のサイズを渡してオーバーライドします。たとえば、水平方向のサイズを全体のサイズの幅の何分の 1 かに設定したり、垂直サイズを現在のフォントでの 1 行の高さに設定したりできます。
スクロールする代わりに、CScrollView は現在のウィンドウ サイズに対してビューを自動的に伸縮できます。このモードのときは、ビューはスクロール バーを持たず、論理ビューはウィンドウのクライアント領域に合うように拡大または縮小されます。この伸縮機能を使用する場合は、CScrollView::SetScaleToFitSize を呼び出します。(SetScaleToFitSize と SetScrollSizes の両方を呼び出さずに、一方だけを呼び出してください。)
派生ビュー クラスの OnDraw メンバ関数が呼び出される前に、CScrollView は OnDraw に渡される CPaintDC デバイス コンテキスト オブジェクトに対して、自動的にビューポートの原点を調整します。
スクロール ウィンドウに対するビューポートの原点の調整をするために、CScrollView は CView::OnPrepareDC をオーバーライドします。この調整は、CScrollView が OnDraw に渡す CPaintDC デバイス コンテキストに対して自動的に行われますが、CClientDC のようなほかのデバイス コンテキストを使うときには、それらに対して CScrollView::OnPrepareDC を呼び出す必要があります。ペン、背景色、およびその他の描画属性を設定するために、CScrollView::OnPrepareDC をオーバーライドできますが、スケーリングをするためには、その中で基本クラスを呼び出すようにしてください。
スクロール バーは次に示すように、ビューの 3 か所に表示されます。
標準ウィンドウ スタイルのスクロール バーは WS_HSCROLL と WS_VSCROLLスタイルを使ってビューに設定できます。
ビューを含むフレームにスクロール バー コントロールを付加することもできます。このとき、フレームワークは、フレーム ウィンドウから現在アクティブなビューに WM_HSCROLL と WM_VSCROLL メッセージを転送します。
フレームワークは、CSplitterWnd 分割コントロールから、現在アクティブな分割ペイン (これはビューです) にスクロール メッセージを転送できます。CSplitterWnd に共有スクロール バーが置かれているときは、CScrollView オブジェクトは、独自にスクロール バーを作成せずに共有スクロール バーを使います。
CScrollView の使い方の詳細については、「ドキュメント/ビュー アーキテクチャ」と「MFC で使用できる派生ビュー クラス」を参照してください。
必要条件
ヘッダー : afxwin.h
参照
処理手順
DIBLOOK サンプル : DIB およびカラー パレットの使用例