Aracılığıyla paylaş


Penceresiz etkinleştirme sağlama

Pencere oluşturma kodunu (yani herşeyi aradığınızda, olacağını CreateWindow'u) yürütmek maliyetli olabilir. Tutar denetimi bir ekran pencere, pencere iletilerini yönetmek vardır. Bu nedenle penceresiz denetimler denetimleri windows ile daha hızlı.

Başka bir avantajı penceresiz denetimlerin pencereli denetimlerinden farklı olarak, penceresiz denetimleri saydam boyama ve dikdörtgen olmayan ekran bölgeleri, desteklememesidir. Saydam bir denetimin yaygın bir örnek, saydam bir arka plan ile metin denetimidir. Denetimleri boyar metin, arka plan, ancak böylece ne olursa olsun altındaki metin üzerinden gösterilir. Yeni formlar genellikle oklar gibi dikdörtgen olmayan denetimleri kullanın ve düğmeleri yuvarlak olun.

Genellikle Denetim pencere kendi gerekmez ve pencere Hizmetler kapsayıcısının kapsayıcı nesneleri penceresiz desteklemek için yazılmış, bunun yerine kullanabilirsiniz. Geriye dönük uyumlu eski kap penceresiz denetimleridir. Penceresiz denetimleri desteklemek üzere yazılmış değil, eski kaplarında etkin olduğunda bir pencere penceresiz denetimleri oluşturun.

Penceresiz denetimleri, kendi windows olmadığı için (olan bir pencere) kapsayıcı aksi denetimin kendi pencere tarafından sağlanmış olan hizmetleri sağlanmasından sorumludur. Örneğin, denetimi klavye odağını sorgulamak, fare yakalama veya aygıt içeriğini almak gerekiyorsa, bu işlemler konteyner tarafından yönetilir. Kapsayıcı uygun penceresiz denetimin penceresi gönderilen kullanıcı girdi iletileri yönlendiren kullanarak IOleInPlaceObjectWindowless arabirimi. (Bkz: ActiveX sdk bu arabirim açıklaması.) COleControl bu konteyner Hizmetleri üye işlevleri çağırmak.

Penceresiz etkinleştirme denetimi yapmak için windowlessActivate tarafından döndürülen bayrakları kümesi bayrağı COleControl::GetControlFlags. Örne?in:

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


...


// The control can activate without creating a window.
dwFlags |= windowlessActivate;


...


   return dwFlags;
}

Seçerseniz bu bayrak eklemek için kodu otomatik olarak oluşturulan penceresiz etkinleştirme üzerinde seçenek Denetim ayarları mfc ActiveX denetim Sihirbazı sayfası.

Penceresiz etkinleştirme etkin olduğunda, kapsayıcı denetimin giriş iletileri temsilci IOleInPlaceObjectWindowless arabirimi. COleControlKullanıcının bu arabirimi uygulaması fare ayarlama uygun şekilde koordine sonra denetimin ileti harita üzerinden ileti gönderir. İleti eşleme ilgili girişleri ekleyerek iletilerin sıradan pencere iletilerini 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.

COleControlFare yakalama, klavye odağını, kaydırma ve dahil pencere hizmetlerinden uygun konteyner çağırmak üye işlevleri sağlar:

Penceresiz denetimlerde daima COleControl , ilgili üye işlevleri CWnd üye işlevler veya Win32 API işlevlerini ilgili.

Penceresiz bir denetim ole sürükle ve bırak işlemi hedef olmasını isteyebilirsiniz. Normalde, bu denetimin pencere bırakma hedefi olarak kaydedilmesi gerekir. Denetim kendi penceresi yok olduğundan, kapsayıcı kendi penceresinde bırakma hedefi olarak kullanır. Denetim uygulaması sağlar IDropTarget olduğu kapsayıcı temsilci çağrıları uygun bir zamanda arabirimi. Bu arabirim için kapsayıcı göstermek için geçersiz kılmak COleControl::GetWindowlessDropTarget. Örne?in:

IDropTarget* CMyAxOptCtrl::GetWindowlessDropTarget()
{
   m_DropTarget.m_xDropTarget.AddRef();
   return &m_DropTarget.m_xDropTarget;
}

Ayrıca bkz.

Kavramlar

mfc ActiveX denetimleri: en iyileştirme