Bagikan melalui


Kelas COleMessageFilter

Mengelola konkurensi yang diperlukan oleh interaksi aplikasi OLE.

Sintaks

class COleMessageFilter : public CCmdTarget

Anggota

Konstruktor Publik

Nama Deskripsi
COleMessageFilter::COleMessageFilter Membuat COleMessageFilter objek.

Metode Publik

Nama Deskripsi
COleMessageFilter::BeginBusyState Menempatkan aplikasi dalam status sibuk.
COleMessageFilter::EnableBusyDialog Mengaktifkan dan menonaktifkan kotak dialog yang muncul saat aplikasi yang disebut sibuk.
COleMessageFilter::EnableNotRespondingDialog Mengaktifkan dan menonaktifkan kotak dialog yang muncul saat aplikasi yang disebut tidak merespons.
COleMessageFilter::EndBusyState Mengakhiri status sibuk aplikasi.
COleMessageFilter::OnMessagePending Dipanggil oleh kerangka kerja untuk memproses pesan saat panggilan OLE sedang berlangsung.
COleMessageFilter::Register Mendaftarkan filter pesan dengan DLL sistem OLE.
COleMessageFilter::Cabut Mencabut pendaftaran filter pesan dengan DLL sistem OLE.
COleMessageFilter::SetBusyReply Menentukan balasan aplikasi yang sibuk ke panggilan OLE.
COleMessageFilter::SetMessagePendingDelay Menentukan berapa lama aplikasi menunggu respons terhadap panggilan OLE.
COleMessageFilter::SetRetryReply Menentukan balasan aplikasi panggilan ke aplikasi yang sibuk.

Keterangan

Kelas COleMessageFilter ini berguna dalam aplikasi server pengeditan visual dan kontainer, serta aplikasi otomatisasi OLE. Untuk aplikasi server yang sedang dipanggil, kelas ini dapat digunakan untuk membuat aplikasi "sibuk" sehingga panggilan masuk dari aplikasi kontainer lain dibatalkan atau dicoba kembali nanti. Kelas ini juga dapat digunakan untuk menentukan tindakan yang akan diambil oleh aplikasi panggilan ketika aplikasi yang disebut sibuk.

Penggunaan umum adalah untuk aplikasi server untuk memanggil BeginBusyState dan EndBusyState ketika akan berbahaya bagi dokumen atau objek lain yang dapat diakses OLE untuk dihancurkan. Panggilan ini dilakukan di CWinApp::OnIdle selama pembaruan antarmuka pengguna.

Secara default, COleMessageFilter objek dialokasikan saat aplikasi diinisialisasi. Ini dapat diambil dengan AfxOleGetMessageFilter.

Ini adalah kelas lanjutan; Anda jarang perlu bekerja dengannya secara langsung.

Untuk informasi selengkapnya, lihat artikel Server: Menerapkan Server.

Hierarki Warisan

CObject

CCmdTarget

COleMessageFilter

Persyaratan

Header: afxole.h

COleMessageFilter::BeginBusyState

Panggil fungsi ini untuk memulai status sibuk.

virtual void BeginBusyState();

Keterangan

Ini bekerja bersama dengan EndBusyState untuk mengontrol status sibuk aplikasi. Fungsi SetBusyReply menentukan balasan aplikasi untuk memanggil aplikasi saat sibuk.

Dan BeginBusyState EndBusyState memanggil kenaikan dan penurunan, masing-masing, penghitung yang menentukan apakah aplikasi sibuk. Misalnya, dua panggilan ke BeginBusyState dan satu panggilan ke EndBusyState masih mengakibatkan status sibuk. Untuk membatalkan status sibuk, perlu untuk memanggil EndBusyState frekuensi BeginBusyState yang sama telah dipanggil.

Secara default, kerangka kerja memasuki status sibuk selama pemrosesan diam, yang dilakukan oleh CWinApp::OnIdle. Saat aplikasi menangani pemberitahuan ON_COMMANDUPDATEUI, panggilan masuk ditangani nanti, setelah pemrosesan diam selesai.

COleMessageFilter::COleMessageFilter

COleMessageFilter Membuat objek.

COleMessageFilter();

COleMessageFilter::EnableBusyDialog

Mengaktifkan dan menonaktifkan kotak dialog sibuk, yang ditampilkan saat penundaan pesan tertunda kedaluwarsa (lihat SetRetryReply) selama panggilan OLE.

void EnableBusyDialog(BOOL bEnableBusy = TRUE);

Parameter

bEnableBusy
Menentukan apakah kotak dialog "sibuk" diaktifkan atau dinonaktifkan.

COleMessageFilter::EnableNotRespondingDialog

Mengaktifkan dan menonaktifkan kotak dialog "tidak merespons", yang ditampilkan jika papan ketik atau pesan mouse tertunda selama panggilan OLE dan waktu panggilan habis.

void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);

Parameter

bEnableNotResponding
Menentukan apakah kotak dialog "tidak merespons" diaktifkan atau dinonaktifkan.

COleMessageFilter::EndBusyState

Panggil fungsi ini untuk mengakhiri status sibuk.

virtual void EndBusyState();

Keterangan

Ini bekerja bersama dengan BeginBusyState untuk mengontrol status sibuk aplikasi. Fungsi SetBusyReply menentukan balasan aplikasi untuk memanggil aplikasi saat sibuk.

Dan BeginBusyState EndBusyState memanggil kenaikan dan penurunan, masing-masing, penghitung yang menentukan apakah aplikasi sibuk. Misalnya, dua panggilan ke BeginBusyState dan satu panggilan ke EndBusyState masih mengakibatkan status sibuk. Untuk membatalkan status sibuk, perlu untuk memanggil EndBusyState frekuensi BeginBusyState yang sama telah dipanggil.

Secara default, kerangka kerja memasuki status sibuk selama pemrosesan diam, yang dilakukan oleh CWinApp::OnIdle. Saat aplikasi menangani pemberitahuan ON_UPDATE_COMMAND_UI, panggilan masuk ditangani setelah pemrosesan diam selesai.

COleMessageFilter::OnMessagePending

Dipanggil oleh kerangka kerja untuk memproses pesan saat panggilan OLE sedang berlangsung.

virtual BOOL OnMessagePending(const MSG* pMsg);

Parameter

pMsg
Penunjuk ke pesan yang tertunda.

Tampilkan Nilai

Nonzero pada kesuksesan; jika tidak, 0.

Keterangan

Saat aplikasi panggilan menunggu panggilan selesai, kerangka kerja memanggil OnMessagePending dengan penunjuk ke pesan yang tertunda. Secara default, kerangka kerja mengirimkan pesan WM_PAINT, sehingga pembaruan jendela dapat terjadi selama panggilan yang memakan waktu lama.

Anda harus mendaftarkan filter pesan Anda melalui panggilan ke Daftar sebelum dapat menjadi aktif.

COleMessageFilter::Register

Mendaftarkan filter pesan dengan DLL sistem OLE.

BOOL Register();

Tampilkan Nilai

Nonzero pada kesuksesan; jika tidak, 0.

Keterangan

Filter pesan tidak berpengaruh kecuali terdaftar di DLL sistem. Biasanya kode inisialisasi aplikasi Anda mendaftarkan filter pesan aplikasi. Filter pesan lain yang didaftarkan oleh aplikasi Anda harus dicabut sebelum program dihentikan dengan panggilan ke Cabut.

Filter pesan default kerangka kerja secara otomatis didaftarkan selama inisialisasi dan dicabut saat penghentian.

COleMessageFilter::Cabut

Mencabut pendaftaran sebelumnya yang dilakukan oleh panggilan ke Daftar.

void Revoke();

Keterangan

Filter pesan harus dicabut sebelum program berakhir.

Filter pesan default, yang dibuat dan didaftarkan secara otomatis oleh kerangka kerja, juga dicabut secara otomatis.

COleMessageFilter::SetBusyReply

Fungsi ini mengatur "balasan sibuk" aplikasi.

void SetBusyReply(SERVERCALL nBusyReply);

Parameter

nBusyReply
Nilai dari SERVERCALL enumerasi, yang didefinisikan dalam COMPOBJ.H. Ini dapat memiliki salah satu nilai berikut:

  • SERVERCALL_ISHANDLED Aplikasi dapat menerima panggilan tetapi mungkin gagal dalam memproses panggilan tertentu.

  • SERVERCALL_REJECTED Aplikasi mungkin tidak akan pernah dapat memproses panggilan.

  • SERVERCALL_RETRYLATER Aplikasi sementara dalam keadaan di mana aplikasi tidak dapat memproses panggilan.

Keterangan

Fungsi BeginBusyState dan EndBusyState mengontrol status sibuk aplikasi.

Ketika aplikasi telah dibuat sibuk dengan panggilan ke BeginBusyState, aplikasi merespons panggilan dari DLL sistem OLE dengan nilai yang ditentukan oleh pengaturan terakhir .SetBusyReply Aplikasi panggilan menggunakan balasan sibuk ini untuk menentukan tindakan apa yang harus diambil.

Secara default, balasan sibuk SERVERCALL_RETRYLATER. Balasan ini menyebabkan aplikasi panggilan mencoba kembali panggilan sesegera mungkin.

COleMessageFilter::SetMessagePendingDelay

Menentukan berapa lama aplikasi panggilan menunggu respons dari aplikasi yang disebut sebelum mengambil tindakan lebih lanjut.

void SetMessagePendingDelay(DWORD nTimeout = 5000);

Parameter

nTimeout
Jumlah milidetik untuk penundaan pesan yang tertunda.

Keterangan

Fungsi ini berfungsi dalam konser dengan SetRetryReply.

COleMessageFilter::SetRetryReply

Menentukan tindakan aplikasi panggilan saat menerima respons sibuk dari aplikasi yang disebut.

void SetRetryReply(DWORD nRetryReply = 0);

Parameter

nRetryReply
Jumlah milidetik antara percobaan ulang.

Keterangan

Ketika aplikasi yang dipanggil menunjukkan bahwa aplikasi sibuk, aplikasi panggilan dapat memutuskan untuk menunggu sampai server tidak lagi sibuk, untuk segera mencoba kembali, atau mencoba kembali setelah interval yang ditentukan. Ini juga dapat memutuskan untuk membatalkan panggilan sama sekali.

Respons penelepon dikontrol oleh fungsi SetRetryReply dan SetMessagePendingDelay. SetRetryReply menentukan berapa lama aplikasi panggilan harus menunggu antara percobaan kembali untuk panggilan tertentu. SetMessagePendingDelay menentukan berapa lama aplikasi panggilan menunggu respons dari server sebelum mengambil tindakan lebih lanjut.

Biasanya default dapat diterima dan tidak perlu diubah. Kerangka kerja mencoba kembali panggilan setiap milidetik nRetryReply sampai panggilan dilalui atau penundaan pesan yang tertunda telah kedaluwarsa. Nilai 0 untuk nRetryReply menentukan coba lagi segera, dan - 1 menentukan pembatalan panggilan.

Ketika penundaan pesan tertunda telah kedaluwarsa, "kotak dialog sibuk" OLE (lihat COleBusyDialog) ditampilkan sehingga pengguna dapat memilih untuk membatalkan atau mencoba kembali panggilan. Panggil EnableBusyDialog untuk mengaktifkan atau menonaktifkan kotak dialog ini.

Ketika keyboard atau pesan mouse tertunda selama panggilan dan panggilan telah kehabisan waktu (melebihi penundaan pesan yang tertunda), kotak dialog "tidak merespons" ditampilkan. Panggil EnableNotRespondingDialog untuk mengaktifkan atau menonaktifkan kotak dialog ini. Biasanya keadaan urusan ini menunjukkan bahwa ada sesuatu yang salah dan pengguna semakin tidak sabar.

Ketika dialog dinonaktifkan, "balasan coba lagi" saat ini selalu digunakan untuk panggilan ke aplikasi yang sibuk.

Lihat juga

Kelas CCmdTarget
Bagan Hierarki
Kelas CCmdTarget