このウィンドウの分割を提供して、他のウィンドウのウィンドウのサイズを管理するために使用されます、MFC CSplitterWndクラスについて説明します。
注特価;テクニカル ノート 20 Id と有効な ID 範囲の使用について読むことを確認してください。(&N)。
分割スタイル
ウィンドウの分割の 2 つの異なるスタイル、 CSplitterWndをサポートします。
「静的分割で、「分割ウィンドウが作成されペインの数、順序を決して変更と、ウィンドウが作成されます。分割バーを別のウィンドウのサイズを使用、別のウィンドウ通常異なるビュー クラスです。Visual C グラフィック エディターと Windows のファイル マネージャーこの分割スタイルを使用するプログラムの例です。分割ボックスこのスプリッターのスタイルで使用されません。
「動的分割で、「追加ウィンドウ作成およびユーザーの分割と国連分割新しいビューとしてを破壊されます。1 つのビューでは、この分割を起動、分割する分割ボックスが提供されます。ビューが 1 つの方向に分割されている場合は、新しいウィンドウを表す追加のビュー オブジェクトが動的に作成されます。[ビュー 2 方向に (キーボード インターフェイスが可能) に分割されている場合は、3 つの新しいウィンドウを表す 3 つの新しいビューが作成されます。分割がアクティブな場合は、分割ボックスは分割バーで、ペイン間描画されます。追加のビューを分割、ユーザーを削除するときにオブジェクトが破棄されますが、元のビュー (行 0、列 0) 分割ウィンドウ自体が破棄されるまでのままです。Microsoft Excel または Microsoft Word は、動的分割スタイルの例。
分割ウィンドウのいずれかの種類を作成するときは、行と分割線を管理する列の最大数を指定する必要があります。静的分割には、すべての行と列を入力するウィンドウを作成します。CSplitterWndが作成されると動的分割には、最初のペインに自動的に作成されます。
静的分割を指定できるペインの最大数は 16 列 16 行です。推奨の構成です。:
ウィンドウの動的分割を指定できるペインの最大数は、2 行 × 2 列です。推奨の構成です。:
スプリッターの例
MFC のサンプル プログラムの多くは直接または間接的分割ウィンドウを使用します。MFC のチュートリアルのステップ 4 落書きは、CScribView を複数のペインに分割するには、動的分割ウィンドウを追加します。この手順で示すように、新しい分割フレーム ウィンドウは、ClassWizard の [クラスの追加機能を非常に簡単ですを追加します。この例は、動的分割ウィンドウ既定です。
MFC の一般的なサンプル VIEWEXスプリッターで分割線を配置する方法を含む、静的のスプリッターのいくつかの使用を示しています。
ClassWizard は、新しい分割ウィンドウを含む複数ドキュメント インターフェイス (MDI) 子フレーム ウィンドウ クラス作成されます。分割ウィンドウでVisual の C++ プログラマのガイドを参照してください。
実装で使用される用語
CSplitterWndオブジェクトと関連オブジェクトの一部の用語。
CSplitterWnd:
これは、コントロールのウィンドウを分割するを提供するウィンドウと、行または列のすべてのペインの間に共有されているスクロール バーです。行と列の 0 から始まる番号指定 [、最初のペインの行です = 0 と列 = 0]
ウィンドウ:
CSplitterWndによって管理されている、アプリケーション固有のウィンドウ。ペインは、通常、 CViewです-派生オブジェクトしますが、実際には、適切な子ウィンドウの ID.nbsp を持つ任意のCWndオブジェクトをすることができます(&N);
CView派生 class.nbsp を使用していた場合は、クラスを派生してそう、単に、 CWndのRUNTIME_CLASSを通過するには、;あなたのクラスはDECLARE_DYNCREATEとIMPLEMENT_DYNCREATE使用する必要があります--実行時に動的に作成のフレームワークを使用します。CView CSplitterWndの特定コードの多くがあるが、それらのアクションが実行される前にCObject::IsKindOfが常に使用されます。確かに、それはCWnd派生クラスよりもCSplitterWnd CView派生クラスを使用するがはるかに簡単です。(&N)。
分割バー:
行および列ペインの間に配置されたコントロール。ペインの列や行のサイズを調整するために使用可能性があります。
分割ボックス:
小さなコントロールまたは動的CSplitterWndの水平スクロール バーの左側に垂直スクロール バーの上部には。ウィンドウの新しい行や列を作成するために使用。
分割交点:
垂直分割バーと水平方向の分割バーの交差点。ペインの列と行のサイズを同時に調整するにドラッグすることがあります。
共有スクロール バー
CSplitterWndクラスには、共有スクロール バーもサポートしています。これらのスクロール バーのコントロール子供CSplitterWndのであり、別のペインを分割で共有されています。
たとえば、1 行 x 2 列ウィンドウに、 WS_VSCROLL CSplitterWndを作成するとき指定できます。2 つのペインの間を共有している特殊なスクロール バー コントロールが作成されます。
[特価;][????? ][^][pane00][pane01][|][????? ][????? ][v](&N)
ユーザーがスクロール バーを移動すると、両方のビューにWM_VSCROLLメッセージが送信されます。ビューがスクロール バー位置を設定すると、共有スクロール バーを設定します。
共有スクロール バーが同様のビュー オブジェクトを分割する動的または静的分割で、最も便利であることに注意してください。[スプリッターでさまざまな種類のビューを組み合わせるのスクロール位置を調整するための特別なコードを記述する必要があります。任意のCView-Api が存在する場合に、共有スクロール バーに委任するCWndスクロール バーを使用してクラスを派生します。CScrollViewの実装は、スクロール バーをサポートに共有などの 1 つの例は、 CViewクラスのです。非-CViewクラス、noncontrol スクロール バーには、依存クラスまたは標準の Windows の実装 (たとえば、 CEditView) CSplitterWndの共有スクロール バー機能が動作しませんを使用してクラスの派生。
最小サイズ
行ごとには、行の最小の高さと同様に各列には、最小の列幅。この最小値を使用して、ウィンドウの完全な詳細を表示する小さいかを決定するには。
静的分割ウィンドウでは、最初の行の最小の高さと列の幅は 0 です。動的分割ウィンドウでは、最初の行の最小の高さと列の幅設定されますsizeMin関数のパラメーターをCSplitterWnd::Create。
これらの最小サイズは、 SetRowInfoとSetColumnInfo Api を変更ことができます。
実際と理想的なサイズ
分割ウィンドウのペインのレイアウトを (これは順番に、 CSplitterWndサイズが変更されます。 含まれているフレームのサイズに依存します。CSplitterWndは再配置し、できるだけ理想的に適合するように、ウィンドウのサイズを変更)。
ユーザーまたは、 CSplitterWnd API を通して設定、行の高さと列幅のサイズに最適なサイズを表します。(、ウィンドウ右または分割ウィンドウの下部にある左にスペースを入力して大きくしなければならない場合) 実際のサイズでは、そのウィンドウに最適なサイズを確認する十分な領域がない場合) は、理想的なサイズよりも小さいか、理想的なサイズよりも大きくすることができます。
保護されているインターフェイス
CSplitterWndの上級ユーザーを使用して、このクラスのユーザー インターフェイスの機能をカスタマイズできます、分割ウィンドウの実装のオーバーライドを次に示します。これらの Api は、公式に文書化されていません、MFC の将来のバージョンで変更されます。これらの api の詳細についての実装のソース コードを参照してください。
分割バー、ボックス、トラッカーを描画:
enum ESplitType 特価;{splitBox、splitBar、splitIntersection、splitBorder};仮想 void コーポネント (CDC ※ pDC、ESplitType コマンドを実行して、定数の CRect & rect);仮想 void OnInvertTracker (const CRect & rect)(&N)
これらの仮想関数は、分割ウィンドウのさまざまなグラフィカル コンポーネントの代替画像を提供するためにオーバーライドできます。既定の画像が Microsoft Works for Windows で分割に似ています: 分割バーの交差部分だけがブレンドして作ります。Windows 4.0 - その (将来) のオペレーティング システムのシェルで映像を一致するために、フレームワークを検出すると、画像もまったく違います。
コントロールとビューを作成します。:
仮想の BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID)
これは、共有スクロール バー コントロールを作成すると呼ばれます。スクロール バーの横に追加のコントロールを含むようにオーバーライドできます。既定の動作は通常の Windows スクロール バー コントロールを作成するのには。
仮想 void DeleteView (int 行、int 列);仮想 BOOL SplitRow(int cyBefore);仮想 BOOL SplitColumn(int cxBefore);仮想 void DeleteRow (int 行);仮想 void DeleteColumn (int 行)
これらの関数は (つまり、分割ウィンドウSPLS_DYNAMIC_SPLITスタイルがある場合)、動的分割ウィンドウのロジックを実装するために呼び出されます。仮想関数CreateViewより高度な動的分割を実装するのには、カスタマイズすることができます。
CViewクラスによって、 CSplitterWnd実装への委任に使用される高レベルのコマンドを次に示します。標準のCView実装にリンクする、全体のCSplitterWnd実装が必要ないように、彼らは仮想です。CViewがなくCSplitterWndを使用するアプリケーションでは、 CSplitterWnd実装、アプリケーションにリンクされていません。
仮想の BOOL CanActivateNext(BOOL bPrev = FALSE);
次のペイン] または [前のペイン] コマンドが現在可能であるかどうかを確認します。
仮想 void ActivateNext (BOOL bPrev = FALSE);
次のペイン] または [前のペイン] コマンドを実行します。
仮想の BOOL DoKeyboardSplit();
[キーボード コマンド、通常「ウィンドウ分割」を分割を実行します。
番号順テクニカル ノート|nbsp;カテゴリ別テクニカル ノート(&N)