Класс 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.

Это расширенный класс; Вы редко должны работать с ним напрямую.

Дополнительные сведения см. в статье "Серверы: реализация сервера".

Иерархия наследования

CObject

CCmdTarget

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, чтобы включить или отключить это диалоговое окно. Обычно это состояние дел указывает на то, что что-то пошло не так, и пользователь становится нетерпеливым.

Если диалоги отключены, текущий ответ повтора всегда используется для вызовов для занятых приложений.

См. также

Класс CCmdTarget
Диаграмма иерархии
Класс CCmdTarget