Udostępnij za pośrednictwem


TN001: Rejestracja klas okno

Uwaga ta opisuje procedur MFC, które zarejestrować specjalne WNDCLASSes wymagane przez system Microsoft Windows.Szczególne WNDCLASS omówione są atrybuty używane MFC i systemu Windows.

Problem

Atrybuty CWnd obiektów, takich jak: HWND obsługi systemu Windows, są przechowywane w dwóch miejscach: obiekt window i WNDCLASS.Nazwa WNDCLASS jest przekazywana do funkcji tworzenia Ogólne okna, takich jak CWnd::Create i CFrameWnd::Create w lpszClassName parametru.

To WNDCLASS musi być zarejestrowany przez jeden z czterech oznacza:

  • Używając niejawnie MFC, pod warunkiem WNDCLASS.

  • Niejawnie przez tworzenie podklas sterowania systemu Windows (lub niektórych innych kontroli).

  • Jawnie, wywołując MFC AfxRegisterWndClass lub AfxRegisterClass.

  • Jawnie, wywołując rutynowych Windows RegisterClass.

Pola WNDCLASS

WNDCLASS Struktury składa się z różnych pól, które opisują klasy okna.W poniższej tabeli przedstawiono pola i określa, w jaki sposób są używane w aplikacji MFC:

Pole

Opis

lpfnWndProc

musi być proc oknaAfxWndProc

cbClsExtra

Nie używany (powinny być równe zero)

cbWndExtra

Nie używany (powinny być równe zero)

hInstance

automatycznie wypełnioneAfxGetInstanceHandle

hIcon

Ikona ramki systemu windows, zobacz poniżej

hCursor

kursor dla gdy kursor znajduje się nad okno, patrz poniżej

hbrBackground

kolor tła, zobacz poniżej

lpszMenuName

Nie używany (powinna być NULL)

lpszClassName

Nazwa klasy, patrz poniżej

Pod warunkiem WNDCLASSes

Wcześniejsze wersje MFC (przed MFC 4.0), pod warunkiem kilka wstępnie zdefiniowanych klas okna.Domyślnie dostępne są już te klasy okna.Aplikacje powinny używać AfxRegisterWndClass z odpowiednimi parametrami.

Jeśli aplikacja zawiera zasób o identyfikatorze określony zasób (na przykład AFX_IDI_STD_FRAME), MFC będzie używać tego zasobu.W przeciwnym razie będzie używać zasobu domyślnej.Ikony używana jest ikona aplikacji standardowych i kursora, używany jest standardowy kursor.

Dwie ikony obsługi aplikacji MDI z typami jednolitego dokumentu: jedną ikonę aplikacji głównej, inne ikona ikony dokumentu/MDIChild systemu windows.Dla wielu typów dokumentów z różnych ikon, należy zarejestrować dodatkowe WNDCLASSes lub wykorzystania CFrameWnd::LoadFrame funkcji.

CFrameWnd::LoadFramezarejestruje WNDCLASS przy użyciu Identyfikatora ikonę określić jako pierwszy parametr i następujące atrybuty standardowe:

  • Klasa styl: CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;

  • Ikona AFX_IDI_STD_FRAME

  • strzałki kursora

  • Kolor tła COLOR_WINDOW

Wartości dla koloru tła i kursor dla CMDIFrameWnd nie są używane od obszaru klienckiego CMDIFrameWnd jest całkowicie objęte MDICLIENT okna.Microsoft nie będzie zachęcać podklasy MDICLIENT okno tak używać standardowych kolorów i typy kursora, gdy jest to możliwe.

Tworzenie podklasy i formanty Superclassing

Jeżeli użytkownik podklasy lub superklasy systemu Windows (na przykład CButton), a następnie klasy automatycznie pobiera WNDCLASS atrybuty w realizacji systemu Windows tego formantu.

Funkcja AfxRegisterWndClass

MFC udostępnia funkcję Pomocnik rejestracji klasy okna.Biorąc pod uwagę zestaw atrybutów (styl klasy okna, kursor, Pędzel tła i ikona), syntetycznych nazwa jest generowana i klasy okna wynikowy jest zarejestrowany.Na przykład,

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

Ta funkcja zwraca ciąg tymczasowe generowanych okno zarejestrowane nazwy klasy.Aby uzyskać więcej informacji na temat tej funkcji, zobacz AfxRegisterWndClass.

Zwrócony ciąg jest tymczasowy wskaźnik do buforu ciągów statyczne.Jest ważne, do następne wywołanie AfxRegisterWndClass.Jeśli chcesz zachować ten ciąg wokół, przechowywać ją w CString zmiennej, jak w poniższym przykładzie:

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

AfxRegisterWndClasswygeneruje CResourceException Jeśli klasy okna nie można zarejestrować (z powodu złych parametrów, lub o braku pamięci systemu Windows).

RegisterClass i funkcji AfxRegisterClass

Jeżeli chcesz zrobić coś bardziej zaawansowane niż co AfxRegisterWndClass miejsce, można wywołać interfejsu API systemu Windows RegisterClass lub funkcja MFC AfxRegisterClass.CWnd, CFrameWnd i CMDIChildWndCreate podjąć funkcji lpszClassName ciąg nazwy klasy okna jako pierwszy parametr.Można użyć nazwy do klasy okno zarejestrowane, niezależnie od metody użytej do go zarejestrować.

Jest ważne, aby użyć AfxRegisterClass (lub AfxRegisterWndClass) w bibliotece DLL w Win32.Automatycznie Win32 nie wyrejestrować klas zarejestrowanych przez bibliotekę DLL, więc musi jawnie wyrejestrować klas, gdy biblioteka DLL jest zakończony.Za pomocą AfxRegisterClass zamiast RegisterClass jest obsługiwane automatycznie dla Ciebie.AfxRegisterClassutrzymuje listę unikatowych klas zarejestrowanych przez bibliotekę DLL i automatycznie będzie je wyrejestrować, gdy biblioteka DLL kończy działanie.Podczas używania RegisterClass w bibliotece DLL musi zapewnić wszystkie klasy są niezarejestrowanych, gdy biblioteka DLL jest zakończony (w sieci DllMain funkcji).Niewykonanie tego może spowodować RegisterClass nieoczekiwane niepowodzenie, gdy inna aplikacja klient próbuje użyć biblioteki DLL.

Zobacz też

Inne zasoby

Uwagi techniczne przez liczbę

Uwagi techniczne według kategorii