Aracılığıyla paylaş


Devre Dışı İken Fare Etkileşimi Sağlama

Denetiminiz hemen etkinleştirilmemişse, denetimin kendi penceresi olmasa bile WM_SETCURSOR ve WM_MOUSEMOVE iletileri işlemesini isteyebilirsiniz. Bu, 'nin arabiriminin IPointerInactive varsayılan olarak devre dışı bırakılan uygulamasını etkinleştirerek COleControlgerçekleştirilebilir. (Bkz.Bu arabirimin açıklaması için ActiveX SDK'sı.) Etkinleştirmek için, COleControl::GetControlFlags tarafından döndürülen bayrak kümesine pointerInactive bayrağını ekleyin:

DWORD CMyAxOptCtrl::GetControlFlags()
{
   DWORD dwFlags = COleControl::GetControlFlags();
// The control can receive mouse notifications when inactive.
dwFlags |= pointerInactive;
return dwFlags;
}

Denetiminizi MFC ActiveX Denetim Sihirbazı ile oluştururken Denetim Ayarlar sayfasında Fare İşaretçisi Etkin Değilken Bildirimleri seçeneğini belirtirseniz, bu bayrağı içerecek kod otomatik olarak oluşturulur.

IPointerInactive Arabirim etkinleştirildiğinde, kapsayıcı WM_SETCURSOR ve iletileri ona WM_MOUSEMOVE. COleControlIPointerInactive uygulaması, fare koordinatlarını uygun şekilde ayarladıktan sonra iletileri denetiminizin ileti haritası üzerinden dağıtıyor. İleti eşlemesine karşılık gelen girişleri ekleyerek iletileri normal pencere iletileri gibi işleyebilirsiniz. Bu iletilerin işleyicilerinde, önce değerinin NULL olmadığını denetlemeden m_hWnd üye değişkenini (veya bunu kullanan herhangi bir üye işlevini) kullanmaktan kaçının.

Etkin olmayan bir denetimin ole sürükle ve bırak işleminin hedefi olmasını da isteyebilirsiniz. Bunun için, kullanıcı nesnenin üzerine sürüklediği anda denetimin etkinleştirilmesi gerekir, böylece denetimin penceresi bırakma hedefi olarak kaydedilebilir. Sürükleme sırasında etkinleştirmenin gerçekleşmesine neden olmak için COleControl::GetActivationPolicy'yi geçersiz kılın ve POINTERINACTIVE_ACTIVATEONDRAG bayrağını döndürin:

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

Arabirimi etkinleştirmek IPointerInactive genellikle denetimin fare iletilerini her zaman işleyebilmesini istediğiniz anlamına gelir. Arabirimi desteklemeyen IPointerInactive bir kapsayıcıda bu davranışı elde etmek için, denetiminizin görünür olduğunda her zaman etkinleştirilmiş olması gerekir; bu da denetimin çeşitli bayraklar arasında OLEMISC_ACTIVATEWHENVISIBLE bayrağı içermesi gerektiği anlamına gelir. Ancak, bu bayrağın destekleyen IPointerInactivebir kapsayıcıda etkili olmasını önlemek için OLEMISC_IGNOREACTIVATEWHENVISIBLE bayrağını da belirtebilirsiniz:

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

Ayrıca bkz.

MFC ActiveX Denetimleri: İyileştirme