TN001: Pencere sınıf kaydı

Bu Not Microsoft Windows tarafından gerekli özel wndclasses kayıt mfc yordamları açıklar. wndclass öznitelikleri mfc tarafından kullanılır ve Windows tartışılır.

Sorunu

Bir hwnd Windows gibi bir CWnd nesnesi özniteliklerinin iki yerde depolanır: window nesnesi ve wndclass. Bir wndclass bir c++ sınıf farklıdır. wndclass adı lpszClassName parametresi CWnd::Create ve CFrameWnd::Create gibi genel pencere oluşturma işlevleri geçirilir.

Bu wndclass bir dört yol kayıtlı olmalıdır:

WNDCLASSes ve mfc

wndclass yapısı, bir pencere sınıfı tanımlayan çeşitli alanlarda oluşur. Alanlar ve mfc uygulamada nasıl kullanıldıkları aşağıda.

Stil Pencere stili: aşağıya bakın
LpfnWndProc pencere proc,-meli var olmak AfxWndProc
CbClsExtra kullanılan (sıfır olmalıdır)
CbWndExtra kullanılan (sıfır olmalıdır)
HINSTANCE otomatik olarak AfxGetInstanceHandle ile dolu
HIcon çerçeve pencereleri, simgesi aşağıda
HCursor fareyi pencere üzerinde ne zaman için imleci aşağıda
HbrBackground arka plan rengi, aşağıya bakın
LpszMenuName kullanılan (null olması gerekir)
LpszClassName sınıf adı, aşağıya bakın

WNDCLASSes sağlanan

Mfc (prior to mfc 4.0) önceki sürümlerde sağlanan önceden tanımlanmış pencere sınıfları bir dizi vardı. Bu pencere sınıfları (mfc için birden çok sürümünü tek adres alanında yüklenen) sürüm yanı sıra mfc uygulamaları ve ole Denetimleri mfc DLL'leri kullanabilir aslında ilgili endişeleri ile ilgili teknik sorunlar nedeniyle artık varsayılan olarak sağlanır.

Aşağıdaki başvuru, bunlar önceden wndclasses sağlanan kullanan kod geçirmek için sağlanmıştır. Uygulamalar bu sınıflar yerine AfxRegisterWndClass (uygun parametrelerle) kullanmalısınız.

Aşağıdaki sınıfları ve öznitelikleri gösterir:

Uygulama belirtilen kaynak (örneğin, AFX_IDI_STD_FRAME) ID kaynak sağlarsa, mfc kaynağı kullanır. Aksi halde varsayılan kaynak kullanılır. Simgesi, standart uygulama simgesi kullanılır ve standart imleç imleci için kullanılır.

Tek belge türleriyle (ana uygulama için bir simge, ikonik belge/MDIChild windows diğer simgesi) MDI uygulamaları destekleyen iki simge vardır. Farklı simgeleri içeren birden çok belge türleri için ek wndclasses kayıt veya CFrameWnd::LoadFrame işlevi kullanmak gerekir.

CFrameWnd::LoadFrame otomatik olarak standart "AfxFrameOrView" özniteliklerini kullanarak ama LoadFrame ilk parametre olarak belirttiğiniz simgesi kimliği kullanarak bir wndclass kaydeder.

MDIFrameWnd istemci alanı "MDICLIENT" pencere tarafından tamamen kaplıdır çünkü arka plan renk değerlerini ve imleç MDIFrameWnd için kullanılmaz. Microsoft teşvik değil "MDICLIENT" pencere sınıflara kadar kullanmak standart renkleri ve imleç türleri mümkün olduğunda.

Denetimleri sınıflara

Sen alt ya da üst sınıf bir Windows (örneğin, CButton) sonra sınıf otomatik olarak kontrol denetleyen Windows uygulamasında sağlanan wndclass öznitelikleri alır.

AfxRegisterWndClass işlevi

Mfc yardımcı rutin bir pencere sınıfı kaydettirmek için sağlar. Öznitelikler (pencere sınıfı stili, imleç, arka fırça ve simge) kümesi verilen, sentetik bir ad oluşturulur ve sonuç pencere sınıfı kayıtlıdır. Örneğin,

const char * AfxRegisterWndClass (UINT nClassStyle, hcursor hCursor, hbrush hbrBackground, HICON hIcon)

Bu işlev üretilen kayıtlı pencere sınıf adı geçici bir dize döndürür. Sınıf kitaplığı başvuru daha fazla bilgi için bkz:.

Döndürülen dize kadar gelen bir sonraki çağrı için AfxRegisterWndClassgeçerli olan bir statik dize arabelleğindeki geçici bir işaretçidir. Bu dize civarında tutmak istiyorsanız, CString değişkende depolar. Örneğin,

CStrin&g strWndClass AfxRegisterWndClass (cs_dblclk,...); =
...
CWnd * pWnd = new CWnd;
pWnd-gt;(StrWndClass,...) oluşturun;

Pencere sınıfı (hatalı parametre nedeniyle, veya Windows bellek) kaydedemedi, AfxRegisterWndClass bir CResourceException oluşturun.

RegisterClass ve AfxRegisterClass işlevleri

AfxRegisterWndClass ne sağlar daha sofistike bir şeyi istiyorsanız, Windows API RegisterClass veya AfxRegisterClassmfc işlevini çağırabilir. CWnd, CFrameWnd ve CMDIChildWndoluşturma işlevleri pencere sınıfı lpszClassName dize adını ilk parametre olarak alır. Herhangi bir pencere sınıf adı kullanılabilir, ne olursa olsun tescil edildi .

AfxRegisterClass (veya AfxRegisterWndClass) Win32 dll kullanmanız önemlidir. Win32 otomatik olarak ne zaman dll sonlandırılmadan bu açıkça yapılmalıdır şekilde bir dll tarafından kayıtlı sınıflar kaydını değil. RegisterClass yerine AfxRegisterClass kullanarak bu otomatik olarak sizin için yapılır. AfxRegisterClass dll tarafından kayıtlı benzersiz sınıflarının listesini tutar ve dll sonlandırıldığında otomatik olarak sonra kaydını. RegisterClass bir dll kullanılırken, dll ( DllMain işlevi içinde) sonlandırılır zaman tüm sınıfları kayıtsız sigorta gerekir. Aksi takdirde, RegisterClass dll başka bir istemci uygulama tarafından kullanıldığında beklenmedik biçimde başarısız olmasına neden olabilir.

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

Index