Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Ihr Steuerelement nicht sofort aktiviert wird, möchten Sie möglicherweise, dass es dennoch WM_SETCURSOR- und WM_MOUSEMOVE-Nachrichten verarbeitet, auch wenn das Steuerelement kein eigenes Fenster besitzt. Dies kann erreicht werden, indem dieCOleControl Implementierung der IPointerInactive Schnittstelle aktiviert wird, die standardmäßig deaktiviert ist. (Eine Beschreibung dieser Schnittstelle finden Sie im ActiveX SDK .) Um dies zu aktivieren, schließen Sie das pointerInactive-Flag in den Satz von Flags ein, die von COleControl::GetControlFlags zurückgegeben werden:
DWORD CMyAxOptCtrl::GetControlFlags()
{
DWORD dwFlags = COleControl::GetControlFlags();
// The control can receive mouse notifications when inactive.
dwFlags |= pointerInactive;
return dwFlags;
}
Der Code zum Einschließen dieses Flags wird automatisch generiert, wenn Sie die Option "Mauszeigerbenachrichtigungen bei Inaktiv" auf der Seite " Steuerelementeinstellungen " auswählen, wenn Sie ihr Steuerelement mit dem MFC ActiveX-Steuerelement-Assistenten erstellen.
Wenn die IPointerInactive Schnittstelle aktiviert ist, delegiert der Container WM_SETCURSOR und WM_MOUSEMOVE Nachrichten an die Schnittstelle. COleControlDie Implementierung von IPointerInactive leitet die Nachrichten durch die Nachrichtenkarte Ihres Steuerelements weiter, nachdem die Mauskoordinaten entsprechend angepasst wurden. Sie können die Nachrichten wie normale Fensternachrichten verarbeiten, indem Sie die entsprechenden Einträge zur Nachrichtenzuordnung hinzufügen. Vermeiden Sie in den Handlern für diese Meldungen die Verwendung der m_hWnd-Membervariable (oder einer Memberfunktion, die sie verwendet), ohne vorher sicherzustellen, dass der Wert nicht NULL ist.
Möglicherweise möchten Sie auch, dass ein inaktives Steuerelement das Ziel eines OLE-Drag-and-Drop-Vorgangs ist. Dies erfordert die Aktivierung des Steuerelements im Moment, in dem der Benutzer ein Objekt darüber zieht, sodass das Fenster des Steuerelements als Drop-Ziel registriert werden kann. Um die Aktivierung während eines Drag zu veranlassen, überschreiben Sie COleControl::GetActivationPolicy und geben das Flag POINTERINACTIVE_ACTIVATEONDRAG zurück:
DWORD CMyAxOptCtrl::GetActivationPolicy()
{
return POINTERINACTIVE_ACTIVATEONDRAG;
}
Das Aktivieren der IPointerInactive Schnittstelle bedeutet, dass das Steuerelement jederzeit in der Lage ist, Mausnachrichten zu verarbeiten. Um dieses Verhalten in einem Container zu erhalten, der die IPointerInactive Schnittstelle nicht unterstützt, müssen Sie das Steuerelement immer aktiviert lassen, wenn es sichtbar ist. Das Bedeutet, dass das Steuerelement das OLEMISC_ACTIVATEWHENVISIBLE Flag unter den verschiedenen Flags enthalten soll. Um jedoch zu verhindern, dass dieses Flag in einem Container wirksam wird, der IPointerInactive unterstützt, können Sie auch das Flag OLEMISC_IGNOREACTIVATEWHENVISIBLE angeben:
static const DWORD BASED_CODE _dwMyOleMisc =
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_IGNOREACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST |
OLEMISC_INSIDEOUT |
OLEMISC_CANTLINKINSIDE |
OLEMISC_RECOMPOSEONRESIZE;