Aracılığıyla paylaş


COleMessageFilter Sınıfı

OLE uygulamalarının etkileşimi için gereken eşzamanlılığı yönetir.

Sözdizimi

class COleMessageFilter : public CCmdTarget

Üyeler

Ortak Oluşturucular

Ad Tanım
COleMessageFilter::COleMessageFilter Bir COleMessageFilter nesne oluşturur.

Genel Yöntemler

Ad Tanım
COleMessageFilter::BeginBusyState Uygulamayı meşgul durumuna getirir.
COleMessageFilter::EnableBusyDialog Çağrılan bir uygulama meşgul olduğunda görüntülenen iletişim kutusunu etkinleştirir ve devre dışı bırakır.
COleMessageFilter::EnableNotRespondingDialog Çağrılan bir uygulama yanıt vermediğinde görüntülenen iletişim kutusunu etkinleştirir ve devre dışı bırakır.
COleMessageFilter::EndBusyState Uygulamanın meşgul durumunu sonlandırır.
COleMessageFilter::OnMessagePending Bir OLE çağrısı devam ederken iletileri işlemek için çerçeve tarafından çağrılır.
COleMessageFilter::Register İleti filtresini OLE sistem DLL'lerine kaydeder.
COleMessageFilter::Revoke İleti filtresinin OLE sistemi DLL'lerine kaydını iptal eder.
COleMessageFilter::SetBusyReply Meşgul uygulamanın ole çağrısına yanıtını belirler.
COleMessageFilter::SetMessagePendingDelay Uygulamanın OLE çağrısına yanıt bekleme süresi belirler.
COleMessageFilter::SetRetryReply Çağıran uygulamanın meşgul bir uygulamaya yanıtını belirler.

Açıklamalar

COleMessageFilter sınıfı, görsel düzenleme sunucusu ve kapsayıcı uygulamalarının yanı sıra OLE otomasyon uygulamalarında da kullanışlıdır. Çağrılan sunucu uygulamaları için bu sınıf, diğer kapsayıcı uygulamalarından gelen çağrıların iptal edilmesi veya daha sonra yeniden denenmesi için uygulamayı "meşgul" yapmak için kullanılabilir. Bu sınıf, çağrılan uygulama meşgul olduğunda çağıran bir uygulama tarafından gerçekleştirilecek eylemi belirlemek için de kullanılabilir.

Yaygın kullanım, bir belge veya ole tarafından erişilebilen başka bir nesnenin yok edilmesi tehlikeli olabileceği durumlarda sunucu uygulamasının BeginBusyState ve EndBusyState'i çağırması içindir. Bu çağrılar, kullanıcı arabirimi güncelleştirmeleri sırasında CWinApp::OnIdle içinde yapılır.

Varsayılan olarak, uygulama başlatıldığında bir COleMessageFilter nesne ayrılır. AfxOleGetMessageFilter ile alınabilir.

Bu gelişmiş bir sınıftır; nadiren doğrudan onunla çalışmanız gerekir.

Daha fazla bilgi için Sunucular: Sunucu Uygulama makalesine bakın.

Devralma Hiyerarşisi

Cobject

Ccmdtarget

COleMessageFilter

Gereksinimler

Üst bilgi: afxole.h

COleMessageFilter::BeginBusyState

Meşgul bir duruma başlamak için bu işlevi çağır.

virtual void BeginBusyState();

Açıklamalar

Uygulamanın meşgul durumunu denetlemek için EndBusyState ile birlikte çalışır. SetBusyReply işlevi, uygulamanın meşgul olduğunda uygulamaları çağırmaya yanıtını belirler.

ve BeginBusyStateEndBusyState sırasıyla uygulamanın meşgul olup olmadığını belirleyen bir sayaç olan artış ve azaltmayı çağırır. Örneğin, iki çağrısı BeginBusyState ve bir çağrı EndBusyState hala meşgul duruma neden olur. Meşgul bir durumu iptal etmek için, aynı sayıda BeginBusyState çağrı EndBusyState yapılması gerekir.

Varsayılan olarak, çerçeve boşta işleme sırasında meşgul durumuna girer ve bu durum CWinApp::OnIdle tarafından gerçekleştirilir. Uygulama ON_COMMANDUPDATEUI bildirimleri işlerken, boşta işlem tamamlandıktan sonra gelen çağrılar daha sonra işlenir.

COleMessageFilter::COleMessageFilter

Bir COleMessageFilter nesnesi oluşturur.

COleMessageFilter();

COleMessageFilter::EnableBusyDialog

Ole çağrısı sırasında ileti bekleyen gecikme süresi dolduğunda görüntülenen meşgul iletişim kutusunu etkinleştirir ve devre dışı bırakır (bkz . SetRetryReply).

void EnableBusyDialog(BOOL bEnableBusy = TRUE);

Parametreler

bEnableBusy
"Meşgul" iletişim kutusunun etkin mi yoksa devre dışı mı olduğunu belirtir.

COleMessageFilter::EnableNotRespondingDialog

Ole çağrısı sırasında bir klavye veya fare iletisi bekliyorsa ve arama zaman aşımına uğradıysa görüntülenen "yanıt vermiyor" iletişim kutusunu etkinleştirir ve devre dışı bırakır.

void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);

Parametreler

bEnableNotResponding
"Yanıt vermiyor" iletişim kutusunun etkin mi yoksa devre dışı mı olduğunu belirtir.

COleMessageFilter::EndBusyState

Meşgul durumunu sonlandırmak için bu işlevi çağır.

virtual void EndBusyState();

Açıklamalar

Uygulamanın meşgul durumunu denetlemek için BeginBusyState ile birlikte çalışır. SetBusyReply işlevi, uygulamanın meşgul olduğunda uygulamaları çağırmaya yanıtını belirler.

ve BeginBusyStateEndBusyState sırasıyla uygulamanın meşgul olup olmadığını belirleyen bir sayaç olan artış ve azaltmayı çağırır. Örneğin, iki çağrısı BeginBusyState ve bir çağrı EndBusyState hala meşgul duruma neden olur. Meşgul bir durumu iptal etmek için, aynı sayıda BeginBusyState çağrı EndBusyState yapılması gerekir.

Varsayılan olarak, çerçeve boşta işleme sırasında meşgul durumuna girer ve bu durum CWinApp::OnIdle tarafından gerçekleştirilir. Uygulama ON_UPDATE_COMMAND_UI bildirimleri işlerken, boşta işlem tamamlandıktan sonra gelen çağrılar işlenir.

COleMessageFilter::OnMessagePending

Bir OLE çağrısı devam ederken iletileri işlemek için çerçeve tarafından çağrılır.

virtual BOOL OnMessagePending(const MSG* pMsg);

Parametreler

pMsg
Bekleyen iletinin işaretçisi.

İade Değeri

Başarıda sıfır olmayan; aksi takdirde 0.

Açıklamalar

Çağıran bir uygulama bir çağrının tamamlanacağını beklerken, çerçeve bekleyen iletiye yönelik bir işaretçiyle çağırır OnMessagePending . Varsayılan olarak, çerçeve WM_PAINT iletileri göndererek uzun süren bir çağrı sırasında pencere güncelleştirmelerinin gerçekleşebilmesini sağlar.

Etkin hale gelebilmesi için önce bir Yazmaç çağrısı yoluyla ileti filtrenizi kaydetmeniz gerekir.

COleMessageFilter::Register

İleti filtresini OLE sistem DLL'lerine kaydeder.

BOOL Register();

İade Değeri

Başarıda sıfır olmayan; aksi takdirde 0.

Açıklamalar

sistem DLL'lerine kaydedilmediği sürece ileti filtresinin hiçbir etkisi olmaz. Genellikle uygulamanızın başlatma kodu uygulamanın ileti filtresini kaydeder. Uygulamanız tarafından kaydedilen diğer tüm ileti filtresi, program İptal Et çağrısıyla sonlandırılmadan önce iptal edilmelidir.

Çerçevenin varsayılan ileti filtresi başlatma sırasında otomatik olarak kaydedilir ve sonlandırma sırasında iptal edilir.

COleMessageFilter::Revoke

Register çağrısı tarafından gerçekleştirilen önceki bir kaydı iptal eder.

void Revoke();

Açıklamalar

Program sonlandırılmadan önce bir ileti filtresi iptal edilmelidir.

Çerçeve tarafından otomatik olarak oluşturulan ve kaydedilen varsayılan ileti filtresi de otomatik olarak iptal edilir.

COleMessageFilter::SetBusyReply

Bu işlev, uygulamanın "meşgul yanıtı" ayarlar.

void SetBusyReply(SERVERCALL nBusyReply);

Parametreler

nBusyReply
SABIT listesinden SERVERCALL , COMPOBJ.H içinde tanımlanan bir değer. Aşağıdaki değerlerden herhangi birine sahip olabilir:

  • SERVERCALL_ISHANDLED Uygulama çağrıları kabul edebilir ancak belirli bir çağrıyı işlemede başarısız olabilir.

  • SERVERCALL_REJECTED Uygulama büyük olasılıkla bir çağrıyı asla işleyemeyecektir.

  • SERVERCALL_RETRYLATER Uygulama, geçici olarak bir çağrıyı işleyemediği bir durumdadır.

Açıklamalar

BeginBusyState ve EndBusyState işlevleri uygulamanın meşgul durumunu denetler.

Bir uygulama çağrısıyla BeginBusyStatemeşgul edildiğinde, OLE sistemi DLL'lerinden gelen çağrılara son ayarı SetBusyReplytarafından belirlenen bir değerle yanıt verir. Çağıran uygulama, hangi eylemin gerçekleştirileceğini belirlemek için bu meşgul yanıtı kullanır.

Varsayılan olarak meşgul yanıtı SERVERCALL_RETRYLATER. Bu yanıt, çağıran uygulamanın çağrıyı en kısa sürede yeniden denemesine neden olur.

COleMessageFilter::SetMessagePendingDelay

Çağıran uygulamanın daha fazla işlem gerçekleştirmeden önce çağrılan uygulamadan yanıt beklemesinin ne kadar süreceğini belirler.

void SetMessagePendingDelay(DWORD nTimeout = 5000);

Parametreler

nTimeout
İleti bekleyen gecikme için milisaniye sayısı.

Açıklamalar

Bu işlev SetRetryReply ile birlikte çalışır.

COleMessageFilter::SetRetryReply

Çağrılan bir uygulamadan meşgul bir yanıt aldığında çağıran uygulamanın eylemini belirler.

void SetRetryReply(DWORD nRetryReply = 0);

Parametreler

nRetryReply
Yeniden denemeler arasındaki milisaniye sayısı.

Açıklamalar

Çağrılan bir uygulama meşgul olduğunu gösterdiğinde, çağıran uygulama sunucunun artık meşgul olmamasını, hemen yeniden denemeyi veya belirtilen bir aralık sonrasında yeniden denemeyi beklemeye karar verebilir. Ayrıca aramayı tamamen iptal etmeye karar verebilir.

Çağıranın yanıtı, işlevler SetRetryReply ve SetMessagePendingDelay tarafından denetlenir. SetRetryReply , çağrı yapan uygulamanın belirli bir çağrı için yeniden denemeler arasında ne kadar beklemesi gerektiğini belirler. SetMessagePendingDelay , daha fazla işlem gerçekleştirmeden önce çağıran uygulamanın sunucudan yanıt beklemesinin ne kadar süreceğini belirler.

Varsayılanlar genellikle kabul edilebilirdir ve değiştirilmesi gerekmez. Çerçeve, çağrı devam edene veya ileti bekleyen gecikme süresi dolana kadar her nRetryReply milisaniyesinde çağrıyı yeniden dener. nRetryReply için 0 değeri hemen bir yeniden deneme belirtir ve - 1 çağrısının iptalini belirtir.

İleti bekleyen gecikme süresi dolduğunda, kullanıcının aramayı iptal etmeyi veya yeniden denemeyi seçebilmesi için OLE "meşgul iletişim kutusu" (bkz . COleBusyDialog) görüntülenir. Bu iletişim kutusunu etkinleştirmek veya devre dışı bırakmak için EnableBusyDialog'u çağır.

Arama sırasında bir klavye veya fare iletisi beklemede olduğunda ve arama zaman aşımına uğradıysa (ileti bekleme gecikmesi aşıldığında), "yanıt vermiyor" iletişim kutusu görüntülenir. Bu iletişim kutusunu etkinleştirmek veya devre dışı bırakmak için EnableNotRespondingDialog çağrısı yapın. Bu durum genellikle bir şeylerin ters gittiğini ve kullanıcının sabırsızlandığını gösterir.

İletişim kutuları devre dışı bırakıldığında, meşgul uygulamalara yapılan çağrılar için her zaman geçerli "yanıtı yeniden dene" kullanılır.

Ayrıca bkz.

CCmdTarget Sınıfı
Hiyerarşi Grafiği
CCmdTarget Sınıfı