Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Artikel ini menunjukkan bagaimana untuk menangkap Microsoft Word 97
peristiwa aplikasi yang menggunakan Microsoft Visual C++. Namun, konsep dan kode
dalam artikel ini tidak spesifik untuk Microsoft Word; mereka dikenakan untuk
seluruh paket Microsoft Office aplikasi, serta yang lain
aplikasi yang mengekspos peristiwa.
Langkah-langkah berikut menggambarkan cara membuat MFC
aplikasi yang menangkap peristiwa Microsoft Word 97 aplikasi Startup(),
DocumentChange(), dan Quit():
Membuat baru dialog kotak berbasis aplikasi menggunakan MFC
AppWizard. Nama proyek Anda WordEvents, dan menerima pengaturan default.
Menambahkan dua tombol ke kotak dialog dan nama tombol
"Mulai dan Setup" dan "Berhenti dan Clean Up," masing-masing.
Tambahkan kode berikut ke handler untuk "mulai dan
Setup"tombol:
// Check to see if you've already started the server.
if(m_app.m_lpDispatch != NULL) {
AfxMessageBox("Server already started.");
return;
}
char buf[256]; // General purpose buffer.
// Start Automation server.
COleException e;
if(!m_app.CreateDispatch("Word.Application.8", &e)) {
sprintf(buf, "Error on CreateDispatch(): %ld (%08lx)",
e.m_sc, e.m_sc);
AfxMessageBox(buf, MB_SETFOREGROUND);
return;
}
// Make server visible through automation.
// I.e.: Application.Visible = TRUE
DISPID dispID;
unsigned short *ucPtr;
BYTE *parmStr;
ucPtr = L"visible";
m_app.m_lpDispatch->GetIDsOfNames(
IID_NULL, &ucPtr, 1, LOCALE_USER_DEFAULT, &dispID
);
parmStr = (BYTE *)( VTS_VARIANT );
m_app.InvokeHelper(
dispID, DISPATCH_METHOD | DISPATCH_PROPERTYPUT, VT_EMPTY,
NULL, parmStr, &COleVariant((short)TRUE)
);
// Declare the events you want to catch.
// {000209F7-0000-0000-C000-000000000046}
static const GUID IID_IWord8AppEvents =
{0x000209f7,0x000,0x0000,{0xc0,0x00,0x0,0x00,0x00,0x00,0x00,0x46 } };
// Steps for setting up events.
// 1. Get server's IConnectionPointContainer interface.
// 2. Call IConnectionPointContainerFindConnectionPoint()
// to find the event you want to catch.
// 3. Call IConnectionPoint::Advise() with the IUnknown
// interface of your implementation of the events.
HRESULT hr;
// Get server's IConnectionPointContainer interface.
IConnectionPointContainer *pConnPtContainer;
hr = m_app.m_lpDispatch->QueryInterface(
IID_IConnectionPointContainer,
(void **)&pConnPtContainer
);
ASSERT(!FAILED(hr));
// Find connection point for events you're interested in.
hr = pConnPtContainer->FindConnectionPoint(
IID_IWord8AppEvents,
&m_pConnectionPoint
);
ASSERT(!FAILED(hr));
// Get the IUnknown interface of your event implementation.
LPUNKNOWN pUnk = m_myEventSink.GetInterface(&IID_IUnknown);
ASSERT(pUnk);
// Setup advisory connection!
hr = m_pConnectionPoint->Advise(pUnk, &m_adviseCookie);
ASSERT(!FAILED(hr));
// Release IConnectionPointContainer interface.
pConnPtContainer->Release();
Tambahkan kode berikut ke handler untuk "berhenti dan bersih
"Up tombol:
// Check if you've started the server.
if(m_app.m_lpDispatch == NULL) {
AfxMessageBox("You haven't started the server yet.");
return;
}
m_pConnectionPoint->Unadvise(m_adviseCookie);
// Tell server to quit.
// Application.Quit()
DISPID dispID; // Temporary DISPID
unsigned short *ucPtr; // Temporary name holder
ucPtr = L"quit";
m_app.m_lpDispatch->GetIDsOfNames(
IID_NULL, &ucPtr, 1, LOCALE_USER_DEFAULT, &dispID
);
m_app.InvokeHelper(dispID, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
// Release application object.
m_app.ReleaseDispatch();
Mulai ClassWizard MFC (CTRL + W), dan menambahkan class baru
berasal dari CCmdTarget dan dengan dukungan otomatisasi (periksa "Otomatisasi"
pilihan). Nama kelas ini MyEventSink; akan kami pelaksanaan
Microsoft Word aplikasi peristiwa.
Dalam MFC ClassWizard, klik tab otomatisasi dan menambahkan
metode ini tiga dalam rangka:
void Startup()
void Quit()
void DocumentChange()
Dalam MyEventSink.cpp, menerapkan metode baru ini untuk menampilkan
kotak pesan ketika mereka dipanggil untuk memberitahu Anda ketika mereka dipicu:
Buka MyEventSink.cpp file dan menemukan Deklarasi
IID_IMyEventSink. ClassWizard dihasilkan GUID acak baru untuk Anda
antarmuka, tetapi karena Anda menerapkan tertentu antarmuka yang sudah
telah GUID, Anda perlu mengubah Anda untuk mencocokkan. Memodifikasi Deklarasi
IID_IMyEventSink sebagai berikut: statis const GUID IID_IMyEventSink =
{0x000209f7, 0x000, 0x0000, {0xc0, 0x00, 0x0, 0x00, 0x00 0x00, 0x00, 0x46}};
Menambahkan variabel anggota publik berikut untuk Anda
WordEventsDlg kelas di WordEventsDlg.h:
Bergerak bahwa Deklarasi di atas kata "Protected" sehingga
baris kode muncul sebagai berikut:
virtual ~MyEventSink();
// Implementation
protected:
// virtual ~MyEventSink(); // Or this line may be removed.
Akhirnya, pastikan perpustakaan OLE/COM mendapatkan kesempatan untuk
menginisialisasi. Tambahkan tepat kode berikut sebelum Anda tombol "Mulai dan Setup"
Handler. Ini menciptakan kelas global yang akan dibuat pada aplikasi saat startup,
dan hancur di keluar. Konstruktor dan destructor kelas ini menyediakan
cara mudah untuk melakukan inisialisasi dan pembersihan:
// Ole-initialization class.
class OleInitClass {
public:
OleInitClass() {
OleInitialize(NULL);
}
~OleInitClass() {
OleUninitialize();
}
};
// This global class calls OleInitialize() at
// application startup, and calls OleUninitialize()
// at application exit.
OleInitClass g_OleInitClass;
Mengkompilasi dan menjalankan.
Setelah menjalankan aplikasi, klik "Awal dan Setup"tombol untuk memulai Microsoft Word dan mengatur acara pemberitahuan.
Di Microsoft Word, pada Berkas menu, klik Baru untuk membuat dokumen baru. Acara DocumentChange() Anda harus mendapatkan
dipecat. Buka dokumen lain, dan melihat bahwa itu juga dipecat ketika Anda
beralih aktivasi dari dokumen satu sama lain. Anda dapat klik "Berhenti dan membersihkan"tombol untuk menghentikan acara pemberitahuan dan keluar dari Microsoft Word,
atau Anda dapat keluar dari Microsoft Word (pada Berkas menu, klik Keluar) dan melihat pemberitahuan keluar.
Anda mungkin melihat
bahwa acara Startup pernah dipicu. Hal ini karena itu dipecat sebelum Anda
mengatur peristiwa. Perhatikan bahwa benar-benar tidak ada alasan untuk menangani acara ini,
karena aplikasi ini harus dimulai sebelum Anda bisa menelepon dan mengatur
Otomatisasi metode dan properti.
Microsoft Excel mendukung banyak
peristiwa-peristiwa yang menarik dan bermanfaat, dan Anda dapat mengikuti langkah-langkah berikut untuk menangkap
mereka. Namun, ada beberapa poin untuk diingat:
Menggunakan objek OLE/COM penampil yang datang dengan Microsoft
Visual C++ 5.0 untuk melihat perpustakaan jenis server Anda tertarik. Pada
menemukan peristiwa, membuka Deklarasi coclass (biasanya di bagian bawah
pohon); peristiwa terkait untuk setiap coclass akan tercantum. Ketika Anda mengklik
acara antarmuka Anda dapat melihat apa peristiwa tersedia, mereka DISPIDs, dan bagaimana
mereka dinyatakan dalam pandangan di sebelah kanan.
Itu tidak perlu untuk mengubah DISPIDs metode kami
di MyEventSink kami kelas karena Microsoft Word aplikasi peristiwa,
Startup(), Quit(), dan DocumentChange() memiliki DISPIDs 1, 2 dan 3, masing-masing.
Jika Anda membuat metode ini agar, Anda tidak perlu mengubahnya sesuai
Perpustakaan jenis karena ClassWizard dimulai pada DISPID 1. Namun, kebanyakan peristiwa,
seperti Microsoft Excel Workbook peristiwa, tidak mulai dengan DISPID 1. Sedemikian
kasus, Anda harus secara eksplisit mengubah peta pengiriman di MyEventSink.cpp untuk mencocokkan
DISPIDs dengan metode yang benar.
Untuk informasi lebih lanjut tentang menciptakan wastafel antarmuka, dan
menyederhanakan proses sambungan, klik nomor artikel di bawah ini untuk melihat
itu di dalam Basis Pengetahuan Microsoft:
181845
(http://support.microsoft.com/kb/181845/
)
HOWTO: Membuat antarmuka tenggelam di klien COM berbasis MFC
Untuk contoh umum, dan informasi lebih lanjut tentang sambungan
poin, lihat contoh Connpts.exe yang dijelaskan dalam artikel berikut di
Basis Pengetahuan Microsoft:
152087
(http://support.microsoft.com/kb/152087/
)
Connpts.exe alat-alat sambungan poin dalam MFC Apps
Note This is a "FAST PUBLISH" article created directly from within the Microsoft support organization. The information contained herein is provided as-is in response to emerging issues. As a result of the speed in making it available, the materials may include typographical errors and may be revised at any time without notice. See Terms of Use
(http://go.microsoft.com/fwlink/?LinkId=151500)
for other considerations.
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:183599
(http://support.microsoft.com/kb/183599/en-us/
)
Seberapa besar upaya Anda untuk menggunakan artikel ini?
Sangat sedikit
Sedikit
Sedang
Besar
Sangat besar
Berikan saran tentang apa yang dapat kami lakukan untuk menyempurnakan informasi ini
Terima kasih! Masukan Anda akan digunakan untuk membantu kami meningkatkan konten dukungan. Untuk opsi bantuan lainnya, kunjungi Halaman Beranda Bantuan dan Dukungan.