Makale numarası: 309309 - Son Gözden Geçirme: 23 Ağustos 2005 Salı - Gözden geçirme: 4.3
<a1>Tanıtıcı</a1> PowerPoint 2000 olayları veya Visual C++ .NET 2002 veya Visual C++ .NET 2003 ve Microsoft Foundation Classes (ingilizce)'ni kullanarak PowerPoint 2002 olayları
Not Microsoft Visual C++ .NET (2002), Microsoft .NET Framework tarafından sağlanan bir yönetilen kod model hem de yerel Microsoft Windows kod modeli yönetilmeyen destekler. Bu makaledeki bilgiler yalnızca yönetilmeyen Visual C++ kod uygulanır.
Bu makalede, Microsoft Visual C++ .NET 2002 veya Visual C++ .NET 2003 ve Microsoft Foundation Classes (ingilizce)'nı kullanarak, Microsoft PowerPoint 2000 olayları veya PowerPoint 2002 olayları işlemek açıklamaktadır.
PowerPoint, olayları, kullanıcı eylemlerine yanıt veya yanıt olarak, otomasyon olarak adlandırılan bazı yöntemler tetikler. Uygulama nesnesini PowerPoint nesne modelindeki bu olaylar, giden arabiriminde EApplication tetikler.
Bu arabirimin ve yöntemlerini görüntülemek için <a0></a0>, OLE/COM nesnesi Görüntüleyici, aşağıdaki gibi kullanabilirsiniz:
Tür kitaplıkları için düğümü genişletin ve Microsoft PowerPoint nesne kitaplığı listeden seçin.
Nesne menüsünde Görünüm kitaplığı ıtypelib görüntüleyicide açmak için seçin.
Uygulama coclass düğümünü genişletin ve EApplication seçin.
EApplicationıdispatch türevi ve yaygın olarak kullanılan bir kaynak arabirimi olarak görüntüleme arabirimi olmadığını unutmayın. Kaynak olan arabirim, bir görüntüleme arabirimi ise, yöntemlerinden için gönderme tanımlayıcılarının (DISPIDs) OLE/COM nesnesi görüntüleyiciyi kullanarak belirleyebilirsiniz. Ancak, bir görüntüleme arabirimi EApplication olmadığından, tür kitaplığı incelenerek PowerPoint olayları DISPIDs belirleyemiyor.
Aşağıdaki tabloda DISPIDs, PowerPoint 2000 ve PowerPoint 2002 nesne modeli olayları listeler:
Uygulamanız için bu olay, ıunknown arabirimiyle IConnectionPointContainer::FindConnectionPoint istenen olay arabirimi için bağlantı noktası bulunamadı ve ıconnectionpoint::Advise çağırarak C++ uygulamanızda bir PowerPoint olay batar.
PowerPoint olayları işlemek için bir C++ uygulaması oluşturma
Visual C++ .NET ile Microsoft Foundation Classes (MFC) uygulaması Sihirbazı'nı kullanarak yeni bir iletişim kutusu-tabanlı uygulama oluşturun. PPTEventsDemo proje adını ve sonra varsayılan ayarları kabul edin. Iletişim kutusu, varsayılan olarak, karşılık gelen Ppteventsdemodlg.cpp ve Ppteventsdemodlg.h dosyalar ile birlikte oluşturulur.
Iletişim kutunuz için üç düğme ekleme ve bu düğmeleri PowerPoint Başlat, ağımdaki bağlantı noktası kaydı havuzu ve kaydı havuzu ve Yapılacaklar Temizle, sırasıyla adlandırın. Bir liste kutusu iletişim kutusuna ekleyin. Liste kutusunu oluştuğunda olayları adlarını görüntüler.
Sınıf görünümündeki Project explorer penceresinde, PPTEventsDemo sağ tıklatın, sonra da Ekle işaret ve Add Class</a1>'ı tıklatın. Add Class iletişim kutusuna TypeLibrary MFC sınıfından seçin ve Aç ' ı tıklatın. Bu tür kitaplığı sihirbazından add class başlatır.
Microsoft PowerPoint 10.0 Nesne Kitaplığı (PowerPoint 2002'de) veya Microsoft PowerPoint 9.0 Nesne Kitaplığı (PowerPoint 2000'de) Kullanılabilir TypeLibraries</a1> a?a?? aç?lan listeden seçin. Arabirimleri liste kutusu, tüm arabirimler tür kitaplığı gösterir görüntüler. _Application seçin ve sonra >'ı tıklatın. düğmesi. Varsayılanları kabul edin ve sonra da <a2>son</a2>'u tıklatın. Bu, COleDispatchDriver türetildiği CApplication sarmalayıcı sınıf oluşturur. Uygulama ve bu sınıfın tanımını kullanılabilir capplication.h dosyasında.
Visual Studio. NET'te PPTEventsDemo iletişim kutusunu göstermek için Görünüm menüsünden Kaynak görünümü ' ni tıklatın. Kod görünümü) penceresinde, için bu düğmeyi tıklatarak olay için bir boş bir olay işleyicisi eklenen bir Ppteventsdemodlg.cpp göstermek için PowerPoint Başlat ' ı çift tıklatın. PowerPoint Başlat düğmesinin işleyicisine aşağıdaki kodu ekleyin:
Register havuzu <a0>Ağımdaki bir bağlantı noktası ve</a0> düğmesinin işleyicisine aşağıdaki kodu ekleyin:
///*********************** Start of code to get connection point **************
// Declare the events that you want to catch.
//
// Look for the coclass for Application in the Msppt9.olb typelib,
// then look for the word "source." The EApplication interface
// is the next search target. When you find it, you will see the
// following GUID for the event interface.
// 914934C2-5A91-11CF-8700-00AA0060263B
static const GUID IID_IEApplication =
{0x914934C2,0x5A91,0x11CF, {0x87,0x00,0x00,0xAA,0x00,0x60,0x26,0x3b}};
// Steps for setting up events.
// 1. Get the IConnectionPointContainer interface of the server.
// 2. Call IConnectionPointContainer::FindConnectionPoint()
// to find the event that you want to catch.
// 3. Call IConnectionPoint::Advise() with the IUnknown
// interface of your implementation of the events.
HRESULT hr;
// Get the (PPT) IConnectionPointContainer interface of the server.
IConnectionPointContainer *pConnPtContainer;
hr = pptapp.m_lpDispatch->QueryInterface(
IID_IConnectionPointContainer,
(void **)&pConnPtContainer
);
if(FAILED(hr)) AfxMessageBox("Couldn't get IConnectionPointContainer interface.");
ASSERT(!FAILED(hr));
// Find a connection point for the events that you are interested in.
hr = pConnPtContainer->FindConnectionPoint(
IID_IEApplication,
&m_pConnectionPoint
);
if(FAILED(hr)) AfxMessageBox("Couldn't find connection point via event GUID.");
ASSERT(!FAILED(hr));
//Instantiate the sink object.
m_sink = new CMyPPTEventsHandler();
//Update the list box when you obtain the events in the event handler.
m_sink->m_pListBox = m_listBox;
// Get the IUnknown interface of your event implementation.
LPUNKNOWN pUnk = NULL;
pUnk = m_sink->GetInterface(&IID_IUnknown);
ASSERT(pUnk);
// Setup advisory connection.
hr = m_pConnectionPoint->Advise(pUnk, &m_sink->cookie);
ASSERT(!FAILED(hr));
// Release the IConnectionPointContainer interface.
pConnPtContainer->Release();
// *********************** End of code to get connection point ******************
UnRegister havuzu ve Yapılacaklar Temizle düğmesi için bir işleyici için aşağıdaki kodu ekleyin:
//Use the cookie to unregister the sink.
m_pConnectionPoint->Unadvise(m_sink->cookie);
m_pConnectionPoint->Release();
//Detach the application object from the server.
pptapp.DetachDispatch();
Kurucu CPPTEventsDemoDlg sınıfında, aşağıdaki kodu ekleyin:
m_pConnectionPoint = NULL;
pptapp = NULL;
CPPTEventsDemoDlg::OnInitDialog döndürmeden önce aşağıdaki kod satırını ekleyin:
//Get the MFC class pointer for the list box on the dialog box.
m_listBox = (CListBox*) GetDlgItem(IDC_LIST1);
# Include a?a??daki Ppteventsdemodlg.cpp dosyanın başlangıcına yerleştirin emin olun:
Project Explorer görünümlerinde sınıfı, PPTEventsDemo sağ tıklatın, sonra da Ekle işaret ve Add Class</a1>'ı tıklatın. AddClass iletişim kutusundaki Şablonlar altında MFC sınıfı seçin ve Aç ' ı tıklatın. Sınıf adı, türü CMyPPTEventsHandlerCCmdTarget için bir temel sınıf seçin ve Automation ' ı seçin. Diğer alanlar için varsayılan değerleri kabul edin. Son ' u tıklatın. Bu, CCmdTarget ' türetilen bir yeni CMyPPTEventsHandler MFC sınıfı oluşturur. Bu sınıf, Myppteventshandler.h dosyasında tanımlanan ve Myppteventshandler.cpp uygulanır. PowerPoint olaylarına yanıt olarak adlandırılan yöntemlerini içeren Olay işleyici sınıf budur.
Bu yeni bir ın Myppteventshandler.h dosyası oluşturur ileri aşağıdaki sınıfı bildirin:
class CPresentation;
Bu yeni bir ın Myppteventshandler.h dosyası oluşturur CMyPPTEventsHandler sınıfında ortak olan bildirimleri için aşağıdaki üyelere ekleyin:
DWORD cookie;
CListBox* m_pListBox;
Bu bir yeni Ekle korumalı bildirimleri için aşağıdaki yöntemleri, CMyPPTEventsHandler sınıfında oluşturur:
bu arabirimin EApplication giden olay sınıfı PowerPoint uygulaması için GUID değeridir. Ayrıca, bu sınıf için gönderme eşleme DISPIDs olayların olay işleyicisinin yöntemlerini eşleştiren unutmayın.
Bu yeni bir ın Ppteventsdemo.cpp dosyası oluşturur, a?a??daki # include ifadeyi
#include "CApplication.h"
önce aşağıdaki:
#include "PPTEventsDemoDlg.h"
Bu bir yeni Ekle aşağıdaki kod satırlarını, InitInstance yöntemi Ppteventsdemoapp.cpp dosyasının en üstünde oluşturur:
if(!AfxOleInit())
{
AfxMessageBox("Unable to initialize COM");
return FALSE;
}
Oluşturmak ve bu programı çalıştırmak için F5 tuşuna basın. Iletişim kutusu görüntülenir.
PowerPoint Başlat ' ı tıklatın. PowerPoint başlatır ve görünür duruma gelir.
Olay havuzlarını için kaydı havuzu <a0>Ağımdaki bir bağlantı noktası ve</a0>'ı tıklatın.
Yeni sunuyu PowerPoint'te oluşturun. WindowActivate, NewPresentation, PresentationNewSlide, SlideSelectionChange ve WindowSelectionChange olaylarını harekete.
Slayt gösterisini başlatma ve sona oynamak. SlideShowBeginSlideShowNextSlide ve SlideShowEnd olaylarını harekete.
Sunuyu kaydedin. PresentationBeforeSave ve PresentationSave olaylarını harekete.
Sunuyu kapatın. PresentationClose olayını harekete geçirilir ve PowerPoint 2002 tarafından tetiklendi ve program tarafından işlenen olaylar liste kutusunda görünür.
Not: Bunlar, PowerPoint 2002 harekete olaylardır. Bazı PowerPoint 2000'de bu olayların göremeyebilirsiniz.
Olay havuzlarını bağlantısını kesmek için kaydı havuzu ve Yapılacaklar Temizle'yi tıklatın.
Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
254009
(http://support.microsoft.com/kb/254009/EN-US/
)
BILGI: PowerPoint 2000 olay tanıtım yükleme için kullanılabilir
308336
(http://support.microsoft.com/kb/308336/EN-US/
)
Nasıl YAPıLıR: Oluşturma ve Visual C++ .NET ve MFC bir PowerPoint sunusuna Göster Otomasyon kullan.
Office Otomasyonu hakkında daha fazla bilgi için aşağıdaki Microsoft Office geliştirme destek sitesine bakın:
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:309309
(http://support.microsoft.com/kb/309309/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.