Condividi tramite


Inserimento di interazione del mouse in stato di inattività

Se il controllo immediato non è attivato, è comunque desiderarlo per elaborare WM_SETCURSOR e messaggi di WM_MOUSEMOVE, anche se non ha finestra dei propri. A questo scopo abilitando l'implementazione di COleControl dell'interfaccia di IPointerInactive, che è disabilitata per impostazione predefinita. (Vedere ActiveX 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 Notifiche del puntatore del mouse quando inattivo nella pagina di Impostazioni controllo durante la creazione del controllo con Creazione guidata controllo ActiveX MFC.

Quando l'interfaccia di IPointerInactive è abilitata, il contenitore delega WM_SETCURSOR e messaggi di WM_MOUSEMOVE. l'implementazione diCOleControl di IPointerInactive invia i messaggi tramite la mappa messaggi del controllo dopo avere modificato le coordinate del mouse in modo appropriato. È possibile elaborare messaggi come i 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 la utilizza) senza prima verificare che il valore non è NULL.

È inoltre possibile un controllo inattivo per essere la destinazione di un'operazione di trascinamento della selezione OLE. Questo richiede l'attivazione del controllo dal momento che l'utente trascina un oggetto su, in modo che la finestra del controllo può essere registrata come destinazione di trascinamento. Per impedire l'attivazione con verificarsi durante il trascinamento, eseguire l'override di COleControl::GetActivationPolicy e 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 significa 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