방법: 코드에서 추적 구현
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
해야 합니다. 전체 예제는 CMainView::OnLButtonDown
MFC OLE 샘플 OCLIENT 에 있는 함수를 참조하세요.
클래스는 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);
}