Aracılığıyla paylaş


Devre DışıYken Fare Etkileşimi Sağlama

Uyarı

Microsoft Foundation Sınıfları (MFC) kitaplığı desteklenmeye devam ediyor. Ancak artık özellik eklemeyeceğiz veya belgeleri güncelleştirmeyeceğiz.

Denetiminiz hemen etkinleştirilmemişse, denetimin kendi penceresi olmasa bile WM_SETCURSOR ve WM_MOUSEMOVE iletileri işlemesini isteyebilirsiniz. Bu, varsayılan olarak devre dışı bırakılmış olan COleControl arabiriminin uygulamasının IPointerInactive tarafından etkinleştirilmesiyle gerçekleştirilebilir. (Bu arabirimin açıklaması için bkz . 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 arabirimi etkinleştirildiğinde, kapsayıcı WM_SETCURSOR ve WM_MOUSEMOVE iletilerini ona devreder. COleControl IPointerInactive 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 onu 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ı bir nesneyi onun üzerine sürüklerken denetimin etkinleştirilmesi gerekir, böylece denetimin penceresi bir bırakılma 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 IPointerInactive etkinleştirmek, genellikle denetimin fare mesajlarını 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 IPointerInactive destekleyen bir 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 bakınız

MFC ActiveX Denetimleri: İyileştirme