다음을 통해 공유


TN040: OLE MFC/크기 조정 및 확대/축소 원위치

[!참고]

온라인 설명서의을 처음 포함 되었습니다 때문 다음 기술 참고 업데이트 되지 않았습니다.따라서 일부 절차 및 항목 오래 되었거나 잘못 된 수 있습니다.최신 정보는 온라인 설명서 색인에서 관심 있는 주제에 대해 검색 하는 것이 좋습니다.

이 참고가 위치에서 편집 하기와 관련 된 문제 및 서버 해야 올바른 확대/축소를 수행 방법과 장소에 크기 조정 설명 합니다.현재 위치에서 활성화를 WYSIWYG 개념에 해당 컨테이너에서 한 단계 더 나아가 수행 되지 및 서버가 서로 협력 하 고 OLE 사양을과 거의 같은 방식으로 해석 하는 특히.

현재 위치에서 활성화를 지 원하는 서버의 컨테이너 사이의 닫기 상호 작용 때문에 여러 가지를 유지 해야 하는 최종 사용자의 기대:

  • 프레젠테이션 디스플레이 (그려진 메타 파일을 COleServerItem::OnDraw 재정의) 때 (편집 도구가 표시 되지 않습니다 된다는) 편집용 그릴로 모양이 동일 해야 합니다.

  • 서버 창 컨테이너를 확대 하는 경우에 너무 합니다!

  • 컨테이너와 서버 개체 같은 메트릭을 사용 하 여 편집을 위해 표시 되어야 합니다.즉 수에 기초한 매핑 모드를 사용 하 여 논리 인치 당 픽셀 수-없습니다 실제 픽셀 / 인치 디스플레이 장치에 렌더링 하는 경우.

[!참고]

연결 되지 않고 포함 된 항목에만 적용 되는 위치에서 활성화 하기 때문에 확대 포함된 개체에만 적용 합니다.Api에서 모두 볼 수 COleServerDocCOleServerItem 확대/축소에 사용 되.연결 및 포함 된 항목에 대해 사용할 수 있는 함수에만 있는 것이 dichotomy에 대 한 이유입니다 COleServerItem (공통 구현이 있을 수 있습니다) 및 포함 된 개체에만 사용할 수 있는 함수에 위치는 COleServerDoc 클래스 (서버의 관점에서 보면 것은 document 포함 됩니다).

대부분의 부담 배치 구현자에서 서버, 서버 컨테이너의 확대/축소 비율을 유의 하 고 편집 인터페이스를 적절 하 게 수정 해야 합니다.그러나 서버 컨테이너를 사용 하 여 확대/축소 비율을 결정 하는 있지?

확대/축소에 대 한 MFC 지원

호출 하 여 현재 확대/축소 비율을 확인할 수 있습니다 COleServerDoc::GetZoomFactor.문서의 현재 위치에서 활성화 하지 않으면이 호출을 100% 확대/축소 비율 (또는 1: 1 비율) 항상 발생 합니다.현재 위치에서 활성화는 100% 이외의 항목을 반환할 수 있지만 그것을 호출 합니다.

정확 하 게 확대/축소의 일례를 MFC OLE 샘플을 참조 하십시오. HIERSVR.HIERSVR에서 확대/축소 텍스트 표시 및 텍스트 (힌트, 활자체 규약, 디자인 너비, 및 높이 매우 복잡 하 게 만들 모든) 비평가에 일반적으로 크기가 조절 되지 않습니다 사실 복잡해졌습니다.그러나 HIERSVR 있는지 제대로 확대를 구현 하기 위한 적절 한 참조와 MFC 자습서 낙서 (7 단계).

COleServerDoc::GetZoomFactor많은 다른 메트릭 사용할 수 있는 컨테이너 또는 구현을 기반으로 하는 확대/축소 비율을 결정 하면 COleServerItemCOleServerDoc 클래스입니다.즉, 현재 확대/축소 계수는 다음 수식으로 결정 됩니다.

Position Rectangle (PR) / Container Extent (CE)

사각형의 위치는 컨테이너에 의해 결정 됩니다.내부 활성화 동안 서버에 반환 때 COleClientItem::OnGetItemPosition 라고 하며 컨테이너는 서버를 호출 하면 업데이트 COleServerDoc::OnSetItemRects (호출로 COleClientItem::SetItemRects).

컨테이너 범위를 계산 하는 다소 복잡 한입니다.컨테이너 라고 하는 경우 COleServerItem::OnSetExtent (호출로 COleClientItem::SetExtent), 컨테이너 범위 논리 인치 당 픽셀 수를 기준으로 픽셀로 변환이 값입니다.컨테이너는 보통의 경우 SetExtent, 호출 않았습니다 경우 컨테이너 범위에서 반환 되는 크기는 COleServerItem::OnGetExtent.컨테이너 SetExtent 라고 하면, 프레임 워크 매핑될 경우 컨테이너 범위 자연의 100%를 호출한 있을 것는 가정 (반환 값 COleServerItem::GetExtent).즉 프레임 워크 100% (덜, 더 이상) 항목의 컨테이너를 표시 하는 것으로 가정 합니다.

하지만 이때 중요 COleServerItem::OnSetExtentCOleServerItem::OnGetExtent 이름이 비슷한 같은 항목의 특성을 조작 하지 않습니다.OnSetExtent알고 얼마나 개체의 컨테이너 (확대/축소 비율)를 관계 없이 표시 되는 서버를 호출 하면 되 고 OnGetExtent 개체의 이상적인 크기를 결정 하는 컨테이너에 의해 호출 됩니다.

각 관련 된 Api에 보면, 보다 명확한 그림을 얻을 수 있습니다.

COleServerItem::OnGetExtent

이 함수에서 HIMETRIC 단위 항목의 "기본 크기"를 반환 해야 합니다."자연 스러운 크기"를 생각 하는 가장 좋은 방법은 그 크기 인쇄 될 때 나타나는 것으로 정의 하는 것입니다.여기에서 반환 되는 크기는 특정 항목 내용 (특정 항목에 대 한 상수를 메타 파일 처럼)에 대 한 상수입니다.확대/축소 항목에 적용 된 경우이 크기는 변경 되지 않습니다.컨테이너를 호출 하 여 더 많거나 적은 공간 항목을 제공 하는 경우 일반적으로 변경 되지 않습니다 OnSetExtent.간단한 텍스트 편집기로 컨테이너에서 보낸 마지막 범위를 기반으로 텍스트 줄 바꿈 없음 "여백" 기능을 변경의 예로 들 수 있습니다.서버를 변경 하지 않으면 서버 아마도 비트 시스템 레지스트리에 있는 OLEMISC_RECOMPOSEONRESIZE 설정 합니다 (자세한 내용은 OLE SDK 설명서에이 옵션 참조).

COleServerItem::OnSetExtent

"다소" 개체의 컨테이너가 표시 되 면이 함수가 호출 됩니다.대부분의 컨테이너가 전혀 호출 하지 않습니다.기본 구현에서 사용 되는 컨테이너에 'm_sizeExtent' 로부터 받은 마지막 값을 저장 합니다. COleServerDoc::GetZoomFactor 위에서 설명한 컨테이너 범위 값을 계산할 때.

COleServerDoc::OnSetItemRects

이 함수는 문서의 현재 위치에서 활성화 경우에 호출 됩니다.컨테이너의 항목 위치나 항목에 적용 된 클리핑 업데이트할 때 호출 됩니다.위치 사각형 위에서 설명한 대로 확대/축소 비율 계산에 대 한 분자를 제공 합니다.서버를 호출 하 여 항목의 위치를 변경 하는 것을 요청할 수 있습니다 COleServerDoc::RequestPositionChange.컨테이너를 호출 하 여이 요청에 응답할 수 없습니다 있고 OnSetItemRects (호출로 COleServerItem::SetItemRects).

COleServerDoc::OnDraw

메타 파일을 재정의 하 여 만든 것을 실현 하는 것이 중요 COleServerItem::OnDraw 현재 확대/축소 비율에 관계 없이 동일한 메타가 정확 하 게 만듭니다.컨테이너는 메타 파일을 적절 하 게 조정 됩니다.이 보기의 중요 한 차이입니다 OnDraw 및 서버 항목의 OnDraw.방금 항목 확대 보기 핸들을 만듭니다 있는 zoomable 메타 파일 및 적절 한 확대를 위해서는 컨테이너까지 나갈.

서버가 제대로 작동 되도록 하는 가장 좋은 방법은 구현을 사용 하는 COleServerDoc::GetZoomFactor 경우 문서의 현재 위치에서 활성화 합니다.

나타나는 결과 대 한 MFC 지원

MFC OLE 2 사양에 설명 된 것 처럼 완벽 하 게 내부 크기 조정 인터페이스를 구현 합니다.사용자 인터페이스 지원 되는 COleResizeBar 사용자 지정 메시지 클래스 WM_SIZECHILD, 및이 메시지의 특수 처리 COleIPFrameWnd.

다른 프레임 워크에서 제공 되는 무엇 보다이 메시지 처리를 구현 할 수 있습니다.위에서 설명한 대로 컨테이너에 나타나는 결과 프레임 워크를 떠날-확대/축소 비율을 변경 하려면 서버를 응답 합니다.컨테이너를 모두 설정 하 여 반응 하는 경우 컨테이너 정도와 위치 사각형을 처리 하는 동안 해당 COleClientItem::OnChangeItemPosition (에 대 한 호출의 결과로 호출 COleServerDoc::RequestPositionChange) "다소" 항목의 편집 창에 있는 전체 크기 조정 발생 한 다음.컨테이너 처리 중 바로 사각형 위치를 설정 하 여 반응 하는 경우 COleClientItem::OnChangeItemPosition, 확대/축소 비율을 변경 하 고 "또는 축소 확대" 항목이 표시 됩니다

서버는이 협상 도중 일어나 (어느 정도)를 제어할 수 있습니다.스프레드시트, 예를 들어 수 있습니다 선택할 항목을 편집 하는 동안 사용자는 창 크기가 조정 될 때 더 많거나 적은 셀 내부에 표시 합니다.Word-processor는 창과 동일 하 고 새 여백에 텍스트 줄을 바꿀 수 있도록 "페이지 여백"을 변경할 선택할 수 있습니다.서버 구현이 자연 범위를 변경 하 여 (반환 된 크기 COleServerItem::OnGetExtent) 하면 크기 조정이 수행 됩니다.이 사각형의 위치와 컨테이너 범위는 동일한 확대/축소 비율을 크게 생성 또는 더 작게 보기 영역을 같은 크기 만큼 변경 합니다 발생 합니다.또한, 더 많거나 적은 문서를 생성 하는 메타 파일에 볼 수 OnDraw.이 경우 보기 영역 대신 해당 항목을 사용자가 크기를 조정할 때 문서 자체가 변경입니다.

사용자 지정 크기 조정를 구현 하 고 여전히가 제공 하는 사용자 인터페이스를 활용할 수 있습니다 COleResizeBar 를 재정의 하 여는 WM_SIZECHILD 에 메시지를 COleIPFrameWnd 클래스입니다.특성에 대 한 자세한 내용은 WM_SIZECHILD를 참조 하십시오 기술 노트 24.

참고 항목

기타 리소스

번호 기술 정보

범주별 기술 노트