COleControl::GetActivationPolicy

更改支持 IPointerInactive 界面控件的默认启动行为。

virtual DWORD GetActivationPolicy( );

返回值

标志的组合。POINTERINACTIVE 枚举的。可能的标志是:

  • POINTERINACTIVE_ACTIVATEONENTRY
    对象应就地激活鼠标何时在鼠标移动操作时访问它。

  • POINTERINACTIVE_DEACTIVATEONLEAVE
    对象,当鼠标位于鼠标移动操作时,将对象应停用。

  • POINTERINACTIVE_ACTIVATEONDRAG
    对象应就地激活鼠标何时拖动到它在拖放操作过程。

备注

IPointerInactive 接口启用,容器将委托 WM_SETCURSORWM_MOUSEMOVE 消息给它。此接口的COleControl的实现通过控件的消息映射进行安排这些消息,在相应调整鼠标坐之后。

每当容器接收用鼠标指针的一 WM_SETCURSORWM_MOUSEMOVE 消息在支持 IPointerInactive的非事件对象,它应调用接口中的 GetActivationPolicy 并返回从 POINTERINACTIVE 枚举的标志。

您可以通过将对应项处理这些消息类似普通的窗口消息,向消息映射。在该处理程序,请避免使用 m_hWnd 成员变量(或使用它)的任何成员函数,而无需先检查其值非NULL

所有对象用于不仅仅设置鼠标光标和/或激发一个鼠标移动事件,如为特定可视反馈,应返回 POINTERINACTIVE_ACTIVATEONENTRY 标志和绘制反馈,仅当激活。如果对象返回该标志,容器应当立即激活它就地然后将其转发触发对 GetActivationPolicy相同的消息。

如果 POINTERINACTIVE_ACTIVATEONENTRYPOINTERINACTIVE_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

请参见

参考

COleControl选件类

层次结构图

COleControl::OnInactiveSetCursor

COleControl::OnInactiveMouseMove