分享方式:


COleMessageFilter 類別

管理 OLE 應用程式互動所需的並行。

語法

class COleMessageFilter : public CCmdTarget

成員

公用建構函式

名稱 描述
COleMessageFilter::COleMessageFilter 建構 COleMessageFilter 物件。

公用方法

名稱 描述
COleMessageFilter::BeginBusyState 讓應用程式處於忙碌狀態。
COleMessageFilter::EnableBusyDialog 啟用並停用當呼叫的應用程式忙碌時出現的對話方塊。
COleMessageFilter::EnableNotRespondingDialog 啟用和停用呼叫的應用程式未回應時出現的對話方塊。
COleMessageFilter::EndBusyState 終止應用程式的忙碌狀態。
COleMessageFilter::OnMessagePending 由架構呼叫,以在 OLE 呼叫進行時處理訊息。
COleMessageFilter::Register 向 OLE 系統 DLL 註冊訊息篩選。
COleMessageFilter::Revoke 撤銷訊息篩選器向 OLE 系統 DLL 註冊。
COleMessageFilter::SetBusyReply 判斷忙碌應用程式的 OLE 呼叫回復。
COleMessageFilter::SetMessagePendingDelay 決定應用程式等候回應 OLE 呼叫的時間長度。
COleMessageFilter::SetRetryReply 判斷呼叫端應用程式的回復忙碌應用程式。

備註

類別 COleMessageFilter 適用于視覺編輯服務器和容器應用程式,以及 OLE 自動化應用程式。 對於正在呼叫的伺服器應用程式,這個類別可用來讓應用程式「忙碌」,以便稍後取消或重試來自其他容器應用程式的來電。 這個類別也可以用來判斷呼叫應用程式忙碌時,呼叫應用程式所要採取的動作。

常見的用法是伺服器應用程式呼叫 BeginBusyState 和 EndBusyState 時,檔或其他可存取的 OLE 物件可能會損毀。 這些呼叫會在使用者介面更新期間于 CWinApp::OnIdle 進行。

根據預設, COleMessageFilter 初始化應用程式時會配置 物件。 您可以使用 AfxOleGetMessageFilter 來擷 取它。

這是進階類別;您很少需要直接使用。

如需詳細資訊,請參閱伺服器:實作伺服器 一文

繼承階層架構

CObject

CCmdTarget

COleMessageFilter

需求

標頭: afxole.h

COleMessageFilter::BeginBusyState

呼叫此函式以開始忙碌狀態。

virtual void BeginBusyState();

備註

它會與 EndBusyState 搭配 運作,以控制應用程式的忙碌狀態。 SetBusyReply 函式會決定應用程式在忙碌時呼叫應用程式的回復。

EndBusyStateBeginBusyState 分別呼叫遞增和遞減計數器,以判斷應用程式是否忙碌中。 例如,對 BeginBusyState 的兩次呼叫和一次呼叫 EndBusyState 仍然會導致忙碌狀態。 若要取消忙碌狀態,必須呼叫 EndBusyState 相同的呼叫次數 BeginBusyState

根據預設,架構會在閒置處理期間進入忙碌狀態,由 CWinApp::OnIdle 執行 。 當應用程式處理ON_COMMANDUPDATEUI通知時,稍後會在閒置處理完成之後處理連入呼叫。

COleMessageFilter::COleMessageFilter

建立 COleMessageFilter 物件。

COleMessageFilter();

COleMessageFilter::EnableBusyDialog

啟用和停用忙碌對話方塊,當訊息擱置的延遲到期時,就會顯示此對話方塊(請參閱 SetRetryReply )在 OLE 呼叫期間。

void EnableBusyDialog(BOOL bEnableBusy = TRUE);

參數

bEnableBusy
指定是否啟用或停用 [忙碌] 對話方塊。

COleMessageFilter::EnableNotRespondingDialog

啟用和停用 [未回應] 對話方塊,如果鍵盤或滑鼠訊息在 OLE 呼叫期間擱置,而且通話已逾時,就會顯示此對話方塊。

void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);

參數

bEnableNotResponding
指定是否啟用或停用 [未回應] 對話方塊。

COleMessageFilter::EndBusyState

呼叫此函式以結束忙碌狀態。

virtual void EndBusyState();

備註

它會與 BeginBusyState 搭配 運作,以控制應用程式的忙碌狀態。 SetBusyReply 函式會決定應用程式在忙碌時呼叫應用程式的回復。

EndBusyStateBeginBusyState 分別呼叫遞增和遞減計數器,以判斷應用程式是否忙碌中。 例如,對 BeginBusyState 的兩次呼叫和一次呼叫 EndBusyState 仍然會導致忙碌狀態。 若要取消忙碌狀態,必須呼叫 EndBusyState 相同的呼叫次數 BeginBusyState

根據預設,架構會在閒置處理期間進入忙碌狀態,由 CWinApp::OnIdle 執行 。 當應用程式處理ON_UPDATE_COMMAND_UI通知時,撥入電話會在閒置處理完成之後處理。

COleMessageFilter::OnMessagePending

由架構呼叫,以在 OLE 呼叫進行時處理訊息。

virtual BOOL OnMessagePending(const MSG* pMsg);

參數

pMsg
暫止訊息的指標。

傳回值

非零成功,否則為 0。

備註

當呼叫端應用程式等候呼叫完成時,架構會使用暫止訊息的指標呼叫 OnMessagePending 。 根據預設,架構會分派WM_PAINT訊息,讓視窗更新可以在長時間呼叫期間發生。

您必須透過呼叫 Register 註冊訊息篩選,才能變成作用中狀態。

COleMessageFilter::Register

向 OLE 系統 DLL 註冊訊息篩選。

BOOL Register();

傳回值

非零成功,否則為 0。

備註

除非訊息篩選已向系統 DLL 註冊,否則訊息篩選沒有作用。 應用程式初始化程式碼通常會註冊應用程式的訊息篩選。 應用程式所註冊的任何其他訊息篩選,都應該在程式 呼叫 Revoke 終止之前撤銷。

架構的預設訊息篩選器會在初始化期間自動註冊,並在終止時撤銷。

COleMessageFilter::Revoke

撤銷呼叫 Register 所執行的先前註冊。

void Revoke();

備註

在程式終止之前,應該撤銷訊息篩選準則。

由架構自動建立和註冊的預設訊息篩選也會自動撤銷。

COleMessageFilter::SetBusyReply

此函式會設定應用程式的「忙碌回復」。

void SetBusyReply(SERVERCALL nBusyReply);

參數

nBusyReply
列舉中的 SERVERCALL 值,定義于 COMPOBJ.H 中。 它可以有下列任何一個值:

  • SERVERCALL_ISHANDLED應用程式可以接受呼叫,但在處理特定呼叫時可能會失敗。

  • SERVERCALL_REJECTED應用程式可能無法處理呼叫。

  • SERVERCALL_RETRYLATER應用程式暫時處於無法處理呼叫的狀態。

備註

BeginBusyState 和 EndBusyState 函式可控制應用程式的忙碌狀態。

當應用程式忙於呼叫 時,它會回應來自 OLE 系統 DLL 的呼叫 BeginBusyState ,其值是由 的最後一個設定 SetBusyReply 所決定。 呼叫端應用程式會使用此忙碌的回復來判斷要採取的動作。

根據預設,忙碌的回復是SERVERCALL_RETRYLATER。 此回復會導致呼叫端應用程式儘快重試通話。

COleMessageFilter::SetMessagePendingDelay

決定呼叫應用程式在採取進一步動作之前,等候所呼叫應用程式回應的時間長度。

void SetMessagePendingDelay(DWORD nTimeout = 5000);

參數

nTimeout
訊息暫止延遲的毫秒數。

備註

此函式可與 SetRetryReply 搭配運作

COleMessageFilter::SetRetryReply

當呼叫端應用程式收到來自呼叫應用程式的忙碌回應時,會決定其動作。

void SetRetryReply(DWORD nRetryReply = 0);

參數

nRetryReply
重試之間的毫秒數。

備註

當呼叫的應用程式指出它忙碌時,呼叫的應用程式可能會決定等到伺服器不再忙碌、立即重試,或是在指定的間隔後重試。 它也可能會決定完全取消呼叫。

呼叫端的回應是由函 SetRetryReply 式和 SetMessagePendingDelay 所控制。 SetRetryReply 會決定呼叫應用程式在指定的呼叫重試之間應該等候的時間長度。 SetMessagePendingDelay 會決定呼叫應用程式在採取進一步動作之前,等候伺服器回應的時間長度。

預設值通常是可接受的,而且不需要變更。 架構會每隔 nRetryReply 毫秒重試呼叫,直到呼叫通過或訊息擱置延遲已過期為止。 nRetryReply 的值為 0 ,指定立即重試,而 - 1 指定取消呼叫。

當訊息擱置延遲已過期時,會顯示 [OLE「忙碌] 對話方塊(請參閱 COleBusyDialog ),讓使用者可以選擇取消或重試呼叫。 呼叫 EnableBusyDialog 以啟用或停用此對話方塊。

當鍵盤或滑鼠訊息在通話期間擱置,且通話已逾時(超過消息暫止延遲),則會顯示 [未回應] 對話方塊。 呼叫 EnableNotRespondingDialog 以啟用或停用此對話方塊。 通常這種狀況表示發生問題,而且使用者變得不耐煩。

停用對話方塊時,目前「重試回復」一律會用於呼叫忙碌應用程式。

另請參閱

CCmdTarget 類別
階層架構圖表
CCmdTarget 類別