Etkin durumdayken fare etkileşim sağlama
Denetimi hemen etkinleştirilmemişse, hala işlemek istediğiniz WM_SETCURSOR ve WM_MOUSEMOVE iletileri denetim penceresi yok kendi bulunsa bile. Bu etkinleştirerek gerçekleştirilebilir COleControl's uygulaması IPointerInactive arabirimini varsayılan olarak devre dışıdır. (Bkz: ActiveX sdk bu arabirim açıklaması.) Etkinleştirmek için pointerInactive tarafından döndürülen bayrakları kümesi bayrağı COleControl::GetControlFlags:
DWORD CMyAxOptCtrl::GetControlFlags()
{
DWORD dwFlags = COleControl::GetControlFlags();
...
// The control can receive mouse notifications when inactive.
dwFlags |= pointerInactive;
...
return dwFlags;
}
Seçerseniz bu bayrak eklemek için kodu otomatik olarak oluşturulur Fare işaretçisini bildirimleri, etkin üzerinde seçenek Denetim ayarları kumandanızla oluştururken, sayfa mfc ActiveX denetim Sihirbazı.
Zaman IPointerInactive arabirimi etkin kapsayıcı temsilciler WM_SETCURSOR ve WM_MOUSEMOVE , iletileri. COleControlın uygulaması IPointerInactive sonra uygun şekilde koordine fare ayarlama denetimini denetimin ileti harita üzerinden ileti gönderir. İleti eşleme ilgili girişleri ekleyerek iletilerin sıradan pencere iletilerinin gibi işleyebilir. Bu iletileri görmek için bilgisayarınızı işleyicileri kullanmaktan m_hWnd üye değişkeni (veya herhangi bir üye işlev kullanan) ilk değeri olmayan denetimi olmadan null.
ole sürükle ve bırak işlemi hedef olarak etkin bir denetim de isteyebilirsiniz. Bu denetimin pencere bırakma hedefi olarak kaydedilebilir, böylece kullanıcı bir nesne, üzerinde sürüklediğinde anda denetimi etkinleştirme gerektirir. Sürükleme sırasında gerçekleşmesi etkinleştirme neden için geçersiz kılma COleControl::GetActivationPolicyve POINTERINACTIVE_ACTIVATEONDRAG bayrak:
DWORD CMyAxOptCtrl::GetActivationPolicy()
{
return POINTERINACTIVE_ACTIVATEONDRAG;
}
Etkinleştirme IPointerInactive arabirimi genellikle anlamına gelir, denetimin her zaman fare iletileri işleyebilme yeteneği olmasını istediğiniz. Bu davranış desteklemeyen bir kapsayıcı almak için IPointerInactive arabirimi, denetimi her zaman görünür olduğunda, etkin olması gerekir yani denetimi içermelidir OLEMISC_ACTIVATEWHENVISIBLE arasında çeşitli bayraklarının bayrak. Ancak, bu bayrak dan önlemek için etkili bir kapsayıcıdaki alma destek IPointerInactive, de belirtmeniz OLEMISC_IGNOREACTIVATEWHENVISIBLE bayrak:
static const DWORD BASED_CODE _dwMyOleMisc =
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_IGNOREACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST |
OLEMISC_INSIDEOUT |
OLEMISC_CANTLINKINSIDE |
OLEMISC_RECOMPOSEONRESIZE;