Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
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.