Sdílet prostřednictvím


TN001: Registrace tříd oken

Tato poznámka popisuje rutiny knihovny MFC, které registrují zvláštním WNDCLASSNo vyžadované Microsoft Windows.Zvláštní WNDCLASS jsou uvedeny atributy, které používají knihovnu MFC a systému Windows.

Problém

Atributy CWnd objektu, jako HWND zpracování v systému Windows, jsou uložena na dvou místech: objektu okna a WNDCLASS.Název WNDCLASS je předán funkcím vytváření Obecné okna jako CWnd::Create a CFrameWnd::Create v lpszClassName parametr.

To WNDCLASS je nutné registrovat přes čtyři prostředky:

  • Implicitně pomocí MFC, podle WNDCLASS.

  • Implicitně pomocí subclassing ovládací prvky pro Windows (nebo jiného ovládacího prvku).

  • Explicitně voláním knihovny MFC AfxRegisterWndClass nebo AfxRegisterClass.

  • Explicitně voláním rutina Windows RegisterClass.

Pole WNDCLASS

WNDCLASS Konstrukce se skládá z různých polí, které popisují třídu okna.Následující tabulka uvádí pole a určuje, jak jsou použity v aplikaci knihovny MFC:

Pole

Popis

lpfnWndProc

okno procedury musí býtAfxWndProc

cbClsExtra

Nepoužito (musí být nula)

cbWndExtra

Nepoužito (musí být nula)

hInstance

automaticky vyplněnoAfxGetInstanceHandle

hIcon

Níže naleznete ikonu k rámečkům oken

hCursor

kurzor, když je ukazatel myši umístěn nad okna, viz níže

hbrBackground

Barva pozadí, viz níže

lpszMenuName

Nepoužito (musí být NULL.)

lpszClassName

Název třídy, viz níže

Podle WNDCLASSes

Starší verze knihovny MFC (před MFC 4.0), k dispozici několik předdefinovaných tříd okna.Tyto třídy okna jsou již k dispozici ve výchozím nastavení.Aplikace by měly používat AfxRegisterWndClass s příslušnými parametry.

Pokud aplikace poskytuje prostředek s ID zadaný zdroj (například AFX_IDI_STD_FRAME), knihovna MFC použije tento prostředek.V opačném případě bude používat výchozí prostředek.Ikony bude použita standardní aplikace ikona a kurzor, je použita standardní šipka kurzoru.

Dvě ikony Podpora MDI aplikací s typy jednotného dokladu: jedna ikona pro hlavní aplikaci, ikona pro windows ikony dokumentu/MDIChild.Pro více typů dokumentu s různými ikonami, musíte se zaregistrovat Další WNDCLASSes nebo použití CFrameWnd::LoadFrame funkce.

CFrameWnd::LoadFrameZaregistrujte se WNDCLASS pomocí určíte jako první parametr a následující standardní atributy ID ikony:

  • Třída stylu: CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;

  • Ikona AFX_IDI_STD_FRAME

  • šipka kurzoru

  • Barva pozadí COLOR_WINDOW

Hodnoty pro barvu pozadí a kurzor CMDIFrameWnd nejsou používány od klientské oblasti CMDIFrameWnd byl zcela pokryt MDICLIENT okno.Společnost Microsoft nedoporučuje vytváření podtříd MDICLIENT okno, takže použijte standardní barvy a typy kurzor, pokud je to možné.

Vytváření podtříd a ovládací prvky Superclassing

Pokud je podtřída nebo nadřazené třídy Windows ovládací prvek (například CButton) a vaše třída automaticky získá WNDCLASS atributy v implementaci systému Windows tohoto ovládacího prvku.

Funkce AfxRegisterWndClass

Knihovna MFC poskytuje pomocnou funkci registrace třídy okna.Udělit sadu atributů (styl třídy okna, kurzor, štětec pozadí a ikona), syntetické název je generován a výsledné třídy okna je registrována.Příklad:

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

Tato funkce vrací řetězec dočasné název třídy vygenerované registrované okna.Další informace o této funkci naleznete v tématu AfxRegisterWndClass.

Vrácený řetězec je dočasné ukazatel do vyrovnávací paměti statické řetězec.Je platné až do další volání AfxRegisterWndClass.Pokud chcete zachovat tento řetězec kolem, skladuje se v CString proměnnou, jako v následujícím příkladu:

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

AfxRegisterWndClassVyvolá CResourceException -li třídu okna Registrace se nezdařila (z důvodu chybné parametry, nebo nedostatek paměti v systému Windows).

RegisterClass a funkce AfxRegisterClass

Pokud chcete udělat něco více důmyslnější než co AfxRegisterWndClass poskytuje, mohou volat rozhraní API systému Windows RegisterClass funkce knihovny MFC nebo AfxRegisterClass.CWnd, CFrameWnd a CMDIChildWndCreate funkcí lpszClassName název třídy okna jako první parametr řetězec. Můžete použít libovolný název třídy registrované okna, bez ohledu na metodu, kterou jste použili při registraci.

Je důležité použít AfxRegisterClass (nebo AfxRegisterWndClass) v knihovně DLL v systému Win32.Win32 není automaticky unregister třídy registrované knihovny DLL, musí explicitně unregister třídy při ukončení knihovny DLL.Pomocí AfxRegisterClass místo RegisterClass to je zpracována automaticky za vás.AfxRegisterClassudržuje seznam jedinečných třídy registrované knihovny DLL a bude automaticky zrušit registraci je při ukončení knihovny DLL.Při použití RegisterClass v knihovně DLL, musíte zajistit, že všechny třídy neregistrované při ukončení knihovny DLL (ve své DllMain funkce).Nedodržení tohoto postupu může způsobit RegisterClass neočekávané selhání při jiné klientské aplikace pokusí použít knihovny DLL.

Viz také

Další zdroje

Technické poznámky podle čísel

Technické poznámky podle kategorií