MFC HANDLE Tablosu İle İlgili İşlemler
Bilindiği gibi her CWnd nesnesi için eğer bu nesneyle bir pencere yaratılmışsa MFC’nin global handle tablosunda bir giriş vardır. Ancak bazen özellikle API düzeyinde yapılan işlemler sırasında bir pencerenin hWnd handle değeri bilindiğinde buna karşı gelen CWnd nesne adresi elde edilmek istenir. MFC handle tablosu hash tablosu biçiminde düzenlenmiştir. Global handle tabloları kalıcı ve geçici olmak üzere iki tanedir. Normal olarak pencere yaratıldığında kalıcı handle tablosu kullanılır. Geçici handle tablosu birkaç durumda kullanılmaktadır. Bu durumdan ileride bahsedilecektir. Geçici handle tablosuna ilişkin bir CWnd adresi saklanarak uzun süre kullanılmamaktadır. Çünkü MFC idle process işleminde geçici tablodaki gereksiz girişleri silmektedir.
Bir hWnd handle değeri biliniyorsa buna ilişkin CWnd nesnesinin adresi CWnd::FromHandle ve CWnd::FromHandlePermanent statik üye fonksiyonları ile elde edilebilir. Bu fonksiyonlar kalıcı ve geçici handle tablolarına bakarak hWnd ile ilişkili CWnd nesne adresini verirler.
static CWnd *CWnd::FromHandle(HWND hWnd);
static CWnd *CWnd::FromHandlePermanent(HWND hWnd);
FromHandle fonksiyonu parametresiyle belirtilen handle’a ilişkin CWnd nesne adresini tabloda arar. Eğer bulamazsa bir CWnd alanını dinamik olarak tahsis eder, geçici tabloda bir giriş oluşturur ve bu CWnd adresiyle geri döner. Tabii bu biçimde elde edilen CWnd adresinin uzun süre saklanmaması gerekir. Çünkü idle process işleminde tahsis edilen alan boşaltılarak geçici tablodan silinmektedir.
