Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Om kontrollen inte aktiveras omedelbart kanske du vill att den ska bearbeta WM_SETCURSOR och WM_MOUSEMOVE meddelanden, även om kontrollen inte har något eget fönster. Detta kan åstadkommas genom att aktivera COleControlimplementeringen av IPointerInactive gränssnittet, som är inaktiverat som standard. (Se ActiveX SDK för en beskrivning av det här gränssnittet.) Aktivera den genom att ta med flaggan pointerInactive i uppsättningen flaggor som returneras av COleControl::GetControlFlags:
DWORD CMyAxOptCtrl::GetControlFlags()
{
DWORD dwFlags = COleControl::GetControlFlags();
// The control can receive mouse notifications when inactive.
dwFlags |= pointerInactive;
return dwFlags;
}
Koden som ska inkludera den här flaggan genereras automatiskt om du väljer alternativet Muspekarmeddelanden när den är inaktiv på sidan Kontrollinställningar när du skapar kontrollen med guiden MFC ActiveX-kontroll.
IPointerInactive När gränssnittet är aktiverat delegerar containern WM_SETCURSOR och WM_MOUSEMOVE meddelanden till det.
COleControlImplementeringen av IPointerInactive skickar meddelandena via kontrollens meddelandekarta efter att muskoordinaterna har justerats korrekt. Du kan bearbeta meddelanden precis som vanliga fönstermeddelanden genom att lägga till motsvarande poster i meddelandekartan. I dina hanterare för dessa meddelanden bör du undvika att använda m_hWnd medlemsvariabeln (eller någon medlemsfunktion som använder den) utan att först kontrollera att dess värde inte är NULL.
Du kanske också vill att en inaktiv kontroll ska vara målet för en OLE-dra-och-släpp-åtgärd. Detta kräver att kontrollen aktiveras när användaren drar ett objekt över det, så att kontrollens fönster kan registreras som ett släppmål. Om du vill att aktiveringen ska ske under ett drag åsidosätter du COleControl::GetActivationPolicy och returnerar flaggan POINTERINACTIVE_ACTIVATEONDRAG:
DWORD CMyAxOptCtrl::GetActivationPolicy()
{
return POINTERINACTIVE_ACTIVATEONDRAG;
}
IPointerInactive Att aktivera gränssnittet innebär vanligtvis att du vill att kontrollen ska kunna bearbeta musmeddelanden hela tiden. För att få det här beteendet i en container som inte stöder IPointerInactive gränssnittet måste du alltid aktivera kontrollen när den visas, vilket innebär att kontrollen ska innehålla flaggan OLEMISC_ACTIVATEWHENVISIBLE bland dess diverse flaggor. Men om du vill förhindra att den här flaggan börjar gälla i en container som stöder IPointerInactivekan du också ange flaggan OLEMISC_IGNOREACTIVATEWHENVISIBLE:
static const DWORD BASED_CODE _dwMyOleMisc =
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_IGNOREACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST |
OLEMISC_INSIDEOUT |
OLEMISC_CANTLINKINSIDE |
OLEMISC_RECOMPOSEONRESIZE;