COleControl::GetActivationPolicy
Изменяет по умолчанию расширения функциональности активации элемента управления, поддерживающего интерфейс IPointerInactive.
virtual DWORD GetActivationPolicy( );
Возвращаемое значение
Сочетание пометит из перечисления POINTERINACTIVE. Возможные флаги:
POINTERINACTIVE_ACTIVATEONENTRY
Объект должен быть в- активированным размещение, когда мышь вставляет его во время операции перемещения мыши.POINTERINACTIVE_DEACTIVATEONLEAVE
Объект должен быть отключен, когда указатель мыши покидает объект во время операции перемещения мыши.POINTERINACTIVE_ACTIVATEONDRAG
Объект должен быть в- активированным размещение, когда указатель мыши над ним перетащитьо во время операции перетаскивания.
Заметки
Если интерфейс IPointerInactive будет включен, контейнер и делегатов WM_SETCURSOR сообщения WM_MOUSEMOVE на него. Реализация этого интерфейса COleControl пошлет эти сообщения через сопоставление сообщения элемента управления, после обработки координаты мыши.
Если контейнер получает сообщение WM_SETCURSOR или WM_MOUSEMOVE с использованием указателя мыши над объектом, поддерживающий IPointerInactive неактивным, он должен вызвать GetActivationPolicy на интерфейсе и возвратить флаги из перечисления POINTERINACTIVE.
Можно обрабатывать эти сообщения как и обычные сообщения окна, добавив соответствующие записи для сопоставления сообщений. В обработчиках избегайте использования переменной члена m_hWnd (или некие функций-членов, который использует seh), без проверки, его значение подписчиков, отличных от NULL.
Любой объект, предназначенный сделать более установите курсор мыши и/или инициирует событие смещения указателя мыши, например предоставляет специальный визуальную обратную связь, должен возвратить пометить POINTERINACTIVE_ACTIVATEONENTRY и рисование отзыв, только если активно. Если объект возвращает этот пометить, то контейнер должен активировать его в- место немедленно, а затем передний это одно и то же сообщение, активировало вызов GetActivationPolicy.
Если и POINTERINACTIVE_ACTIVATEONENTRY и флаги POINTERINACTIVE_DEACTIVATEONLEAVE возвращается, то объект будет активирован только если указатель мыши находится над объектом. Если пометить возвращается только POINTERINACTIVE_ACTIVATEONENTRY, то объект будет активирован только один раз, когда указатель мыши первое под этим объектом.
Может также потребоваться бездействующий элемент управления быть целевым объектом перетаскивания OLE и удалять операции. Для этого необходимо активировать элемент управления в данный момент пользователь перетаскивает объект выше, так что окно элемента управления можно зарегистрировать в качестве целевой объект перетаскивания. Для активации возникать во время перетаскивания возвращается пометить POINTERINACTIVE_ACTIVATEONDRAG:
DWORD CMyAxCtrl::GetActivationPolicy()
{
return POINTERINACTIVE_ACTIVATEONDRAG;
}
Сведения GetActivationPolicy связываемое не кэшируется контейнером. Вместо этого данный метод следует вызывать при каждом ввестями мыши бездействующий объект.
Если бездействующий объект не запрашивает, которое необходимо активировать, в- размещение, когда мышь вставляет его, его контейнер должен выполнить последующие сообщения WM_SETCURSOR к этому объекту с помощью вызова OnInactiveSetCursor, пока остается указателя мыши над объектом.
Включение интерфейс IPointerInactive обычно означает, что требуется элемент управления обеспечивают возможность обработки сообщений мыши. Получить эти расширения функциональности в контейнере, не поддерживает интерфейс IPointerInactive, необходимо иметь свой всегда активируемый элемент управления, если видимый, что означает, что элемент управления должен иметь пометить OLEMISC_ACTIVATEWHENVISIBLE среди его различных флагов. Однако для предотвращения этого пометить от создания эффекта в контейнере, который поддерживает IPointerInactive можно также указать пометить OLEMISC_IGNOREACTIVATEWHENVISIBLE:
static const DWORD BASED_CODE _dwMyOleMisc =
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_IGNOREACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST |
OLEMISC_INSIDEOUT |
OLEMISC_CANTLINKINSIDE |
OLEMISC_RECOMPOSEONRESIZE;
Требования
Header: afxctl.h