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 成员变量(或使用它)的任何成员函数,而无需先检查其值非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