Udostępnij za pośrednictwem


Klasa CWindowImpl

Udostępnia metody tworzenia lub podklasowania okna.

Ważne

Tej klasy i jej składowych nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows.

Składnia

template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>

Parametry

T
Nowa klasa pochodząca z klasy CWindowImpl.

TBase
Klasa bazowa klasy. Domyślnie klasa bazowa to CWindow.

TWinTraits
Klasa cech, która definiuje style dla okna. Wartość domyślna to CControlWinTraits.

Elementy członkowskie

Metody publiczne

Nazwa/nazwisko opis
CWindowImpl::Create Tworzy okno.

Metody CWindowImplBaseT

Nazwa/nazwisko opis
DefWindowProc Zapewnia domyślne przetwarzanie komunikatów.
GetCurrentMessage Zwraca bieżący komunikat.
GetWindowProc Zwraca bieżącą procedurę okna.
OnFinalMessage Wywoływana po odebraniu ostatniego komunikatu (zazwyczaj WM_NCDESTROY).
PodklasaWindow Podklasy okna.
Anuluj podklasęWindow Przywraca wcześniej podklasowane okno.

Metody statyczne

Nazwa/nazwisko opis
GetWndClassInfo Zwraca statyczne wystąpienie CWndClassInfo, które zarządza informacjami o klasie okna.
WindowProc Przetwarza komunikaty wysyłane do okna.

Składowe danych

Nazwa/nazwisko opis
m_pfnSuperWindowProc Wskazuje oryginalną procedurę okna klasy okien.

Uwagi

Możesz użyć CWindowImpl polecenia , aby utworzyć okno lub podklasę istniejącego okna. CWindowImpl procedura okna używa mapy komunikatów do kierowania komunikatów do odpowiednich procedur obsługi.

CWindowImpl::Create Tworzy okno na podstawie informacji o klasie okien zarządzanych przez CWndClassInfo. CWindowImplzawiera makro DECLARE_WND_CLASS, co oznacza, że CWndClassInfo rejestruje nową klasę okien. Jeśli chcesz utworzyć superklasę istniejącej klasy okien, utwórz klasę z CWindowImpl i dołącz makro DECLARE_WND_SUPERCLASS . W takim przypadku rejestruje klasę okien opartą na istniejącej klasie, CWndClassInfo ale używa klasy CWindowImpl::WindowProc. Na przykład:

class ATL_NO_VTABLE CMyWindow :
   OtherInheritedClasses
   public CComControl<CMyWindow>
          // CComControl derives from CWindowImpl
{
public:
   // 1. The NULL parameter means ATL will generate a
   //    name for the superclass
   // 2. The "EDIT" parameter means the superclass is
   //    based on the standard Windows Edit box
   DECLARE_WND_SUPERCLASS(NULL, _T("EDIT"))

   // Remainder of class declaration omitted

Uwaga

Ponieważ CWndClassInfo zarządza informacjami tylko jednej klasy okien, każde okno utworzone za pomocą wystąpienia CWindowImpl jest oparte na tej samej klasie okien.

CWindowImpl Obsługuje również podklasę okien. Metoda SubclassWindow dołącza istniejące okno do CWindowImpl obiektu i zmienia procedurę okna na CWindowImpl::WindowProc. Każde wystąpienie CWindowImpl programu może podklasować inne okno.

Uwaga

W przypadku dowolnego CWindowImpl obiektu wywołaj metodę Create lub SubclassWindow. Nie należy wywoływać obu metod na tym samym obiekcie.

Oprócz CWindowImplusługi ATL udostępnia element CContainedWindow w celu utworzenia okna zawartego w innym obiekcie.

Destruktor klasy bazowej (~ CWindowImplRoot) gwarantuje, że okno nie zostanie zniszczone przed zniszczeniem obiektu.

CWindowImpl pochodzi z CWindowImplBaseTklasy , która pochodzi z CWindowImplRootklasy , która pochodzi z TBase i CMessageMap.

Aby uzyskać więcej informacji o Zobacz
Tworzenie kontrolek Samouczek ATL
Korzystanie z okien w ATL Klasy okien ATL
Kreator projektu ATL Tworzenie projektu ATL

Hierarchia dziedziczenia

CMessageMap

TBase

CWindowImplRoot

CWindowImplBaseT

CWindowImpl

Wymagania

Nagłówek: atlwin.h

CWindowImpl::Create

Tworzy okno na podstawie nowej klasy okna.

HWND Create(
    HWND hWndParent,
    _U_RECT rect = NULL,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

Parametry

hWndParent
[in] Dojście do okna nadrzędnego lub właściciela.

Rect
[in] Struktura RECT określająca położenie okna. Element RECT może być przekazywany przez wskaźnik lub odwołanie.

szWindowName
[in] Określa nazwę okna. Wartość domyślna to NULL.

dwStyle
[in] Styl okna. Ta wartość jest łączona ze stylem dostarczonym przez klasę cech dla okna. Wartość domyślna zapewnia pełną kontrolę klasy cech nad stylem. Aby uzyskać listę możliwych wartości, zobacz CreateWindow in the Windows SDK (Tworzenie systemu Windows w zestawie SDK systemu Windows).

dwExStyle
[in] Styl okna rozszerzonego. Ta wartość jest łączona ze stylem dostarczonym przez klasę cech dla okna. Wartość domyślna zapewnia pełną kontrolę klasy cech nad stylem. Aby uzyskać listę możliwych wartości, zobacz CreateWindowEx w zestawie Windows SDK.

MenuOrID
[in] W przypadku okna podrzędnego identyfikator okna. W przypadku okna najwyższego poziomu dojście menu dla okna. Wartość domyślna to 0U.

lpCreateParam
[in] Wskaźnik do danych tworzenia okien. Pełny opis można znaleźć w opisie ostatniego parametru CreateWindowEx.

Wartość zwracana

W przypadku powodzenia dojście do nowo utworzonego okna. W przeciwnym razie wartość NULL.

Uwagi

Create najpierw rejestruje klasę okien, jeśli nie została jeszcze zarejestrowana. Nowo utworzone okno jest automatycznie dołączane do CWindowImpl obiektu.

Uwaga

Nie należy wywoływać Create , jeśli masz już nazwę SubclassWindow.

Aby użyć klasy okien opartej na istniejącej klasie okien, należy utworzyć klasę z CWindowImpl i dołączyć makro DECLARE_WND_SUPERCLASS . Procedura okna istniejącej klasy okien jest zapisywana w m_pfnSuperWindowProc. Aby uzyskać więcej informacji, zobacz Omówienie CWindowImpl.

Uwaga

Jeśli wartość 0 jest używana jako wartość parametru MenuOrID , musi być określona jako 0U (wartość domyślna), aby uniknąć błędu kompilatora.

CWindowImpl::D efWindowProc

Wywoływana przez element WindowProc w celu przetwarzania komunikatów, które nie są obsługiwane przez mapę komunikatów.

LRESULT DefWindowProc(
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

LRESULT DefWindowProc();

Parametry

uMsg
[in] Wiadomość wysłana do okna.

wParam
[in] Dodatkowe informacje specyficzne dla komunikatów.

lParam
[in] Dodatkowe informacje specyficzne dla komunikatów.

Wartość zwracana

Wynik przetwarzania komunikatów.

Uwagi

Domyślnie wywołuje funkcję CallWindowProc Win32, DefWindowProc aby wysłać informacje o wiadomości do procedury okna określonej w m_pfnSuperWindowProc.

Funkcja bez parametrów automatycznie pobiera wymagane parametry z bieżącego komunikatu.

CWindowImpl::GetCurrentMessage

Zwraca bieżący komunikat spakowany w MSG strukturze.

const MSG* GetCurrentMessage();

Wartość zwracana

Bieżący komunikat.

CWindowImpl::GetWindowProc

Zwraca WindowProcwartość , bieżącą procedurę okna.

virtual WNDPROC GetWindowProc();

Wartość zwracana

Bieżąca procedura okna.

Uwagi

Zastąp tę metodę, aby zastąpić procedurę okna własną.

CWindowImpl::GetWndClassInfo

Wywoływana przez element Create w celu uzyskania dostępu do informacji o klasie okna.

static CWndClassInfo& GetWndClassInfo();

Wartość zwracana

Statyczne wystąpienie CWndClassInfo.

Uwagi

Domyślnie CWindowImpl uzyskuje tę metodę za pomocą makra DECLARE_WND_CLASS , które określa nową klasę okien.

Aby zastąpić istniejącą klasę okien, utwórz klasę z CWindowImpl klasy i dołącz makro DECLARE_WND_SUPERCLASS , aby zastąpić GetWndClassInfoelement . Aby uzyskać więcej informacji, zobacz Omówienie CWindowImpl.

Oprócz używania makr DECLARE_WND_CLASS i DECLARE_WND_SUPERCLASS można zastąpić GetWndClassInfo własną implementacją.

CWindowImpl::m_pfnSuperWindowProc

W zależności od okna wskazuje jedną z poniższych procedur okna.

WNDPROC m_pfnSuperWindowProc;

Uwagi

Typ okna Procedura okna
Okno oparte na nowej klasie okien określone za pomocą makra DECLARE_WND_CLASS . Funkcja DefWindowProc Win32.
Okno oparte na klasie okien, która modyfikuje istniejącą klasę określoną za pomocą makra DECLARE_WND_SUPERCLASS . Procedura okna istniejącej klasy okien.
Okno z podklasą. Oryginalna procedura okna z podklasą.

CWindowImpl::D efWindowProc wysyła informacje o wiadomości do procedury okna zapisanej w m_pfnSuperWindowProcpliku .

CWindowImpl::OnFinalMessage

Wywołana po otrzymaniu ostatniego komunikatu (zazwyczaj WM_NCDESTROY).

virtual void OnFinalMessage(HWND hWnd);

Parametry

hWnd
[in] Uchwyt do okna, który jest niszczony.

Uwagi

Domyślna implementacja OnFinalMessage polecenia nic nie robi, ale można zastąpić tę funkcję do obsługi czyszczenia przed zniszczeniem okna. Jeśli chcesz automatycznie usunąć obiekt po usunięciu okna, możesz wywołać delete this; tę funkcję.

CWindowImpl::SubclassWindow

Podklasuje okno zidentyfikowane przez hWnd i dołącza je do CWindowImpl obiektu.

BOOL SubclassWindow(HWND hWnd);

Parametry

hWnd
[in] Dojście do okna, które jest podklasowane.

Wartość zwracana

Wartość TRUE, jeśli okno zostało pomyślnie sklasyfikowane jako podklasy; w przeciwnym razie, FAŁSZ.

Uwagi

Okno podklasy używa teraz CWindowImpl::WindowProc. Oryginalna procedura okna jest zapisywana w m_pfnSuperWindowProc.

Uwaga

Nie należy wywoływać SubclassWindow , jeśli masz już wywołaną metodę Utwórz.

CWindowImpl::UnsubclassWindow

Odłącza okno podklasy od CWindowImpl obiektu i przywraca oryginalną procedurę okna zapisaną w m_pfnSuperWindowProc.

HWND UnsubclassWindow();

Wartość zwracana

Dojście do okna wcześniej podklasy.

CWindowImpl::WindowProc

Ta funkcja statyczna implementuje procedurę okna.

static LRESULT CALLBACK WindowProc(
    HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

Parametry

hWnd
[in] Uchwyt do okna.

uMsg
[in] Wiadomość wysłana do okna.

wParam
[in] Dodatkowe informacje specyficzne dla komunikatów.

lParam
[in] Dodatkowe informacje specyficzne dla komunikatów.

Wartość zwracana

Wynik przetwarzania komunikatów.

Uwagi

WindowProc używa domyślnej mapy komunikatów (zadeklarowanej przy użyciu BEGIN_MSG_MAP), aby kierować komunikaty do odpowiednich procedur obsługi. W razie potrzeby WindowProc wywołuje metodę DefWindowProc w celu dodatkowego przetwarzania komunikatów. Jeśli końcowy komunikat nie jest obsługiwany, WindowProc wykonaj następujące czynności:

  • Wykonuje niesubklasowanie, jeśli okno było nieklasyfikowane.

  • Czyści m_hWnd.

  • Wywołuje metodę OnFinalMessage przed zniszczeniem okna.

Można zastąpić WindowProc , aby zapewnić inny mechanizm obsługi komunikatów.

Zobacz też

BEGIN_MSG_MAP
Klasa CComControl
Omówienie klasy