Provádění okno s CWindowImpl
Provádět okno odvození třídy z CWindowImpl .V odvozené třídě Deklarujte mapa zprávy a funkce zpracování zpráv.Nyní můžete své třídy třemi různými způsoby:
Vytvoření nové třídy Windows na základě okna
Existující třídy Windows supertřída
Existující okno podtřídy
Vytváření okna podle nové třídy Windows
CWindowImplobsahuje DECLARE_WND_CLASS makro deklarovat třídu informace systému Windows.Implementuje toto makro GetWndClassInfo funkce, která používá CWndClassInfo k definování informací o nové třídy Windows.Při CWindowImpl::Create se nazývá tohoto systému Windows je registrována třída a vytváření nového okna.
[!POZNÁMKA]
CWindowImplpředává NULL se DECLARE_WND_CLASS makro, což znamená ATL bude generovat název třídy systému Windows.Zadat vlastní název, předat řetězec DECLARE_WND_CLASS ve vaší CWindowImpl -odvozené třídy.
Příklad
Následuje příklad třídy, která implementuje okna podle nové třídy Windows:
class CMyCustomWnd : public CWindowImpl<CMyCustomWnd>
{
public:
// Optionally specify name of the new Windows class
DECLARE_WND_CLASS(_T("MyName"))
// If this macro is not specified in your
// class, ATL will generate a class name
BEGIN_MSG_MAP(CMyCustomWnd)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
// Do some painting code
return 0;
}
};
Vytvořit okno, vytvořte instanci CMyWindow a potom volat vytvořit metoda.
[!POZNÁMKA]
Přepsat výchozí informace třídy Windows, provede GetWndClassInfo metoda odvozené třídy nastavením CWndClassInfo členům příslušné hodnoty.
Následující příklad třídy je tato standardní úpravy nadřazených tříd třídy:
class CMyEdit : public CWindowImpl<CMyEdit>
{
public:
// "Edit" is the name of the standard Windows class.
// "MyEdit" is the name of the new Windows class
// that will be based on the Edit class.
DECLARE_WND_SUPERCLASS(_T("MyEdit"), _T("Edit"))
BEGIN_MSG_MAP(CMyEdit)
MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()
LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
// Do some character handling code
return 0;
}
};
Vytvořit superclassed okna upravit, vytvořit instanci CMyEdit a potom volat vytvořit metoda.
Existující třídy Windows superclassing
DECLARE_WND_SUPERCLASS makro umožňuje vytvořit okno této nadřazené třídy existující Windows třídy.Toto makro zadejte vaše CWindowImpl -odvozené třídy.Podobně jako ostatní okna ATL zprávy zpracovávány mapy zprávy.
Při použití DECLARE_WND_SUPERCLASS , bude registrován nové třídy Windows.Tato nová třída bude stejný jako existující třídy, ale nahradí procedury okna s CWindowImpl::WindowProc (nebo funkcí, která přepíše tato metoda).
Subclassing existujícího okna
Podtřídu existující okno odvození třídy z CWindowImpl a deklarovat mapy zprávy podle dvou předchozích případech.Upozorňujeme však, protože se již existující okno podtřídy není zadat jakékoli informace o systému Windows třídy.
Místo volání vytvořit, volání SubclassWindow a předat popisovače na existující okno chcete podtřídy.Jakmile rozčlenění okna bude používat CWindowImpl::WindowProc (nebo funkce, přepíše tato metoda) přímého zprávy zpráva mapy.Odpojit okno subclassed z vašeho objektu, zavolejte na UnsubclassWindow .Potom bude obnoveno původní okno postupu v okně.