Share via


Bereitstellen von Maus-Interaktion, wenn inaktiv

Wenn das Steuerelement nicht sofort aktiviert ist, sollten Sie es noch WM_SETCURSOR und WM_MOUSEMOVE Meldungen verarbeiten, obwohl das Steuerelement keine eigenen Fenster.Dies kann erreicht werden, indem die COleControl-Implementierung der IPointerInactive-Schnittstelle ermöglicht, die standardmäßig deaktiviert ist.(Siehe das ActiveX SDK zur Beschreibung dieser Schnittstelle.) Um dies zu aktivieren, fügen Sie das pointerInactive-Flag im Satz von Flags, die vom 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, um dieses Flags eingeschlossen wird automatisch generiert, wenn Sie die Option Mauszeiger-Benachrichtigung wenn inaktiv auf der Seite Steuerelementeinstellungen auswählen, wenn Sie das Steuerelement mit MFC-ActiveX-Steuerelement-Assistent erstellen.

Wenn die IPointerInactive-Schnittstelle ermöglicht wird, delegiert der Container WM_SETCURSOR und WM_MOUSEMOVE Meldungen dorthin.Die COleControl-Implementierung der IPointerInactive leitet die Nachrichten durch die Meldungszuordnung des Steuerelements, nach der die Mauskoordinaten entsprechend anpassen.Sie können die Fenstermeldungen wie gewöhnliche Meldungen verarbeiten, indem Sie die entsprechenden Buchungen zur Meldungszuordnung hinzufügen.In den Handlern für diese Meldungen vermeiden Sie die m_hWnd-Membervariable (oder eine Memberfunktion, die sie verwendet), ohne erste Überprüfung zu verwenden, dass der Wert nicht NULL ist.

Sie können auch ein inaktives Steuerelement das Ziel eines OLE-Drag & Drop-Vorgangs sein.Dies erfordert das Aktivieren des Steuerelements als Zeitpunkt, an dem der Benutzer ein Objekt darüber ziehen, damit das Fenster des Steuerelements als Ablageziel registriert werden kann.Zur Aktivierung dass während eines Ziehs, überschreiben Sie COleControl::GetActivationPolicy, und geben Sie das POINTERINACTIVE_ACTIVATEONDRAG-Flag zurück:

DWORD CMyAxOptCtrl::GetActivationPolicy()
{
   return POINTERINACTIVE_ACTIVATEONDRAG;
}

Die IPointerInactive-Schnittstelle zu aktivieren Sie in der Regel, dass Sie das Steuerelement kann jederzeit Mausmeldungen verarbeitet werden soll.Um dieses Verhalten in einem Container abgerufen IPointerInactive ohne die Schnittstelle unterstützt, muss das Steuerelement sichtbar, wenn die immer aktiviert ist. Dies bedeutet, dass das Steuerelement das OLEMISC_ACTIVATEWHENVISIBLE-Flag unter den verschiedenen Flags umfassen soll.Um zu verhindern, dass dieses Flag in einem Container, der IPointerInactive unterstützt, können Sie das Flag OLEMISC_IGNOREACTIVATEWHENVISIBLE auch wirksam wird:

static const DWORD BASED_CODE _dwMyOleMisc =
   OLEMISC_ACTIVATEWHENVISIBLE |
   OLEMISC_IGNOREACTIVATEWHENVISIBLE |
   OLEMISC_SETCLIENTSITEFIRST |
   OLEMISC_INSIDEOUT |
   OLEMISC_CANTLINKINSIDE |
   OLEMISC_RECOMPOSEONRESIZE;

Siehe auch

Konzepte

MFC-ActiveX-Steuerelemente: Optimierung