Udostępnij za pośrednictwem


Dostarczanie interakcji myszy, gdy nieaktywny

Jeśli formant nie jest natychmiast aktywowany, nadal można go przetworzyć WM_SETCURSOR i WM_MOUSEMOVE wiadomości, nawet jeśli formant ma nie okno własnej.Można to osiągnąć, włączając COleControlw realizacji IPointerInactive interfejs, który jest domyślnie wyłączone.(Zobacz ActiveX SDK opis tego interfejsu.) Aby ją włączyć, należy dołączyć pointerInactive w zestaw flag zwrócony przez flagę COleControl::GetControlFlags:

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


...


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


...


   return dwFlags;
}

Kod, który ma obejmować ta flaga jest generowany automatycznie po wybraniu Myszy wskaźnik powiadomień po nieaktywny opcji na Ustawienia sterowania strony podczas tworzenia formantu z Kreatora formantów ActiveX MFC.

Gdy IPointerInactive interfejs jest włączony, delegatów kontenera WM_SETCURSOR i WM_MOUSEMOVE wiadomości do niej.COleControlw realizacji IPointerInactive wysyła wiadomości za pośrednictwem programu kontroli wiadomości mapy po dostosowanie myszy odpowiednio koordynuje.Przez dodanie odpowiednich wpisów do mapy wiadomości można przetwarzać wiadomości, podobnie jak zwykłe okno wiadomości.W sieci obsługi tych wiadomości, należy unikać używania m_hWnd zmienną (lub która go używa funkcji Członkowskich) bez sprawdzenia, że jego wartość nie jest NULL.

Można również nieaktywny formant ma być celem operacji przeciągania i upuszczania OLE.Wymaga to aktywowanie kontroli w momencie użytkownik przeciągnie obiekt nad nim, tak aby okno formantu można zarejestrować jako miejsce docelowe upuszczenia.Spowodować aktywacji, podczas przeciągania należy zastąpić COleControl::GetActivationPolicyi zwraca POINTERINACTIVE_ACTIVATEONDRAG flaga:

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

Włączanie IPointerInactive interfejsu zazwyczaj oznacza, że formant umożliwiający przetwarzanie komunikatów myszy przez cały czas.Aby uzyskać to zachowanie w pojemniku, który nie obsługuje IPointerInactive interfejsu, trzeba mieć formantu zawsze uaktywniana, gdy jest widoczny, co oznacza kontroli powinny obejmować OLEMISC_ACTIVATEWHENVISIBLE Flaga między jego różne flagi.Jednak aby zapobiec tej flagi z podjęciem efekt w pojemniku obsługuje IPointerInactive, można również określić OLEMISC_IGNOREACTIVATEWHENVISIBLE flaga:

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

Zobacz też

Koncepcje

Formanty ActiveX MFC: Optymalizacja