Класс COleMessageFilter
Управляет параллелизмом, требуемым для взаимодействия приложений OLE.
Синтаксис
class COleMessageFilter : public CCmdTarget
Участники
Открытые конструкторы
Имя | Описание |
---|---|
COleMessageFilter::COleMessageFilter | Формирует объект COleMessageFilter . |
Открытые методы
Имя | Описание |
---|---|
COleMessageFilter::BeginBusyState | Помещает приложение в состояние занятости. |
COleMessageFilter::EnableBusyDialog | Включает и отключает диалоговое окно, которое отображается при занятом вызываемом приложении. |
COleMessageFilter::EnableNotRespondingDialog | Включает и отключает диалоговое окно, которое отображается, когда вызываемое приложение не отвечает. |
COleMessageFilter::EndBusyState | Завершает состояние занятого приложения. |
COleMessageFilter::OnMessagePending | Вызывается платформой для обработки сообщений во время выполнения вызова OLE. |
COleMessageFilter::Register | Регистрирует фильтр сообщений с помощью библиотек DLL системы OLE. |
COleMessageFilter::Revoke | Отменяет регистрацию фильтра сообщений с помощью библиотек DLL системы OLE. |
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 определяет ответ приложения на вызов приложений, когда он занят.
Счетчик BeginBusyState
, определяющий, занят ли приложение, увеличивается EndBusyState
и уменьшается соответственно. Например, два вызова 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 определяет ответ приложения на вызов приложений, когда он занят.
Счетчик BeginBusyState
, определяющий, занят ли приложение, увеличивается EndBusyState
и уменьшается соответственно. Например, два вызова 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
Регистрирует фильтр сообщений с помощью библиотек DLL системы OLE.
BOOL Register();
Возвращаемое значение
Ненулевое значение, если операция выполнена успешно; в противном случае — значение 0.
Замечания
Фильтр сообщений не действует, если он не зарегистрирован в системных библиотеках DLL. Обычно код инициализации приложения регистрирует фильтр сообщений приложения. Любой другой фильтр сообщений, зарегистрированный приложением, должен быть отменен до завершения программы вызовом отмены.
Фильтр сообщений по умолчанию платформы автоматически регистрируется во время инициализации и отменяется при завершении.
COleMessageFilter::Revoke
Отменяет предыдущую регистрацию, выполняемую вызовом register.
void Revoke();
Замечания
Перед завершением программы необходимо отменить фильтр сообщений.
Фильтр сообщений по умолчанию, который создается и регистрируется автоматически платформой, также автоматически отозван.
COleMessageFilter::SetBusyReply
Эта функция задает "занятый ответ" приложения.
void SetBusyReply(SERVERCALL nBusyReply);
Параметры
nBusyReply
Значение перечисления, определенное SERVERCALL
в COMPOBJ.H. Он может иметь одно из следующих значений:
SERVERCALL_ISHANDLED приложение может принимать вызовы, но может завершиться сбоем при обработке конкретного вызова.
SERVERCALL_REJECTED приложение, вероятно, никогда не сможет обработать вызов.
SERVERCALL_RETRYLATER приложение временно находится в состоянии, в котором он не может обрабатывать вызов.
Замечания
Функции BeginBusyState и EndBusyState управляют состоянием занятого приложения.
Когда приложение было занято вызовом BeginBusyState
, оно отвечает на вызовы из библиотек DLL системы OLE со значением, определенным последним параметром 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 до истечения срока действия вызова или задержки ожидания сообщения. Значение 0 для nRetryReply указывает немедленную повторную попытку и - 1 указывает отмену вызова.
После истечения срока действия задержки ожидания сообщения отображается диалоговое окно OLE "занято" (см . COleBusyDialog), чтобы пользователь смог отменить или повторить вызов. Вызов enableBusyDialog для включения или отключения этого диалогового окна.
Если во время вызова ожидается сообщение клавиатуры или мыши и время ожидания вызова (превышено задержка ожидания сообщения), отображается диалоговое окно "Не отвечать". Вызов enableNotRespondingDialog, чтобы включить или отключить это диалоговое окно. Обычно это состояние дел указывает на то, что что-то пошло не так, и пользователь становится нетерпеливым.
Если диалоги отключены, текущий ответ повтора всегда используется для вызовов для занятых приложений.