TN003: Eşleme, Windows nesnelerini işleme

Bu notu mfc açıklar Windows eşlemesi destekleyen yordamları nesne tanıtıcıları c++ nesneleri.

Sorunu

Windows nesneleri normal s idaretarafından temsil edilir. mfc sınıflar, Windows nesne tanıtıcıları c++ nesneleri ile sarın. mfc sınıf kitaplığı tanıtıcı kaydırma fonksiyonları Windows nesneyi belirli kulplu kaydırma c++ nesneyi bulmak için bir yol sağlar. Var kere ne zaman bir Windows nesnenin bir c++ wrapper nesnesi, ancak ve saatlerde c++ sarıcı hareket için oluşturulan geçici bir nesne yok.

İşleyici eşlemeleri kullanma Windows nesneler:

Tanıtıcı bu nesneleri birine verildiğinde, mfc nesne tanıtıcı FromHandledurağan üye işlevini çağırarak saran bulabilirsiniz. Örneğin, bir hwnd hWnd adlı:

CWnd::FromHandle(hWnd)

hWndsaran CWnd için bir işaretçi döndürür. Bu hWnd belirli wrapper nesnesi yoksa, geçici CWnd hWndsarmak için oluşturulur. Bu geçerli bir c++ nesnesi herhangi bir ele almak mümkün kılar.

Bir kez sen-si olmak bir wrapper nesnesi, tutamacını ortak üye değişken üzerinden ulaşabilirsiniz. Bir CWnddurumunda, bu nesne için hwnd m_hWnd içerir.

Mfc nesneleri işleme iliştirme

Yeni oluşturulan kolu-wrapper nesnesi ve tanıtıcı bir Windows nesnesine alındığında, Attacharayarak iki ilişkilendirebilirsiniz. Örneğin:

CWnd myWnd;
myWnd.Attach(hWnd)

Bu myWnd ve hWndilişkilendirme kalıcı Haritayı bir giriş yapar. CWnd::FromHandle(hWnd) çağrı, şimdi myWndiçin bir işaretçi döndürür. MyWnd silindiğinde, yıkıcı otomatik olarak hWnd Windows DestroyWindow işlevini çağırarak yok eder. Bu istenmiyorsa, hWnd (normalde hangi myWnd kapsamında bırakarak tanımlanmıştır) myWnd nesne yok önce myWnd müstakil gerekir. Detach üye işlev yapar.

myWnd.Detach()

Geçici nesneler hakkında daha fazla bilgi

Geçici nesneler, FromHandle zaten bir wrapper nesnesi olmayan bir tanıtıcı verilen her oluşturulur. Bu geçici nesneleri kendi tanıtıcıdan müstakil ve DeleteTempMap işlevleri tarafından silinir. CWinThread varsayılan ONIDLE işleme otomatik olarak geçici İşleyici Eşlemeleri destekleyen her sınıf için DeleteTempMap çağırır. Buna göre geçici nesnenin Windows ileti-döngü bekleme sırasında silinecektir geçici bir nesne işaretçisini işaretçiyi nereden alındığını, gönderilen çıkış işlevi açısından geçerli olacaktır kabul edilemez.

Sarıcı nesneleri ve birden çok iş parçacığı

Geçici ve kalıcı nesneler, her konu için ayrı ayrı tutulur. Yani, bir iş parçacığı başka bir iş parçacığı c++ sarıcı nesneleri, geçici ya da kalıcı olmasına bakmadan erişemez. Yukarıda belirtildiği gibi hangi geçici o nesnenin ait iş parçacığı ONIDLE girdiğinde geçici nesneler silinir.

Bu nesneler bir iş parçacığından diğerine, her zaman gönderme geçmek onların yerel idare olarak yazın. Bir iş parçacığından diğerine bir c++ wrapper nesnesi geçirmeden genellikle beklenmeyen sonuçlar neden olur.

Teknik notlar numarasına göre |nbsp; Teknik notlar kategorisine göre

Index