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. CContainedWindowT
Procedura 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::GetWndClassName
klasy .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_pfnSuperWindowProc
pliku .
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