Udostępnij za pośrednictwem


Klasa CContainedWindowT

Ta klasa implementuje okno zawarte w innym obiekcie.

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 TBase = CWindow, class TWinTraits = CControlWinTraits>
class CContainedWindowT : public TBase

Parametry

TBase
Klasa bazowa nowej klasy. Domyślna klasa bazowa to CWindow.

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

Uwaga

CContainedWindow to specjalizacja .CContainedWindowT Jeśli chcesz zmienić klasę bazową lub cechy, użyj CContainedWindowT bezpośrednio.

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
CContainedWindowT::CContainedWindowT Konstruktor. Inicjuje elementy członkowskie danych, aby określić, która mapa komunikatów będzie przetwarzać komunikaty zawartego okna.

Metody publiczne

Nazwa/nazwisko opis
CContainedWindowT::Create Tworzy okno.
CContainedWindowT::D efWindowProc Zapewnia domyślne przetwarzanie komunikatów.
CContainedWindowT::GetCurrentMessage Zwraca bieżący komunikat.
CContainedWindowT::RegisterWndSuperclass Rejestruje klasę okna zawartego okna.
CContainedWindowT::SubclassWindow Podklasy okna.
CContainedWindowT::SwitchMessageMap Zmiany mapowania komunikatów używane do przetwarzania komunikatów zawartego okna.
CContainedWindowT::UnsubclassWindow Przywraca wcześniej podklasowane okno.
CContainedWindowT::WindowProc (Statyczne) Przetwarza komunikaty wysyłane do zawartego okna.

Publiczne elementy członkowskie danych

Nazwa/nazwisko opis
CContainedWindowT::m_dwMsgMapID Określa, która mapa komunikatów będzie przetwarzać komunikaty zawartego okna.
CContainedWindowT::m_lpszClassName Określa nazwę istniejącej klasy okna, na której będzie oparta nowa klasa okien.
CContainedWindowT::m_pfnSuperWindowProc Wskazuje oryginalną procedurę okna klasy okien.
CContainedWindowT::m_pObject Wskazuje obiekt zawierający.

Uwagi

CContainedWindowT implementuje okno zawarte w innym obiekcie. CContainedWindowTProcedura okna używa mapy komunikatów w obiekcie zawierającym do kierowania komunikatów do odpowiednich procedur obsługi. Podczas konstruowania CContainedWindowT obiektu należy określić, która mapa komunikatów ma być używana.

CContainedWindowT umożliwia utworzenie nowego okna przez nadklasowanie istniejącej klasy okna. Metoda Create najpierw rejestruje klasę okien opartą na istniejącej klasie, ale używa metody CContainedWindowT::WindowProc. Create następnie tworzy okno na podstawie tej nowej klasy okien. Każde wystąpienie CContainedWindowT programu może superklasować inną klasę okien.

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

Uwaga

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

Jeśli używasz kontrolki Dodaj na podstawie opcji w Kreatorze projektu ATL, kreator automatycznie doda składową CContainedWindowT danych do klasy implementowania kontrolki. W poniższym przykładzie pokazano, jak zadeklarowane jest zawarte okno:

public:
   // Declare a contained window data member
   CContainedWindow m_ctlEdit;

   // Initialize the contained window:
   // 1. Pass "Edit" to specify that the contained 
   //    window should be based on the standard 
   //    Windows Edit box
   // 2. Pass 'this' pointer to specify that CAtlEdit 
   //    contains the message map to be used for the 
   //    contained window's message processing
   // 3. Pass the identifier of the message map. '1'
   //    identifies the alternate message map declared
   //    with ALT_MSG_MAP(1)
   CAtlEdit()
      : m_ctlEdit(_T("Edit"), this, 1)
   {
      m_bWindowOnly = TRUE;
   }

 

// Declare the default message map, identified by '0'
BEGIN_MSG_MAP(CAtlEdit)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
   CHAIN_MSG_MAP(CComControl<CAtlEdit>)
// Declare an alternate message map, identified by '1'
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()

 

// Define OnCreate handler
// When the containing window receives a WM_CREATE
// message, create the contained window by calling
// CContainedWindow::Create
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
   BOOL& /*bHandled*/)
{
   RECT rc;
   GetWindowRect(&rc);
   rc.right -= rc.left;
   rc.bottom -= rc.top;
   rc.top = rc.left = 0;
   m_ctlEdit.Create(m_hWnd, rc, _T("hello"), WS_CHILD | WS_VISIBLE | 
      ES_MULTILINE | ES_AUTOVSCROLL);
   return 0;
}
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
Windows Windows i kolejne tematy w zestawie Windows SDK

Hierarchia dziedziczenia

TBase

CContainedWindowT

Wymagania

Nagłówek: atlwin.h

CContainedWindowT::CContainedWindowT

Konstruktor inicjuje składowe danych.

CContainedWindowT(
    LPTSTR lpszClassName,
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0);

CContainedWindowT(
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0)
    CContainedWindowT();

Parametry

lpszClassName
[in] Nazwa istniejącej klasy okien, na której będzie oparte zawarte okno.

pObject
[in] Wskaźnik do obiektu zawierającego, który deklaruje mapę komunikatów. Klasa tego obiektu musi pochodzić z obiektu CMessageMap.

dwMsgMapID
[in] Identyfikuje mapę komunikatów, która będzie przetwarzać komunikaty zawartego okna. Wartość domyślna 0 określa domyślną mapę komunikatów zadeklarowaną za pomocą BEGIN_MSG_MAP. Aby użyć alternatywnej mapy komunikatów zadeklarowanej za pomocą ALT_MSG_MAP(msgMapID), przekaż polecenie msgMapID.

Uwagi

Jeśli chcesz utworzyć nowe okno za pomocą polecenia Utwórz, musisz przekazać nazwę istniejącej klasy okna dla parametru lpszClassName . Aby zapoznać się z przykładem, zobacz Omówienie CContainedWindow .

Istnieją trzy konstruktory:

  • Konstruktor z trzema argumentami jest zwykle wywoływany.

  • Konstruktor z dwoma argumentami używa nazwy klasy z TBase::GetWndClassNameklasy .

  • Konstruktor bez argumentów jest używany, jeśli chcesz podać argumenty później. Należy podać nazwę klasy okna, obiekt mapy komunikatów i identyfikator mapy komunikatów, gdy później wywołasz metodę Create.

Jeśli podklasujesz istniejące okno za pośrednictwem podklasyWindow, wartość lpszClassName nie będzie używana, dlatego można przekazać wartość NULL dla tego parametru.

CContainedWindowT::Create

Wywołuje metodę RegisterWndSuperclass , aby zarejestrować klasę okien opartą na istniejącej klasie, ale używa klasy CContainedWindowT::WindowProc.

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

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

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

Parametry

lpszClassName
[in] Nazwa istniejącej klasy okien, na której będzie oparte zawarte okno.

pObject
[in] Wskaźnik do obiektu zawierającego, który deklaruje mapę komunikatów. Klasa tego obiektu musi pochodzić z obiektu CMessageMap.

dwMsgMapID
[in] Identyfikuje mapę komunikatów, która będzie przetwarzać komunikaty zawartego okna. Wartość domyślna 0 określa domyślną mapę komunikatów zadeklarowaną za pomocą BEGIN_MSG_MAP. Aby użyć alternatywnej mapy komunikatów zadeklarowanej za pomocą ALT_MSG_MAP(msgMapID), przekaż polecenie msgMapID.

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. Domyślna wartość to WS_CHILD | WS_VISIBLE. 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. Wartość domyślna to 0, co oznacza, że nie ma rozszerzonego stylu. 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

Istniejąca nazwa klasy okna jest zapisywana w m_lpszClassName. Create następnie tworzy okno na podstawie tej nowej klasy. Nowo utworzone okno jest automatycznie dołączane do CContainedWindowT obiektu.

Uwaga

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

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.

CContainedWindowT::D efWindowProc

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

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

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.

CContainedWindowT::GetCurrentMessage

Zwraca bieżący komunikat (m_pCurrentMsg).

const _ATL_MSG* GetCurrentMessage();

Wartość zwracana

Bieżący komunikat spakowany w MSG strukturze.

CContainedWindowT::m_dwMsgMapID

Przechowuje identyfikator mapy komunikatów aktualnie używanej dla zawartego okna.

DWORD m_dwMsgMapID;

Uwagi

Ta mapa komunikatów musi być zadeklarowana w obiekcie zawierającym.

Domyślna mapa komunikatów zadeklarowana przy użyciu BEGIN_MSG_MAP jest zawsze identyfikowana przez zero. Alternatywna mapa komunikatów zadeklarowana za pomocą ALT_MSG_MAP(msgMapID), jest identyfikowana przez element msgMapID.

m_dwMsgMapID element jest najpierw inicjowany przez konstruktor i można go zmienić przez wywołanie SwitchMessageMap. Przykład można znaleźć w temacie CContainedWindowT Overview (Omówienie usługi CContainedWindowT).

CContainedWindowT::m_lpszClassName

Określa nazwę istniejącej klasy okna.

LPTSTR m_lpszClassName;

Uwagi

Podczas tworzenia okna utwórz nową klasę okna opartą na tej istniejącej klasie, ale używa klasy CContainedWindowT::WindowProc.

m_lpszClassName jest inicjowany przez konstruktora. Aby zapoznać się z przykładem, zobacz Omówienie CContainedWindowT .

CContainedWindowT::m_pfnSuperWindowProc

Jeśli zawarte okno jest podklasowane, m_pfnSuperWindowProc wskazuje oryginalną procedurę okna klasy okna.

WNDPROC m_pfnSuperWindowProc;

Uwagi

Jeśli zawarte okno jest superklasowane, co oznacza, że jest oparte na klasie okna, która modyfikuje istniejącą klasę, m_pfnSuperWindowProc wskazuje procedurę okna istniejącej klasy okien.

Metoda DefWindowProc wysyła informacje o wiadomościach do procedury okna zapisanej w m_pfnSuperWindowProcpliku .

CContainedWindowT::m_pObject

Wskazuje obiekt zawierający CContainedWindowT obiekt.

CMessageMap* m_pObject;

Uwagi

Ten kontener, którego klasa musi pochodzić z CMessageMap, deklaruje mapę komunikatów używaną przez zawarte okno.

m_pObject jest inicjowany przez konstruktora. Aby zapoznać się z przykładem, zobacz Omówienie CContainedWindowT .

CContainedWindowT::RegisterWndSuperclass

Wywoływana przez polecenie Create w celu zarejestrowania klasy okna zawartego okna.

ATOM RegisterWndSuperClass();

Wartość zwracana

Jeśli operacja powiedzie się, atom, który jednoznacznie identyfikuje zarejestrowaną klasę okien; w przeciwnym razie zero.

Uwagi

Ta klasa okna jest oparta na istniejącej klasie, ale używa klasy CContainedWindowT::WindowProc. Nazwa i procedura okna istniejącej klasy okien są zapisywane odpowiednio w m_lpszClassName i m_pfnSuperWindowProc.

CContainedWindowT::SubclassWindow

Podklasuje okno zidentyfikowane przez hWnd i dołącza je do CContainedWindowT 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 CContainedWindowT::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.

CContainedWindowT::SwitchMessageMap

Zmiany, które mapy komunikatów będą używane do przetwarzania komunikatów zawartego okna.

void SwitchMessageMap(DWORD dwMsgMapID);

Parametry

dwMsgMapID
[in] Identyfikator mapy komunikatów. Aby użyć domyślnej mapy komunikatów zadeklarowanej z BEGIN_MSG_MAP, przekaż zero. Aby użyć alternatywnej mapy komunikatów zadeklarowanej za pomocą ALT_MSG_MAP(msgMapID), przekaż polecenie msgMapID.

Uwagi

Mapa komunikatów musi być zdefiniowana w obiekcie zawierającym.

Początkowo należy określić identyfikator mapy komunikatów w konstruktorze.

CContainedWindowT::UnsubclassWindow

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

HWND UnsubclassWindow(BOOL bForce = FALSE);

Parametry

bForce
[in] Ustaw wartość TRUE, aby wymusić przywrócenie oryginalnej procedury okna, nawet jeśli procedura okna dla tego CContainedWindowT obiektu nie jest obecnie aktywna. Jeśli parametr bForce ma wartość FALSE, a procedura okna dla tego CContainedWindowT obiektu nie jest obecnie aktywna, oryginalna procedura okna nie zostanie przywrócona.

Wartość zwracana

Dojście do okna wcześniej podklasy. Jeśli parametr bForce ma wartość FALSE, a procedura okna dla tego CContainedWindowT obiektu nie jest obecnie aktywna, zwraca wartość NULL.

Uwagi

Użyj tej metody tylko wtedy, gdy chcesz przywrócić oryginalną procedurę okna przed zniszczeniem okna. W przeciwnym razie funkcja WindowProc automatycznie to zrobi, gdy okno zostanie zniszczone.

CContainedWindowT::WindowProc

Ta metoda 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 kieruje komunikaty do mapy komunikatów zidentyfikowanych przez m_dwMsgMapID. W razie potrzeby WindowProc wywołuje metodę DefWindowProc w celu dodatkowego przetwarzania komunikatów.

Zobacz też

Klasa CWindow
Klasa CWindowImpl
Klasa CMessageMap
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
Omówienie klasy