Etkin Belgeler
Etkin belgeler OLE'nin bileşik belge teknolojisini genişletir. Bu uzantılar görünümleri yöneten ek arabirimler biçiminde sağlanır, böylece nesneler kapsayıcılar içinde çalışır ve yine de görüntüleme ve yazdırma işlevleri üzerinde denetimi korur. Bu işlem, belgeleri hem yabancı çerçevelerde (Microsoft Office Bağlayıcısı veya Microsoft Internet Explorer gibi) hem de yerel çerçevelerde (ürünün kendi görünüm bağlantı noktaları gibi) görüntülemeyi mümkün kılar.
Bu bölümde, etkin belgeler için işlevsel gereksinimler açıklanmaktadır. Etkin belge bir veri kümesine sahiptir ve verilerin kaydedilip alınabileceği depolama alanına erişime sahiptir. Verilerinde bir veya daha fazla görünüm oluşturabilir ve yönetebilir. Etkin belge, OLE belgelerinin her zamanki ekleme ve yerinde etkinleştirme arabirimlerini desteklemenin yanı sıra, aracılığıyla IOleDocument
görünüm oluşturma yeteneğini de iletir. Bu arabirim aracılığıyla kapsayıcı, etkin belgenin görüntüleyebileceği görünümleri oluşturmayı (ve muhtemelen numaralandırmayı) isteyebilir. Bu arabirim aracılığıyla, etkin belge kendi hakkında birden çok görünümü veya karmaşık dikdörtgeni destekleyip desteklemediği gibi çeşitli bilgiler de sağlayabilir.
Arabirimi aşağıdadır IOleDocument
. Arabirimin IEnumOleDocumentViews
türler için IOleDocumentView*
standart bir OLE numaralandırıcısı olduğunu unutmayın.
interface IOleDocument : IUnknown
{
HRESULT CreateView(
[in] IOleInPlaceSite *pIPSite,
[in] IStream *pstm,
[in] DWORD dwReserved,
[out] IOleDocumentView **ppView);
HRESULT GetDocMiscStatus([out] DWORD *pdwStatus);
HRESULT EnumViews(
[out] IEnumOleDocumentViews **ppEnum,
[out] IOleDocumentView **ppView);
}
Her etkin belgenin bu arabirime sahip bir görünüm çerçevesi sağlayıcısı olmalıdır. Belge bir kapsayıcıya eklenmediyse, etkin belge sunucusunun kendisi görünüm çerçevesini sağlamalıdır. Ancak, etkin belge etkin bir belge kapsayıcısında eklendiğinde, kapsayıcı görünüm çerçevesini sağlar.
Etkin bir belge, verilerinin bir veya daha fazla görünüm türünü (örneğin, normal, ana hat, sayfa düzeni vb.) oluşturabilir. Görünümler, verilerin görülebildiği filtreler gibi davranır. Belgede yalnızca bir görünüm türü olsa bile, yeni pencere işlevselliğini desteklemenin bir aracı olarak birden çok görünümü (örneğin, Office uygulaması liklerde Pencere menüsündeki Yeni Pencere öğesi) desteklemek isteyebilirsiniz.
Etkin Belgeler için Gereksinimler
Etkin bir belge kapsayıcısında görüntülenebilen etkin bir belgenin:
uygulamasını uygulayarak
IPersistStorage
OLE'nin Bileşik Dosyalarını depolama mekanizması olarak kullanın.Dosyadan Oluştur da dahil olmak üzere OLE Belgelerinin temel ekleme özelliklerini destekleyin. Bu, ,
IOleObject
veIDataObject
arabirimlerini zorunlu kılmaktadırIPersistFile
.Her biri yerinde etkinleştirme yapabilen bir veya daha fazla görünümü destekleyin. Başka bir ifadeyle, görünümlerin arabirimleri
IOleDocumentView
ve arabirimleri (kapsayıcınınIOleInPlaceSite
veIOleInPlaceActiveObject
IOleInPlaceFrame
arabirimleriIOleInPlaceObject
kullanılarak) desteklemesi gerekir., ve
IPrint
standart etkin belge arabirimlerini destekleyin.IOleDocument
IOleCommandTarget
Kapsayıcı tarafı arabirimlerinin ne zaman ve nasıl kullanılacağı hakkında bilgi bu gereksinimlerde açıklanmıştır.
Nesneleri Görüntüleme Gereksinimleri
Etkin bir belge, verilerinin bir veya daha fazla görünümünü oluşturabilir. İşlevsel olarak, bu görünümler verileri görüntülemek için belirli bir yönteme bağlantı noktaları gibidir. Etkin bir belge yalnızca tek bir görünümü destekliyorsa, etkin belge ve bu tek görünüm tek bir sınıf kullanılarak uygulanabilir. IOleDocument::CreateView
aynı nesnenin IOleDocumentView
arabirim işaretçisini döndürür.
Etkin bir belge kapsayıcısında temsil edilebilmesi için görünüm bileşeninin ve IOleInPlaceActiveObject
ek olarak öğesini desteklemesi IOleInPlaceObject
IOleDocumentView
gerekir:
interface IOleDocumentView : IUnknown
{
HRESULT SetInPlaceSite([in] IOleInPlaceSite *pIPSite);
HRESULT GetInPlaceSite([out] IOleInPlaceSite **ppIPSite);
HRESULT GetDocument([out] IUnknown **ppunk);
[input_sync] HRESULT SetRect([in] LPRECT prcView);
HRESULT GetRect([in] LPRECT prcView);
[input_sync] HRESULT SetRectComplex(
[in] LPRECT prcView,
[in] LPRECT prcHScroll,
[in] LPRECT prcVScroll,
[in] LPRECT prcSizeBox);
HRESULT Show([in] BOOL fShow);
HRESULT UIActivate([in] BOOL fUIActivate);
HRESULT Open(void);
HRESULT CloseView([in] DWORD dwReserved);
HRESULT SaveViewState([in] IStream *pstm);
HRESULT ApplyViewState([in] IStream *pstm);
HRESULT Clone(
[in] IOleInPlaceSite *pIPSiteNew,
[out] IOleDocumentView **ppViewNew);
}
Her görünümün, görünüm çerçevesini ve görünüm bağlantı noktasını (HWND ve bu pencerede dikdörtgen bir alan) kapsülleyen ilişkili bir görünüm sitesi vardır. Site, standart IOleInPlaceSite
arabirim olsa da bu işlevselliği kullanıma sunar. Tek bir HWND üzerinde birden fazla görünüm bağlantı noktası olabileceğini unutmayın.
Genellikle, her görünüm türünün farklı bir basılı gösterimi vardır. Bu nedenle görünümler ve ilgili görünüm siteleri sırasıyla ve IContinueCallback
ise IPrint
yazdırma arabirimlerini uygulamalıdır. Üstbilgiler, alt bilgiler, kenar boşlukları ve ilgili öğelerin doğru yazdırılması için, görünüm çerçevesinin yazdırma başladığında görüntüleme sağlayıcısıyla IPrint
anlaşması gerekir. Görünüm sağlayıcısı, yazdırmayla ilgili olayların çerçevesini aracılığıyla IContinueCallback
bildirir. Bu arabirimlerin kullanımı hakkında daha fazla bilgi için bkz . Programlı Yazdırma.
Etkin bir belge yalnızca tek bir görünümü destekliyorsa, etkin belgenin ve bu tek görünümün tek bir somut sınıf kullanılarak uygulanabileceğini unutmayın. IOleDocument::CreateView
yalnızca aynı nesnenin IOleDocumentView
arabirim işaretçisini döndürür. Kısacası, yalnızca bir görünüm gerektiğinde iki ayrı nesne örneği olması gerekmez.
Görünüm nesnesi bir komut hedefi de olabilir. Bir görünüm uygulayarak IOleCommandTarget
kapsayıcının kullanıcı arabiriminden kaynaklanan komutları alabilir (Yeni, Aç, Farklı Kaydet, Dosya menüsünde yazdır ve Düzenle menüsünde Kopyala, Yapıştır, Geri Al gibi). Daha fazla bilgi için bkz . İleti İşleme ve Komut Hedefleri.