OLE 項目を追跡するには、その項目をクリックするか、ドキュメントのビューを更新などの項目に関連する特定のイベントを処理します。どちらの場合も、 CRectTracker の一時オブジェクトを宣言し、このオブジェクトによって項目を処理するだけで十分です。
ユーザーが項目を選択すると、メニュー コマンドでオブジェクトを挿入すると、 OLE アイテムの状態を表すために適切な形式のトラッカーを初期化します。次の表は、 OCLIENT サンプルで使用される規則の概要を示します。これらの形式の詳細については、 CRectTrackerを参照してください。
OLE 項目コンテナーのフォームと都道府県
表示されるフォーム |
OLE アイテムの都道府県 |
|---|---|
ブレークポイントを打たれた境界線 |
項目はリンクされます |
実線の境界線 |
項目はドキュメントに埋め込まれます |
サイズ変更ハンドル |
項目は選択されています |
ハッチ境界線 |
項目が現在埋め込み先編集です |
陰影パターンは、項目に重なって表示します |
項目のサーバーは開いています |
OLE アイテムの状態をチェックし、適切な形式を設定する手順を使用してこの初期化を簡単に処理できます。OCLIENT サンプルにある SetupTracker 関数は、トラッカーの初期化を示します。この関数のパラメーターは、トラッカー pTrackerのアドレスです; トラッカーに関連するクライアント項目、 pItemへのポインター; と四角形、 pTrueRectへのポインター。この関数の詳細のコード例全体については、 MFC サンプルの OLE OCLIENTを参照してください。
SetupTracker のコード例は、一つの関数を示しています; 関数の機能の説明と関数の行が混在しています:
void CMainView::SetupTracker(CRectTracker* pTracker, CRectItem* pItem,
CRect* pTrueRect)
トラッカーが最小サイズを設定し、トラッカーのフォームをオフにして初期化されます。
// set minimum size for our OLE items
pTracker->m_sizeMin.cx = 8;
pTracker->m_sizeMin.cy = 8;
pTracker->m_nStyle = 0;
次の行は、項目が現在選択されているかどうか、および項目がドキュメントにリンクされているか、アセンブリに埋め込むかどうかをチェックします。境界線の内側にあるサイズ変更ハンドルが項目が現在選択されていることを示すフォームに追加されます。項目がドキュメントにリンクされている場合、ブレークポイントを打たれた境界線スタイルが使用されます。ソリッド境界線は、項目が埋め込まれる場合使用されます。
// setup resize handles if item is selected
if (pItem == m_pSelection)
pTracker->m_nStyle |= CRectTracker::resizeInside;
// put correct border depending on item type
if (pItem->GetType() == OT_LINK)
pTracker->m_nStyle |= CRectTracker::dottedLine;
else
pTracker->m_nStyle |= CRectTracker::solidLine;
次のコードは、ハッチ パターンと項目が現在開いている項目をオーバーレイを適用します。
// put hatching over the item if it is currently open
if (pItem->GetItemState() == COleClientItem::openState ||
pItem->GetItemState() == COleClientItem::activeUIState)
{
pTracker->m_nStyle |= CRectTracker::hatchInside;
}
トラッカーが表示される必要があるたびに、この関数を呼び出しますできます。たとえば、ビュー クラスの OnDraw の関数からダイヤルします。これは、ビューが描画されるたびに、トラッカーの外観を更新します。コード例全体については、 MFC サンプルの OLE OCLIENTの CMainView::OnDraw 関数を参照してください。
アプリケーションでは、トラッカー コードを、サイズ変更などの移動が必要とする検出するイベント、またはヒットが発生します。これらの操作は、通常、その項目をつかむまたは移動する試みられていることを示します。このような場合、つかまれたかを決定する必要があります: サイズ変更ハンドル間の境界線のサイズ変更ハンドルや部分。OnLButtonDown のメッセージ ハンドラーは、項目に対するマウスの位置をテストに適しています。CRectTracker::HitTestに呼び出しを作成します。テストが CRectTracker::hitOutsideのほかのものを返す場合、項目は、サイズ変更、または移動されています。したがって、 Track のメンバー関数に呼び出しをする必要があります。MFC OLE OCLIENT サンプルにあるコード例全体については CMainView::OnLButtonDown 関数を参照してください。
CRectTracker のクラスは、移動、サイズ変更、またはドラッグ操作が発生するかどうかを示すために使用される複数のカーソルの図形を提供します。このイベントは、マウスの下の項目が現在選択されているかどうかを確認するには、チェック。そうである場合、呼び出しを CRectTracker::SetCursorに行うか、または既定のハンドラーから呼び出します。次の例は、 MFC の OLE サンプル OCLIENTからあります:
BOOL CMainView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if (pWnd == this && m_pSelection != NULL)
{
// give the tracker for the selection a chance
CRectTracker tracker;
SetupTracker(&tracker, m_pSelection);
if (tracker.SetCursor(this, nHitTest))
return TRUE;
}
return CScrollView::OnSetCursor(pWnd, nHitTest, message);
}