Aracılığıyla paylaş


TN001: Pencere sınıf kaydı

Bu not özel kayıt mfc yordamları açıklar wndclasses Microsoft Windows tarafından gerekli. Özel WNDCLASS mfc ve Windows tarafından kullanılan öznitelikleri açıklanmıştır.

Sorunu

Özniteliklerinin bir CWnd gibi nesne bir HWND Windows'da işlemek, iki ayrı yerde saklanır: window nesnesi ve WNDCLASS. Adı WNDCLASS genel pencere oluşturma işlevleri gibi geçirilen CWnd::Create ve CFrameWnd::Create , lpszClassName parametresi.

Bu WNDCLASS biri dört anlamına gelir kaydedilmesi gerekir:

  • Dolaylı olarak sağlanan mfc kullanılarak WNDCLASS.

  • Dolaylı olarak (veya başka bir denetim) Windows denetimi sınıflara göre.

  • Açıkça mfc çağırarak AfxRegisterWndClass veya AfxRegisterClass.

  • Açıkça Windows yordamını çağırarak RegisterClass.

wndclass alanları

WNDCLASS Pencere sınıfı açıklayan çeşitli alanlarının yapısı oluşur. Aşağıdaki tablo alanlarını gösterir ve mfc uygulamada nasıl kullanıldıkları belirtir:

Alan

Description

lpfnWndProc

Pencere proc olmalıdır birAfxWndProc

cbClsExtra

used (sıfır olmalıdır)

cbWndExtra

used (sıfır olmalıdır)

hInstance

ile otomatik olarak doldurulur.AfxGetInstanceHandle

hIcon

Bkz: çerçeve windows simgesi aşağıda

hCursor

Fare pencere üzerinde olduğunda için imleci bakın aşağıda

hbrBackground

arka plan rengi, aşağıya bakın

lpszMenuName

used (null olmalıdır)

lpszClassName

Sınıf adı, aşağıya bakın

WNDCLASSes sağlanan

mfc (mfc 4.0) önce önceki sürümlerinde sağlanan önceden tanımlanmış birkaç pencere sınıfı. Bu pencere sınıflarına artık varsayılan olarak sağlanır. Uygulamaları kullanması gereken AfxRegisterWndClass uygun parametrelerle birlikte.

Uygulama kaynağı belirtilen kaynak kimliği (örneğin, AFX_IDI_STD_FRAME) ile sağlıyorsa, mfc bu kaynağı kullanır. Aksi halde varsayılan kaynak kullanır. Simge için standart uygulama simgesi kullanılır ve standart ok İmleç imleci için kullanılır.

İki simgeler tek belge türleriyle MDI uygulamaları destekler: ana uygulama için bir simge, diğer araçlarına simge şeklinde belge veya MDIChild windows simgesi. Farklı simgeleri içeren birden çok belge türleri için ek kaydetmeniz gerekir WNDCLASSes veya kullanım CFrameWnd::LoadFrame işlevi.

CFrameWnd::LoadFramekayıt bir WNDCLASS ilk parametre ve aşağıdaki standart öznitelikleri belirlediğiniz simgeyi kimliği kullanarak:

  • sınıf stil: cs_dblclks | CS_HREDRAW | CS_VREDRAW;

  • simge AFX_IDI_STD_FRAME

  • Ok imleç

  • COLOR_WINDOW arka plan rengi

Arka plan rengi ve imleci için değerleri CMDIFrameWnd bu yana istemci alanının kullanılmayan CMDIFrameWnd tarafından tamamen kapsadığı MDICLIENT pencere. Microsoft alt sınıflara ayırma teşvik değil MDICLIENT pencere böylece standart renkleri ve imleç türleri mümkün olduğunda kullanın.

Alt sınıflara ayırma ve Superclassing denetimleri

Denetimi için alt veya üst bir Windows (örneğin, CButton) sınıfınızın otomatik olarak alır, sonra WNDCLASS denetleyen Windows uygulamasında sağlanan öznitelikleri.

AfxRegisterWndClass işlevi

mfc pencere sınıfı kaydetme için yardımcı işlevi sağlar. (Pencere sınıfı stili, imlecin arka fırça ve simge) öznitelikler kümesi verilen, sentetik bir ad oluşturulur ve sonuç pencere sınıfı kaydedilir. Örnek:

const char* AfxRegisterWndClass(UINT nClassStyle, HCURSOR hCursor, HBRUSH hbrBackground, HICON hIcon);

Bu işlev, oluşturulan kayıtlı pencere sınıf adı, geçici bir dize döndürür. Bu işlevi hakkında daha fazla bilgi için bkz: AfxRegisterWndClass.

Döndürülen dize statik dizesi arabelleği geçici bir işaretçidir. Sonraki aramanın kadar geçerli olduğu AfxRegisterWndClass. Bu dize etrafında tutmak istiyorsanız, içinde saklamak bir CString Bu örnekte olduğu gibi değişken:

CString strWndClass = AfxRegisterWndClass(CS_DBLCLK, ...);
...
CWnd* pWnd = new CWnd;
pWnd->Create(strWndClass, ...);
...

AfxRegisterWndClassyaratacak bir CResourceException pencere sınıfı (hatalı parametre nedeniyle, ya Windows bellek yetersiz) kaydedemedi.

RegisterClass ve AfxRegisterClass işlevleri

Yapmak isterseniz bir şey daha ne gelişmiştir AfxRegisterWndClass sağlayan Windows API çağrısı RegisterClass veya mfc işlev AfxRegisterClass. CWnd, CFrameWnd ve CMDIChildWndCreate işlevleri ele bir lpszClassName pencere sınıfı ilk parametre olarak dize adı. Kaydetmek için kullanılan yöntem ne olursa olsun, herhangi bir kayıtlı pencere sınıf adı kullanabilirsiniz.

Kullanılması önemlidir AfxRegisterClass (veya AfxRegisterWndClass), bir Win32 dll. Win32 dll sona açıkça sınıfları kaydını gerekir böylece bir dll dosyası kayıtlı sınıflar kaydını otomatik olarak değil. Kullanarak AfxRegisterClass yerine RegisterClass bunu sizin için otomatik olarak gerçekleştirilir. AfxRegisterClassdll tarafından kaydedilen ve dll sonlandırıldığında otomatik olarak bunları kaydını benzersiz sınıfları listesi tutar. Kullandığınızda RegisterClass bir dll dosyası dll kesildiğinde tüm sınıflar kayıtlı olduğundan emin olmalısınız (içinde sizin DllMain işlevi). Aksi takdirde neden olabilecek RegisterClass başka bir istemci uygulaması dll kullanmaya çalıştığında beklenmedik şekilde başarısız.

Ayrıca bkz.

Diğer Kaynaklar

Teknik notlar numarasına göre

Kategoriye göre teknik notlar