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. CWindowImpl
zawiera 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 CWindowImpl
usł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 CWindowImplBaseT
klasy , która pochodzi z CWindowImplRoot
klasy , 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
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 WindowProc
wartość , 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ć GetWndClassInfo
element . 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_pfnSuperWindowProc
pliku .
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.