Megosztás a következőn keresztül:


CContainedWindowT osztály

Megjegyzés:

Az aktív sablontár (ATL) továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Ez az osztály egy másik objektumon belüli ablakot implementál.

Fontos

Ez az osztály és tagjai nem használhatók a Windows futtatókörnyezetben futó alkalmazásokban.

Szemantika

template <class TBase = CWindow, class TWinTraits = CControlWinTraits>
class CContainedWindowT : public TBase

Paraméterek

TBase
Az új osztály alaposztálya. Az alapértelmezett alaposztály a .CWindow

TWinTraits
Az ablak stílusait meghatározó tulajdonságok osztálya. Az alapértelmezett érték a CControlWinTraits.

Megjegyzés:

A CContainedWindow a .CContainedWindowT Ha módosítani szeretné az alaposztályt vagy tulajdonságokat, használja CContainedWindowT közvetlenül.

Tagok

Nyilvános konstruktorok

Név Description
CContainedWindowT::CContainedWindowT Konstruktor. Inicializálja az adattagokat, hogy megadják, melyik üzenettérkép dolgozza fel a tartalmazott ablak üzeneteit.

Nyilvános módszerek

Név Description
CContainedWindowT::Létrehozás Létrehoz egy ablakot.
CContainedWindowT::D efWindowProc Alapértelmezett üzenetfeldolgozást biztosít.
CContainedWindowT::GetCurrentMessage Az aktuális üzenetet adja vissza.
CContainedWindowT::RegisterWndSuperclass Regisztrálja a tartalmazott ablak ablakosztályát.
CContainedWindowT::SubclassWindow Egy ablak alosztálya.
CContainedWindowT::SwitchMessageMap A tárolt ablak üzeneteinek feldolgozásához használt üzenettérkép módosítása.
CContainedWindowT::UnsubclassWindow Visszaállít egy korábban alosztályozott ablakot.
CContainedWindowT::WindowProc (Statikus) Feldolgozza a tartalmazott ablakba küldött üzeneteket.

Nyilvános adatok tagjai

Név Description
CContainedWindowT::m_dwMsgMapID Azonosítja, hogy melyik üzenettérkép dolgozza fel a tartalmazott ablak üzeneteit.
CContainedWindowT::m_lpszClassName Megadja annak a meglévő ablakosztálynak a nevét, amelyen egy új ablakosztály lesz alapul.
CContainedWindowT::m_pfnSuperWindowProc Az ablakosztály eredeti ablakeljárására mutat.
CContainedWindowT::m_pObject A tartalmazó objektumra mutat.

Megjegyzések

CContainedWindowT egy másik objektumon belüli ablakot implementál. CContainedWindowTAz ablakművelet egy üzenettérképet használ a benne lévő objektumban az üzenetek megfelelő kezelőkhöz való irányításához. Objektum létrehozásakor CContainedWindowT meg kell adnia, hogy melyik üzenettérképet kell használni.

CContainedWindowT lehetővé teszi egy új ablak létrehozását egy meglévő ablakosztály felülosztályozásával. A Create metódus először regisztrál egy ablakosztályt, amely egy meglévő osztályon alapul, de használ CContainedWindowT::WindowProc. Create ezután létrehoz egy ablakot az új ablakosztály alapján. Az egyes példányok CContainedWindowT egy másik ablakosztályt is átsorolhatnak.

CContainedWindowT az ablak alosztályozását is támogatja. A SubclassWindow metódus egy meglévő ablakot csatol az CContainedWindowT objektumhoz, és az ablakeljárást a következőre CContainedWindowT::WindowProcmódosítja: . Az egyes példányok CContainedWindowT egy másik ablakot alosztályozzanak.

Megjegyzés:

Bármely adott CContainedWindowT objektum esetén hívja meg a CreateSubclassWindowvagy a . Nem hívhatja meg mindkét metódust ugyanazon az objektumon.

Ha az ATL-projektvarázslóban az Add control based (Vezérlő hozzáadása ) lehetőséget használja, a varázsló automatikusan hozzáad egy CContainedWindowT adattagot a vezérlőt megvalósító osztályhoz. Az alábbi példa a tartalmazott ablak deklarálható módját mutatja be:

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;
}
További információ erről: Nézze
Vezérlők létrehozása ATL-oktatóanyag
Windows használata az ATL-ben ATL ablakosztályok
ATL-projekt varázsló ATL-projekt létrehozása
Windows Windows és további témakörök a Windows SDK-ban

Öröklési hierarchia

TBase

CContainedWindowT

Requirements

Fejléc: atlwin.h

CContainedWindowT::CContainedWindowT

A konstruktor inicializálja az adattagokat.

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

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

Paraméterek

lpszClassName
[in] Annak a meglévő ablakosztálynak a neve, amelyen a tartalmazott ablak alapulni fog.

pObject
[in] Az üzenettérképet deklaráló objektumra mutató mutató. Az objektum osztályának CMessageMap-ból kell származnia.

dwMsgMapID
[in] Azonosítja azt az üzenettérképet, amely feldolgozni fogja a tartalmazott ablak üzeneteit. Az alapértelmezett érték (0) a BEGIN_MSG_MAP deklarált alapértelmezett üzenettérképet adja meg. A ALT_MSG_MAP(msgMapID) használatával deklarált másodlagos üzenettérkép használatához adja át a következőt msgMapID:

Megjegyzések

Ha új ablakot szeretne létrehozni a Létrehozás szolgáltatással, meg kell adnia egy meglévő ablakosztály nevét az lpszClassName paraméterhez. Például tekintse meg a CContainedWindow áttekintését.

Három konstruktor van:

  • Általában a három argumentumot tartalmazó konstruktort nevezzük.

  • A két argumentumot tartalmazó konstruktor a következő osztálynevet TBase::GetWndClassNamehasználja: .

  • Az argumentumokat nem tartalmazó konstruktort akkor használja a rendszer, ha később szeretné megadni az argumentumokat. A későbbi híváskor Createmeg kell adnia az ablakosztály nevét, az üzenettérkép objektumát és az üzenettérkép azonosítóját.

Ha egy meglévő ablakot a SubclassWindow alosztályon keresztül oszt át, a rendszer nem használja az lpszClassName értéket; ezért a paraméterhez null értéket adhat meg.

CContainedWindowT::Létrehozás

Meghívja a RegisterWndSuperclasst , hogy regisztráljon egy meglévő osztályon alapuló ablakosztályt, de a CContainedWindowT::WindowProc parancsot használja.

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);

Paraméterek

lpszClassName
[in] Annak a meglévő ablakosztálynak a neve, amelyen a tartalmazott ablak alapulni fog.

pObject
[in] Az üzenettérképet deklaráló objektumra mutató mutató. Az objektum osztályának CMessageMap-ból kell származnia.

dwMsgMapID
[in] Azonosítja azt az üzenettérképet, amely feldolgozni fogja a tartalmazott ablak üzeneteit. Az alapértelmezett érték (0) a BEGIN_MSG_MAP deklarált alapértelmezett üzenettérképet adja meg. A ALT_MSG_MAP(msgMapID) használatával deklarált másodlagos üzenettérkép használatához adja át a következőt msgMapID:

hWndParent
[in] A szülő vagy a tulajdonos ablakának leírója.

téglalap
[in] Az ablak pozícióját meghatározó RECT-struktúra. A RECT mutatóval vagy hivatkozással továbbítható.

szWindowName
[in] Az ablak nevét adja meg. Az alapértelmezett érték NULL.

dwStyle
[in] Az ablak stílusa. Az alapértelmezett érték a WS_CHILD | WS_VISIBLE. A lehetséges értékek listáját a CreateWindow a Windows SDK-ban találja.

dwExStyle
[in] A kiterjesztett ablakstílus. Az alapértelmezett érték 0, ami azt jelenti, hogy nincs kiterjesztett stílus. A lehetséges értékek listáját a CreateWindowEx a Windows SDK-ban találja.

MenuOrID
[in] Gyermekablak esetén az ablak azonosítója. Felső szintű ablak esetén az ablak menüfogópontja. Az alapértelmezett érték 0U.

lpCreateParam
[in] Mutató az ablaklétrehozás adataihoz. A teljes leírásért tekintse meg a CreateWindowEx végső paraméterének leírását.

Visszaadott érték

Ha sikeres, a fogópont az újonnan létrehozott ablakhoz; ellenkező esetben NULL.

Megjegyzések

A meglévő ablakosztály nevét a rendszer m_lpszClassName menti. Create ezután létrehoz egy ablakot az új osztály alapján. Az újonnan létrehozott ablak automatikusan csatlakozik az CContainedWindowT objektumhoz.

Megjegyzés:

Ne hívjon Create , ha már meghívta a SubclassWindow nevet.

Megjegyzés:

Ha a MenuOrID paraméter értékeként 0 értéket használ, a fordítóhibák elkerülése érdekében 0U-ként (alapértelmezett értékként) kell megadni.

CContainedWindowT::D efWindowProc

A WindowProc meghívta az üzenettérkép által nem kezelt üzenetek feldolgozására.

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

Paraméterek

uMsg
[in] Az ablakba küldött üzenet.

wParam
[in] További üzenetspecifikus információk.

lParam
[in] További üzenetspecifikus információk.

Visszaadott érték

Az üzenetfeldolgozás eredménye.

Megjegyzések

Alapértelmezés szerint meghívja a CallWindowProc Win32 függvényt, DefWindowProc hogy küldje el az üzenet adatait a m_pfnSuperWindowProc megadott ablakművelethez.

CContainedWindowT::GetCurrentMessage

Az aktuális üzenetet (m_pCurrentMsg) adja vissza.

const _ATL_MSG* GetCurrentMessage();

Visszaadott érték

Az aktuális üzenet, amely a MSG struktúrába van csomagolva.

CContainedWindowT::m_dwMsgMapID

A tartalmazott ablakhoz jelenleg használt üzenettérkép azonosítóját tartalmazza.

DWORD m_dwMsgMapID;

Megjegyzések

Ezt az üzenettérképet az azt tartalmazó objektumban kell deklarálni.

A BEGIN_MSG_MAP deklarált alapértelmezett üzenettérképet mindig nulla azonosítja. A rendszer a ALT_MSG_MAP(msgMapID) használatával deklarált másodlagos üzenettérképet azonosítja msgMapID.

m_dwMsgMapID először a konstruktor inicializálja, és a SwitchMessageMap meghívásával módosítható. Például tekintse meg a CContainedWindowT áttekintését.

CContainedWindowT::m_lpszClassName

Egy meglévő ablakosztály nevét adja meg.

LPTSTR m_lpszClassName;

Megjegyzések

Amikor létrehoz egy ablakot, a Create regisztrál egy új ablakosztályt, amely ezen a meglévő osztályon alapul, de a CContainedWindowT::WindowProc parancsot használja.

m_lpszClassName inicializálja a konstruktor. Például tekintse meg a CContainedWindowT áttekintését .

CContainedWindowT::m_pfnSuperWindowProc

Ha a tartalmazott ablak alosztályozott, m_pfnSuperWindowProc az ablakosztály eredeti ablakeljárására mutat.

WNDPROC m_pfnSuperWindowProc;

Megjegyzések

Ha a tartalmazott ablak felülosztályozott, vagyis egy meglévő osztályt módosító ablakosztályon alapul, m_pfnSuperWindowProc a meglévő ablakosztály ablakeljárására mutat.

A DefWindowProc metódus üzenetinformációkat küld a fájlban mentett ablakműtéthez m_pfnSuperWindowProc.

CContainedWindowT::m_pObject

Az objektumot tartalmazó CContainedWindowT objektumra mutat.

CMessageMap* m_pObject;

Megjegyzések

Ez a tároló, amelynek osztályának CMessageMap-ból kell származnia, deklarálja a tartalmazott ablak által használt üzenettérképet.

m_pObject inicializálja a konstruktor. Például tekintse meg a CContainedWindowT áttekintését .

CContainedWindowT::RegisterWndSuperclass

A Create meghívásával regisztrálja a tartalmazott ablak ablakosztályát.

ATOM RegisterWndSuperClass();

Visszaadott érték

Ha sikeres, egy atom, amely egyedileg azonosítja a regisztrálandó ablakosztályt; ellenkező esetben nulla.

Megjegyzések

Ez az ablakosztály egy meglévő osztályon alapul, de a CContainedWindowT::WindowProc parancsot használja. A meglévő ablakosztály neve és ablakművelete m_lpszClassName és m_pfnSuperWindowProc lesz mentve.

CContainedWindowT::SubclassWindow

Alosztályozza a hWnd által azonosított ablakot, és csatolja az CContainedWindowT objektumhoz.

BOOL SubclassWindow(HWND hWnd);

Paraméterek

hWnd
[in] Az alosztályozott ablak fogópontja.

Visszaadott érték

IGAZ, ha az ablak sikeresen alosztályozott; egyéb esetben HAMIS.

Megjegyzések

Az alosztályozott ablak mostantól a CContainedWindowT::WindowProc parancsot használja. Az eredeti ablakeljárást a rendszer m_pfnSuperWindowProc menti.

Megjegyzés:

Ne hívjon SubclassWindow , ha már meghívta a Létrehozás nevet.

CContainedWindowT::SwitchMessageMap

A rendszer módosítja, hogy mely üzenettérképet használja a rendszer a tárolt ablak üzeneteinek feldolgozásához.

void SwitchMessageMap(DWORD dwMsgMapID);

Paraméterek

dwMsgMapID
[in] Az üzenettérkép azonosítója. A BEGIN_MSG_MAP deklarált alapértelmezett üzenettérkép használatához adja meg a nullát. A ALT_MSG_MAP(msgMapID) használatával deklarált másodlagos üzenettérkép használatához adja át a következőt msgMapID:

Megjegyzések

Az üzenettérképet az azt tartalmazó objektumban kell definiálni.

Először meg kell adnia az üzenettérkép azonosítót a konstruktorban.

CContainedWindowT::UnsubclassWindow

Leválasztja az alosztályozott ablakot az CContainedWindowT objektumról, és visszaállítja az eredeti, m_pfnSuperWindowProc mentett ablak eljárást.

HWND UnsubclassWindow(BOOL bForce = FALSE);

Paraméterek

bForce
[in] Igaz értékre állításával kényszerítse az eredeti ablakeljárás visszaállítását még akkor is, ha az objektum ablakművelete CContainedWindowT jelenleg nem aktív. Ha a bForce ÉRTÉKE HAMIS, és az objektum ablakeljárása CContainedWindowT jelenleg nem aktív, az eredeti ablakeljárás nem lesz visszaállítva.

Visszaadott érték

A korábban alosztályozott ablakhoz tartozó fogópont. Ha a bForce ÉRTÉKE HAMIS, és az objektum ablakának eljárása CContainedWindowT jelenleg nem aktív, null értéket ad vissza.

Megjegyzések

Ezt a módszert csak akkor használja, ha az ablak megsemmisítése előtt vissza szeretné állítani az eredeti ablak eljárást. Ellenkező esetben a WindowProc automatikusan ezt teszi, amikor az ablak megsemmisül.

CContainedWindowT::WindowProc

Ez a statikus módszer implementálja az ablak eljárást.

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

Paraméterek

hWnd
[in] Az ablak fogópontja.

uMsg
[in] Az ablakba küldött üzenet.

wParam
[in] További üzenetspecifikus információk.

lParam
[in] További üzenetspecifikus információk.

Visszaadott érték

Az üzenetfeldolgozás eredménye.

Megjegyzések

WindowProc irányítja az üzeneteket a m_dwMsgMapID által azonosított üzenettérképre. Szükség esetén WindowProc további üzenetfeldolgozást kér a DefWindowProctól .

Lásd még

CWindow osztály
CWindowImpl osztály
CMessageMap osztály
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
osztály áttekintése