Zapewnianie interakcji z myszą przy braku aktywności

Jeśli formant nie jest natychmiast aktywowany, wciąż możesz ją przetworzyć WM_SETCURSOR i WM_MOUSEMOVE wiadomości, nawet jeśli formant ma nie okno własnych.Można to osiągnąć poprzez umożliwienie COleControlw realizacji IPointerInactive interfejs, który jest domyślnie wyłączone. (Zobacz ActiveX SDK opis tego interfejsu.) Aby ją włączyć, należy uwzględnić pointerInactive flagi w zestawie flagi zwrócony przez COleControl::GetControlFlags:

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


...


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


...


   return dwFlags;
}

Kod, aby uwzględnić ta flaga jest generowany automatycznie po wybraniu Myszy wskaźnik powiadomienia o podczas nieaktywne opcji na Ustawienia sterowania strony podczas tworzenia formantu z Kreatora formantów ActiveX MFC.

Gdy IPointerInactive interfejs jest włączony, delegatów kontener WM_SETCURSOR i WM_MOUSEMOVE wiadomości do niej.COleControlw realizacji IPointerInactive wysyła wiadomości za pośrednictwem sieci sterowania wiadomość 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 swoje programy obsługi dla tych komunikatów, należy unikać m_hWnd zmienna członka (lub żadnych funkcji członka, która go używa) bez uprzedniego sprawdzenia, że jego wartość nie jest wartości NULL.

Możesz również nieaktywny formant ma być celem operacji przeciągania i upuszczania OLE.Wymaga to aktywowanie formantu w tej chwili użytkownik przeciągnie obiekt nad nim, tak, że okno Kontrola mogą być zarejestrowane jako miejsce docelowe upuszczania.Aby aktywacja wystąpią podczas przeciągania powoduje, należy zastąpić COleControl::GetActivationPolicyi powrót POINTERINACTIVE_ACTIVATEONDRAG Flaga:

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

Włączanie IPointerInactive interfejsu zazwyczaj oznacza, że ma formantu ma być zdolne do przetwarzania komunikatów myszy przez cały czas.Aby uzyskać takie zachowanie w kontenerze, który nie obsługuje IPointerInactive interfejsu, musisz mieć pilota, zawsze aktywna, gdy widoczne, co oznacza formantu powinna zawierać OLEMISC_ACTIVATEWHENVISIBLE Flaga spośród miscellaneous flag.Jednak aby zapobiec tej flagi z wchodzące w życie w pojemniku, który 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 MFC ActiveX: optymalizacja