Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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