Creazione di interazioni con il mouse mentre inattivo

Se il controllo immediatamente non è attivato, è comunque possibile desiderarlo per elaborare WM_SETCURSOR e messaggi di WM_MOUSEMOVE , anche se non ha finestra dei propri.Questa operazione può essere eseguita abilitando l'implementazione di entity_CODECOleControl dell'interfaccia di IPointerInactive , che è disabilitata per impostazione predefinita.(Vedere di automazione SDK per una descrizione dell'interfaccia.) Per abilitarla, includere il flag di pointerInactive nel set di flag restituiti da COleControl::GetControlFlags:

DWORD CMyAxOptCtrl::GetControlFlags()
{
   DWORD dwFlags = COleControl::GetControlFlags();


...


// The control can receive mouse notifications when inactive.
dwFlags |= pointerInactive;


...


   return dwFlags;
}

Il codice per importare questo flag viene generato automaticamente se si seleziona l'opzione di Mouse Pointer Notifications When Inactive nella pagina di Verificare le impostazioni quando si crea il controllo con MFC ActiveX Control Wizard.

Quando l'interfaccia di IPointerInactive è abilitata, il contenitore delega WM_SETCURSOR e messaggi di WM_MOUSEMOVE .l'implementazione dei entity_CODECOleControl di IPointerInactive invia i messaggi tramite la mappa messaggi del controllo dopo avere modificato le coordinate del mouse in modo appropriato.È possibile elaborare messaggi solo come messaggi comuni della finestra aggiungendo voci corrispondenti alla mappa messaggi.Nei gestori per questi messaggi, evitare di utilizzare la variabile membro di m_hWnd o qualsiasi altra funzione membro che lo utilizza) senza prima verificare che il valore non è NULL.

È possibile sperimentare un controllo inattivo per essere la destinazione di un'operazione di trascinamento della selezione OLE.È quindi necessario attivare il controllo dal momento che l'utente sposta un oggetto su, in modo che la finestra del controllo può essere registrata come destinazione di trascinamento.Per impedire l'attivazione per verificare durante il trascinamento, l'override COleControl::GetActivationPolicye restituire il flag di POINTERINACTIVE_ACTIVATEONDRAG :

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

Attivare l'interfaccia di IPointerInactive indica in genere che si desidera disporre il controllo sia in grado dei messaggi del mouse di elaborazione.Per ottenere questo comportamento in un contenitore che non supporta l'interfaccia di IPointerInactive , è necessario disporre del controllo con lo stato attivo sempre una volta visibile, che indica che il controllo deve includere il flag di OLEMISC_ACTIVATEWHENVISIBLE tra i vari flag.Tuttavia, per evitare questo flag da rendere effettive in un contenitore che supporta IPointerInactive, è anche possibile specificare il flag di OLEMISC_IGNOREACTIVATEWHENVISIBLE :

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

Vedere anche

Concetti

Controlli ActiveX MFC: ottimizzazione