Aracılığıyla paylaş


Yardım Menüsü Birleştirme

Bir nesne bir kapsayıcı içinde etkin olduğunda, OLE Belgeleri'nin menü birleştirme protokolü nesneye Yardım menüsünün tam denetimini verir. Sonuç olarak, kullanıcı nesneyi devre dışı bırakmadığı sürece kapsayıcının Yardım konuları kullanılamaz. Etkin belge kapsama mimarisi, hem kapsayıcının hem de etkin olan etkin bir belgenin menüyü paylaşmasına izin vermek için yerinde menü birleştirme kurallarını genişletir. Yeni kurallar, menünün hangi bölümünün hangi bileşenin sahibi olduğu ve paylaşılan menünün nasıl derlendiğiyle ilgili ek kurallardır.

Yeni kural basittir. Etkin belgelerde, Yardım menüsünde aşağıdaki gibi düzenlenmiş iki üst düzey menü öğesi vardır:

Help

Container Help >

Object Help >

Örneğin, Office Ciltçisi'nde bir Word bölümü etkin olduğunda, Yardım menüsü aşağıdaki gibi görünür:

Help

Binder Help >

Word Help >

Her iki menü öğesi de kapsayıcıya ve nesneye özgü ek menü öğelerinin kullanıcıya sağlandığı basamaklı menülerdir. Burada görünen öğeler kapsayıcıya ve ilgili nesnelere göre değişir.

Bu birleştirilmiş Yardım menüsünü oluşturmak için, etkin belge kapsama mimarisi normal OLE Belgeleri yordamını değiştirir. OLE Belgeleri'ne göre, birleştirilmiş menü çubuğunda Dosya, Düzenle, Kapsayıcı, Nesne, Pencere, Yardım olmak üzere bu sırayla altı menü grubu bulunabilir. Her grupta sıfır veya daha fazla menü olabilir. Dosya, Kapsayıcı ve Pencere grupları kapsayıcıya, Düzenle, Nesne ve Yardım grupları da nesneye aittir. Nesne menü birleştirme yapmak istediğinde, boş bir menü çubuğu oluşturur ve kapsayıcıya geçirir. Kapsayıcı daha sonra öğesini çağırarak IOleInPlaceFrame::InsertMenusmenülerini ekler. Nesnesi ayrıca altı LONG değeri (OLEMENUGROUPWIDTHS) içeren bir dizi olan bir yapıyı geçirir. Menüleri ekledikten sonra kapsayıcı, gruplarının her birine kaç menü eklemiş olduğunu işaretler ve sonra döndürür. Ardından nesne, her kapsayıcı grubundaki menü sayısına dikkat ederek menülerini ekler. Son olarak, nesne birleştirilmiş menü çubuğunu ve diziyi (her gruptaki menü sayısını içeren) OLE'ye geçirir ve bu da opak bir "menü tanımlayıcısı" tutamacını döndürür. Daha sonra nesne bu işleyiciyi ve birleştirilmiş menü çubuğunu aracılığıyla IOleInPlaceFrame::SetMenukapsayıcıya geçirir. Şu anda kapsayıcı, birleştirilmiş menü çubuğunu görüntüler ve ayrıca OLE'nin menü iletilerini düzgün bir şekilde gönderebilmesi için tutamacı OLE'ye geçirir.

Değiştirilen etkin belge yordamında, nesnenin kapsayıcıya geçirmeden önce OLEMENUGROUPWIDTHS öğelerini sıfıra başlatması gerekir. Ardından kapsayıcı bir özel durumla normal bir menü ekleme işlemi gerçekleştirir: Kapsayıcı, son öğe olarak bir Yardım menüsü ekler ve OLEMENUGROUPWIDTHS dizisinin son (altıncı) girişinde (yani, nesnenin Yardım grubuna ait olan width[5]) 1 değerini depolar. Bu Yardım menüsünde alt menü olan yalnızca bir öğe bulunur. Daha önce açıklandığı gibi "Kapsayıcı Yardımı>" art arda menüsü.

Nesne daha sonra normal menü ekleme kodunu yürütür, ancak Yardım menüsünü eklemeden önce OLEMENUGROUPWIDTHS dizisinin altıncı girişini denetler. Değer 1 ise ve son menünün adı Yardım (veya uygun yerelleştirilmiş dize) ise nesne, Yardım menüsünü kapsayıcının Yardım menüsünün alt menüsü olarak ekler.

Nesne daha sonra OLEMENUGROUPWIDTHS'in altıncı öğesini sıfır olarak ayarlar ve beşinci öğeyi bir artırır. Bu, OLE'nin Yardım menüsünün kapsayıcıya ait olduğunu ve söz konusu menüye (ve alt menülerine) karşılık gelen menü iletilerinin kapsayıcıya yönlendirilmesi gerektiğini bilmesini sağlar. Ardından, yardım menüsünün nesne bölümüne ait WM_INITMENUPOPUP, WM_SELECT, WM_COMMAND ve menüyle ilgili diğer iletileri iletmek kapsayıcının sorumluluğundadır. Bu, kullanıcının nesnenin Yardım menüsüne gidip gitmediğini kapsayıcıya bildiren bir bayrağı temizlemek için WM_INITMENU kullanılarak gerçekleştirilir. Daha sonra kapsayıcı, yardım menüsünde kapsayıcının kendisini eklemediği herhangi bir öğeye giriş veya öğeden çıkmak için WM_MENUSELECT izler. Girişte, kullanıcının bir nesne menüsüne girdiği anlamına gelir, bu nedenle kapsayıcı "nesne içinde Yardım menüsü" bayrağını ayarlar ve bu bayrağın durumunu kullanarak WM_MENUSELECT, WM_INITMENUPOPUP ve WM_COMMAND iletilerini en azından nesne penceresine iletir. (Çıkışta kapsayıcı bayrağı temizler ve ardından bu iletilerin kendisini işler.) Kapsayıcı, nesnenin IOleInPlaceActiveObejct::GetWindow işlevinden döndürülen pencereyi bu iletiler için hedef olarak kullanmalıdır.

Nesne OLEMENUGROUPWIDTHS'in altıncı öğesinde sıfır algılarsa, normal OLE Belgeleri kurallarına göre devam eder. Bu yordam, Yardım menüsü birleştirme işlemine katılan kapsayıcıların yanı sıra katılmayan kapsayıcıları kapsar.

Nesnesi çağırdığındaIOleInPlaceFrame::SetMenu, birleştirilmiş menü çubuğunu görüntülemeden önce kapsayıcı, Yardım menüsünün ek bir alt menüsü olup olmadığını ve kapsayıcının ekleyip eklemediğini denetler. Bu durumda kapsayıcı, yardım menüsünü birleştirilmiş menü çubuğunda bırakır. Yardım menüsünde ek bir alt menü yoksa kapsayıcı, yardım menüsünü birleştirilmiş menü çubuğundan kaldırır. Bu yordam, Yardım menüsü birleştirmeye katılan ve birleştirmeyen nesneleri kapsar.

Son olarak, menüyü sökme zamanı geldiğinde, nesne eklenen diğer menüleri kaldırmanın yanı sıra eklenen Yardım menüsünü de kaldırır. Kapsayıcı menülerini kaldırdığında, eklendiği diğer menülere ek olarak Yardım menüsünü de kaldırır.

Ayrıca bkz.

Etkin Belge Kapsayıcıları