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 來擷取它。
這是進階類別;您很少需要直接使用。
如需詳細資訊,請參閱伺服器:實作伺服器一文。
繼承階層架構
COleMessageFilter
需求
標頭: afxole.h
COleMessageFilter::BeginBusyState
呼叫此函式以開始忙碌狀態。
virtual void BeginBusyState();
備註
它會與 EndBusyState 搭配運作,以控制應用程式的忙碌狀態。 SetBusyReply 函式會決定應用程式在忙碌時呼叫應用程式的回復。
和 EndBusyState
會BeginBusyState
分別呼叫遞增和遞減計數器,以判斷應用程式是否忙碌中。 例如,對 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 函式會決定應用程式在忙碌時呼叫應用程式的回復。
和 EndBusyState
會BeginBusyState
分別呼叫遞增和遞減計數器,以判斷應用程式是否忙碌中。 例如,對 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 以啟用或停用此對話方塊。 通常這種狀況表示發生問題,而且使用者變得不耐煩。
停用對話框時,目前「重試回復」一律會用於呼叫忙碌應用程式。