이 노트는 제자리에서 편집에 관련 된 문제 및 서버 해야 올바른 확대 수행 방법과 장소 크기 논의할 예정 이다. 현재 위치에서 활성화를 WYSIWYG 개념 그 용기에 한 걸음 더 나아가 촬영 됩니다와 서버, 서로 협력 하 고 특히 해석 OLE 사양의 거의 같은 방법으로。
컨테이너를 현재 위치에서 활성화를 지 원하는 서버 사이의 닫기 상호 작용의 때문에 거기에 다양 한 유지 관리 해야 하는 최종 사용자 로부터 기대:
메모nbsp;??현재 위치에서 활성화 (연결 되지 않은) 포함 하는 항목에만 적용 됩니다, 때문에 확대만 포함된 개체에 적용 됩니다. COleServerItem COleServerDoc 에서 확대/축소에 사용 되는 Api를 볼 수 있습니다. 이 이분법에 대 한 이유는 연결 및 포함 된 항목에 대 한 유효한 함수만 COleServerItem 에서 (이 수 있습니다 일반적인 구현이) COleServerDoc 클래스에 있는 기능을 포함 된 개체에 대해서만 유효 하 고 (서버의 관점에서 그것이 포함 된 문서 )(&N)。
대부분의 부담에서 서버 컨테이너의 확대/축소 비율을 알고 있어야 하 고 적절 하 게 편집 인터페이스를 수정 해야 합니다 서버 구현자에 배치 됩니다. 하지만 어떻게 서버 컨테이너를 사용 하 여 확대/축소 비율을 결정 합니까?
확대/축소에 대 한 MFC 지원
COleServerDoc::GetZoomFactor를 호출 하 여 현재 확대/축소 비율을 확인할 수 있습니다. 이 문서는 현재 위치에서 활성화 될 때 호출 항상 100% 확대/축소 비율 (또는 1: 1 비율)에 발생 합니다. 현재 위치에서 활성화 100% 이외의 값을 반환할 수 있습니다 하는 동안 호출。
올바르게 확대의 예에 대 한 MFC OLE 샘플을 참조 하십시오. HIERSVR. 텍스트를 표시 하는 사실에 의해 복잡 HIERSVR 확대-텍스트, 일반적으로 확장 되지 않습니다 (힌트, 활자체 규약, 너비와 높이 모두 문제를 복잡 하 게 디자인) 선형 패션에서 및. 아직도, HIERSVR 제대로 확대를 구현 하기 위한 합리적인 기준 이며 그래서 MFC 튜토리얼 낙서 (7 단계)。
COleServerDoc::GetZoomFactor 는 다른 통계를 사용할 수 있는 컨테이너 또는 COleServerItem 및 COleServerDoc 클래스의 구현에서 수를 기반으로 하는 확대/축소 비율을 결정 합니다. 즉, 현재 확대/축소 배율은 다음 수식에 의해 결정 됩니다.
사각형 (홍보) 위치 / 컨테이너 범위 (CE)
위치 사각형 컨테이너에 의해 결정 됩니다. COleClientItem::OnGetItemPosition 라고 하 고 (함께 COleClientItem::SetItemRects호출) 서버 COleServerDoc::OnSetItemRects 를 호출 하는 컨테이너 업데이트 하는 경우 현재 위치에서 활성화 하는 동안 서버에 반환 됩니다.
컨테이너 범위 계산에 약간 더 복잡 하다. 컨테이너 라는 COleServerItem::OnSetExtent (와 COleClientItem::SetExtent을 호출), 다음 컨테이너 범위 경우 논리 인치 당 픽셀 수를 기반으로 하는 픽셀이 값이 변환 됩니다. 컨테이너 (이 경우 일반적으로) Setextent를 호출 하지가, 컨테이너 범위는 COleServerItem::OnGetExtent에서 반환 된 크기입니다. 그래서, 컨테이너에 SetExtent 라는 면 프레임 워크는 경우 컨테이너는 이라고 그것 자연 정도 ( COleServerItem::GetExtent에서 반환 하는 값)을 100%로 가정 합니다. 또는 다른 방법으로, 명시 된 프레임 워크를 가정 컨테이너 항목의 100% (이상, 아니 덜) 표시。
그것은 COleServerItem::OnSetExtent 및 COleServerItem::OnGetExtent 와 유사한 이름을, 비록 그들은 조작 하지 항목의 동일한 특성을 메모 하는 것이 중요 합니다. OnSetExtent 인지 얼마나 많은 개체 (확대/축소 비율) 관계 없이 컨테이너에 표시 하는 서버를 호출 하 고 OnGetExtent 개체의 이상적인 크기를 확인 하려면 컨테이너에 의해 호출 됩니다.
여기에 참여 하는 Api의 각을 보면 명확한 그림을 얻을 수합니다 있습니다.:
COleServerItem::OnGetExtent
이 함수는 HIMETRIC 단위 항목의 "기본 크기"를 반환 해야 합니다. "자연 크기" 생각 하는 가장 좋은 방법은 인쇄 될 때 나타나는 크기 그것을 정의 하는 것. 크기 같습니다. (특정 항목에 대 한 상수는 metafile 처럼) 특정 항목 내용에 대 한 상수를 반환 합니다. 이 크기는 확대/축소 항목에 적용 될 때 변경 되지 않습니다. 일반적으로 컨테이너 항목 더 많거나 적은 공간 제공 OnSetExtent를 호출 하 여 때 변경 되지 않습니다. 변경의 예로 텍스트 컨테이너에서 보낸 마지막 정도에 따라 포장 "여백" 기능 없이 간단한 텍스트 편집기 될 수도 있습니다. 서버 변경, 서버 아마 설정 해야 시스템 레지스트리에 비트 OLEMISC_RECOMPOSEONRESIZE (이 옵션에 대 한 자세한 내용은 OLE SDK 설명서를 참조 하십시오)。
COleServerItem::OnSetExtent
이 함수는 컨테이너 "더 많거나 적은" 개체의 표시 때 호출 됩니다. 대부분의 컨테이너가 전혀 호출 하지 않습니다. 'M_sizeExtent', 위에서 설명한 컨테이너 범위 값을 계산 하는 경우 COleServerDoc::GetZoomFactor 에서 사용 되는 컨테이너에서 받은 마지막 값을 저장 하는 기본 구현。
COleServerDoc::OnSetItemRects
이 함수는 문서가 현재 위치에서 활성화 하는 경우에 호출 됩니다. 항목의 위치 또는 항목에 적용 된 클리핑 컨테이너 업데이트 될 때 호출 됩니다. 위치 사각형 위에서 설명한 대로 확대/축소 비율 계산에 대 한 분자를 제공 합니다. 서버는 COleServerDoc::RequestPositionChange를 호출 하 여 항목 위치를 변경 하는 것을 요청할 수 있습니다. 컨테이너 수 있습니다. 또는 OnSetItemRects ( COleServerItem::SetItemRects에 대 한 호출)을 호출 하 여이 요청에 응답 하지 않을 수 있습니다.
COleServerDoc::OnDraw
그것은 COleServerItem::OnDraw 를 재정의 하 여 만든 메타 파일 현재 확대/축소 비율에 관계 없이 동일한 된 metafile 정확 하 게 생산을 실현 하는 것이 중요 합니다. 컨테이너는 적절 한 메타 파일을 조정 됩니다. 이것은 보기의 OnDraw 과 서버 항목의 OnDraw간의 중요 한 차이 이다. 확대 보기 핸들 항목 그냥 만듭니다는 zoomable 메타 파일 적절 한 확대 할 컨테이너에 나뭇잎。
서버가 제대로 작동을 보장 하는 가장 좋은 방법은 귀하의 문서가 현재 위치에서 활성화 하는 경우 COleServerDoc::GetZoomFactor 의 구현을 사용 하는。
제자리에서 크기 조정에 대 한 MFC 지원
MFC OLE 2 사양에 설명 된 대로 완전히 제자리에 크기 조정 인터페이스를 구현 합니다. 사용자 인터페이스는 COleResizeBar 클래스, 사용자 지정 메시지 WM_SIZECHILD, 및 COleIPFrameWnd 에서이 메시지의 특수 하 게 처리 하 여 지원。
다른 프레임 워크에서 제공 하는 무엇 보다이 메시지 처리를 구현 하는 것이 좋습니다. 위에서 설명한 대로 프레임 워크 나뭇잎 장소에 컨테이너를 조정의 결과 ? 서버 확대/축소 비율에 있는 변화에 반응 합니다. 두 컨테이너 범위를 설정 하 여 반응 하는 컨테이너의 COleClientItem::OnChangeItemPosition ( COleServerDoc::RequestPositionChange에 대 한 호출의 결과로 라고도 함) 다음 장소에서 처리 하는 동안 위치 사각형 크기를 조정 하는 경우 "더 많거나 적은" 항목의 편집 창에 표시 됩니다. 컨테이너 그냥 COleClientItem::OnChangeItemPosition를 처리 하는 동안 위치 사각형을 설정 하 여 반응 하는 경우 확대/축소 비율을 변경 하 고 "확대 또는 축소 합니다." 항목을 표시 됩니다.
서버는이 협상 중에 일어나 (어느 정도)를 제어할 수 있습니다. 스프레드시트 예 셀을 표시 하려면 더 많거나 적은 사용자 항목을 편집 하는 동안 창의 크기를 조정 하는 경우 제자리에서 선택할 수도 있습니다. Word-processor 그래서 그들은 창 동일 고 새 여백 텍스트를 바꿀 "페이지 여백"을 변경할 선택할 수 있습니다. 서버 자연 정도 ( COleServerItem::OnGetExtent에서 반환 된 크기)를 변경 하 여이 구현 크기를 조정 할 때. 이 위치 사각형 및 컨테이너 범위 모두 동일한 금액 결과 동일한 확대/축소 비율, 하지만 더 큰 또는 작은 보기 영역으로 변경 하면 됩니다. 또한, 더 많거나 적은 문서 OnDraw에서 생성 된 메타 파일에 표시 될 것입니다. 사용자 항목 그냥 보기 영역 크기를 조정 하는 경우 문서 자체는 변화 하는 경우。
사용자 지정 크기를 구현 하 고 여전히 COleIPFrameWnd 클래스에 WM_SIZECHILD 메시지를 재정의 하 여 COleResizeBar 에서 제공 하는 사용자 인터페이스를 활용할 수 있습니다. WM_SIZECHILD의 세부 사항에 자세한 내용은 다음 웹 사이트를 참조 하십시오. 기술 노트 24。
기술 노트 번호로 |nbsp; 카테고리별 기술 노트(&N)