Aracılığıyla paylaş


TN071: mfc IOleCommandTarget uygulaması

[!NOT]

İlk çevrimiçi belgelerinde yer almıştır beri aşağıdaki teknik Not güncelleştirilmedi.Sonuç olarak bazı yordamlar ve konuları eski veya yanlış.En son bilgiler için çevrimiçi belgelere dizini ilgilendiğiniz konu aramak önerilir.

IOleCommandTarget Nesneleri ve kendi kapsayıcılar birbirlerine komutlar göndermek için arabirim sağlar.Örneğin, bir nesnenin araç çubukları düğmeler komutları gibi içerebilir baskı, Baskı Önizleme, kaydetmek, New, ve Yakınlaştırma.Böyle bir nesne katıştırılmış, destekleyen bir kapsayıcı IOleCommandTarget, nesnenin kendi düğmelerini etkinleştirebilir ve komutları kullanıcının tıklatıldığında işlemek için konteyner ilet.Konteyner kendisi yazdırmak için katıştırılmış nesneyi isteseydiniz, bunu komutu aracılığıyla göndermek yoluyla bu isteği yapabilir IOleCommandTarget arabirimi, bir katıştırılmış nesne.

IOleCommandTargetbir sunucuda yöntemlerini çağırmak için bir istemci tarafından kullanılır gibi Otomasyon arabirimi olmamasıdır.Ancak, kullanarak IOleCommandTarget programcılar genellikle pahalı kullanmak zorunda Otomasyon arabirimleri aramaların yükünü kaydeder Invoke yöntemi IDispatch.

mfc, de IOleCommandTarget arabirimi etkin belge kapsayıcıları sunucuya komutlar göndermek izin vermek için etkin belgeyi sunucuları tarafından kullanılır.Etkin belge sunucu sınıfı CDocObjectServerItem, mfc arabirimi eşlemelerini kullanır (bkz: TN038: mfc/ole IUnknown uygulama) uygulamak için IOleCommandTarget arabirimi.

IOleCommandTargetAyrıca, uygulanan COleFrameHook sınıfı.COleFrameHook yerinde kare pencere işlevselliğini uygulayan belgelenmemiş bir mfc sınıf düzenleme kapları değil.COleFrameHook de uygulamak üzere mfc arabirimi eşlemeleri kullanır IOleCommandTarget arabirimi.COleFrameHook's uygulaması IOleCommandTarget ole komutları ileten COleDocObjectItem-etkin belge kapsayıcıları türetilmiş.Bu içerdiği etkin belge sunucularından gelen iletileri almak mfc etkin belge kapsayıcı sağlar.

mfc ole komutu eşlemeleri

mfc geliştiriciler olanaklarından IOleCommandTarget komutu eşlemeleri mfc ole kullanarak.ole komutu eşlemeleri, komut eşlemeyi içeren sınıf üye işlevler için ole komutları eşleştirmek için kullanılabilir olduğundan, ileti eşler gibi olan.Bu işlemi yapabilmek için makroları işlemek istediğiniz komutu, ole komutu ve komut kimliği ole komut grubu belirtmek için komut eşleme koyun wm_command ole komutu alındığında, gönderilecek ileti.mfc, standart ole komutları için de çok sayıda önceden tanımlı makrolar sağlar.Standart ole listesi için tasarlanan komutları Microsoft Office uygulamaları ile docobj.h içinde tanımlanan OLECMDID numaralandırma bakın.

ole komut bağlantıları içeren bir mfc uygulaması ole komutu alındığında, mfc uygulama ole komut haritasını istenen komut için komut kimliği ve komut grubu bulmaya çalışır.Bir eşleşme bulunursa, bir wm_command istenen komut kimliği ile komut eşlemeyi içeren uygulama iletisi gönderilir.(Bkz: açıklama ON_OLECMD aşağıda.) Bu yolla, ole komutları uygulamaya gönderilir içine açık wm_command mfc iletilerdir.wm_command iletileri daha sonra mfc standardını kullanan uygulamanın ileti haritalar yönlendirilen komut yönlendirme mimarisi.

İleti eşlemelerin, mfc ole komutu eşlemeleri ClassWizard tarafından desteklenir.mfc geliştiriciler ole komut harita desteği ve ole komutu eşleme girdileri el ile eklemeniz gerekir.ole komutu eşlemeleri mfc etkin belge sunucularına olan sınıf eklenebilir wm_command ileti yönlendirme zincirinin etkin belgeyi bir kapsayıcıdaki yerinde etkin olduğu zaman.Bu sınıflardan türetilen uygulama sınıfları dahil CWinApp, CView, CDocument, ve COleIPFrameWnd.Etkin belgeyi kaplarında ole komutu eşlemeleri yalnızca eklenebilir COleDocObjectItem-türetilmiş sınıf.Ayrıca, etkin belgeyi kapsayıcılar içinde wm_command iletileri yalnızca gönderilen ileti eşleme COleDocObjectItem-türetilmiş sınıf.

ole komutu eşleme makrolar

Sınıfınıza komutu eşleme işlevselliği eklemek için aşağıdaki makroları kullanın:

DECLARE_OLECMD_MAP ()

Bu makro komutu eşlemeyi içeren sınıf (genellikle başlık dosyasında) sınıf bildirimi gider.

BEGIN_OLECMD_MAP(theClass, baseClass)
  • theClass
    Komut eşlemeyi içeren sınıf adı.

  • baseClass
    Komut eşlemeyi içeren sınıfının temel sınıfı adı.

Bu makro komutu eşleme başlangıcını işaret eder.Bu makro komutu eşlemeyi içeren sınıf için uygulama dosyasını kullanın.

END_OLECMD_MAP()

Bu makro komutu eşleme sonunu işaretler.Bu makro komutu eşlemeyi içeren sınıf için uygulama dosyasını kullanın.Bu makro her zaman izlemeniz gereken BEGIN_OLECMD_MAP makro.

ON_OLECMD(pguid, olecmdid, id)
  • pguid
    ole komutunun komut grubu GUID'si için işaretçi.Bu parametre null standart ole komut grubu.

  • olecmdid
    ole çağırılacak komut komut kimliği.

  • id
    Kimliği wm_command bu ole komutu çalıştırıldığında, komut eşlemeyi içeren uygulama gönderilecek ileti.

Use ON_OLECMD ole için girişleri eklemek için komut eşlemesindeki makro komutları işlemek istediğiniz.ole komutları alındığında bunlar dönüştürülür belirtilen wm_command ileti ve komut yönlendirme standart mfc mimarisi kullanarak uygulamanın ileti eşleme yönlendirilir.

Örnek

Aşağıdaki örnek ole komut işleme yeteneği işlemek için bir mfc etkin belge sunucuya eklemek gösterilmiştir OLECMDID_PRINT ole komutu.Bu örnek, bir etkin belge sunucusu bir mfc uygulaması oluşturmak için AppWizard kullanılan varsayar.

  1. İçinde CView-sınıfının üstbilgi türetilen dosya, ekleme DECLARE_OLECMD_MAP sınıf bildirimi makro.

    [!NOT]

    Use CView-türetilmiş sınıf içinde etkin belgenin sunucusu sınıflarında olduğu için wm_command zincir ileti yönlendirme.

    class CMyServerView : public CView
    {
    protected: // create from serialization only
       CMyServerView();
       DECLARE_DYNCREATE(CMyServerView)
       DECLARE_OLECMD_MAP()
    . . .
    };
    
  2. Uygulama dosyasında CView-türetilmiş sınıf, ekleme BEGIN_OLECMD_MAP ve END_OLECMD_MAP makroları:

    BEGIN_OLECMD_MAP(CMyServerView, CView)
    
    END_OLECMD_MAP()
    
  3. Standart ole yazdırma komutu işlemeye eklemek bir on_olecmd standart yazdırma komutu için ole komut kimliği belirtme komut eşleme makro ve ID_FILE_PRINT için wm_command kimliğiID_FILE_PRINT AppWizard üretilen mfc uygulamaları tarafından kullanılan yazdırma komutu kimliği standart:

    BEGIN_OLECMD_MAP(CMyServerView, CView)
       ON_OLECMD(NULL,OLECMDID_PRINT,ID_FILE_PRINT)
    END_OLECMD_MAP()
    

Afxdocob.h içinde tanımlanan standart ole komut makroları birini yerine kullanılabileceği Not ON_OLECMD makro çünkü OLECMDID_PRINT standart ole komut kimliğidir.ON_OLECMD_PRINT Makro olarak aynı görevi gerçekleştirmek ON_OLECMD yukarıda gösterilen makro.

Bir konteyner uygulaması bu sunucuya gönderir, bir OLECMDID_PRINT sunucu üzerinden komut IOleCommandTarget arabirimi, komut işleyicisi yazdırma mfc uygulamanın yazdırma sunucusunun neden Server'da çağrılan.Yukarıdaki adımları eklenen yazdırma komutunu çağırmak için etkin belgeyi konteynerin kod şöyle görünür:

void CContainerCntrItem::DoOleCmd()
{
   IOleCommandTarget *pCmd = NULL;
   HRESULT hr = E_FAIL;
   OLECMD ocm={OLECMDID_PRINT, 0};

   hr = m_lpObject->QueryInterface(IID_IOleCommandTarget,reinterpret_cast<void**>(&pCmd));
   if(FAILED(hr))
      return;

   hr = pCmd->QueryStatus(NULL, 1, &ocm, NULL);
   if(SUCCEEDED(hr) && (ocm.cmdf & OLECMDF_ENABLED))
   {
      //Command is available and enabled so call it
      COleVariant vIn;
      COleVariant vOut;
      hr = pCmd->Exec(NULL, OLECMDID_PRINT,
 OLECMDEXECOPT_DODEFAULT, &vIn, &vOut);
      ASSERT(SUCCEEDED(hr));
   }
   pCmd->Release();
}

Ayrıca bkz.

Diğer Kaynaklar

Teknik notlar numarasına göre

Kategoriye göre teknik notlar