Bagikan melalui


Kelas CContainedWindowT

Kelas ini mengimplementasikan jendela yang terkandung dalam objek lain.

Penting

Kelas ini dan anggotanya tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime.

Sintaks

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

Parameter

TBase
Kelas dasar kelas baru Anda. Kelas dasar default adalah CWindow.

TWinTraits
Kelas sifat yang menentukan gaya untuk jendela Anda. Default adalah CControlWinTraits.

Catatan

CContainedWindow adalah spesialisasi dari CContainedWindowT. Jika Anda ingin mengubah kelas dasar atau sifat, gunakan CContainedWindowT secara langsung.

Anggota

Konstruktor Publik

Nama Deskripsi
CContainedWindowT::CContainedWindowT Konstruktor. Menginisialisasi anggota data untuk menentukan peta pesan mana yang akan memproses pesan jendela yang terkandung.

Metode Publik

Nama Deskripsi
CContainedWindowT::Create Membuat jendela.
CContainedWindowT::D efWindowProc Menyediakan pemrosesan pesan default.
CContainedWindowT::GetCurrentMessage Mengembalikan pesan saat ini.
CContainedWindowT::RegisterWndSuperclass Mendaftarkan kelas jendela dari jendela yang terkandung.
CContainedWindowT::SubclassWindow Subkelas jendela.
CContainedWindowT::SwitchMessageMap Mengubah peta pesan mana yang digunakan untuk memproses pesan jendela yang terkandung.
CContainedWindowT::UnsubclassWindow Memulihkan jendela yang sebelumnya disubkelas.
CContainedWindowT::WindowProc (Statis) Memproses pesan yang dikirim ke jendela yang terkandung.

Anggota Data Publik

Nama Deskripsi
CContainedWindowT::m_dwMsgMapID Mengidentifikasi peta pesan mana yang akan memproses pesan jendela yang terkandung.
CContainedWindowT::m_lpszClassName Menentukan nama kelas jendela yang ada di mana kelas jendela baru akan didasarkan.
CContainedWindowT::m_pfnSuperWindowProc Menunjuk ke prosedur jendela asli kelas jendela.
CContainedWindowT::m_pObject Menunjuk ke objek yang berisi.

Keterangan

CContainedWindowT mengimplementasikan jendela yang terkandung dalam objek lain. CContainedWindowTProsedur jendela menggunakan peta pesan di objek yang berisi untuk mengarahkan pesan ke handler yang sesuai. Saat membuat CContainedWindowT objek, Anda menentukan peta pesan mana yang harus digunakan.

CContainedWindowT memungkinkan Anda membuat jendela baru dengan superclassing kelas jendela yang ada. Metode ini Create terlebih dahulu mendaftarkan kelas jendela yang didasarkan pada kelas yang ada tetapi menggunakan CContainedWindowT::WindowProc. Create kemudian membuat jendela berdasarkan kelas jendela baru ini. Setiap instans CContainedWindowT dapat superclass kelas jendela yang berbeda.

CContainedWindowT juga mendukung subkelas jendela. Metode SubclassWindow melampirkan jendela yang ada ke CContainedWindowT objek dan mengubah prosedur jendela menjadi CContainedWindowT::WindowProc. Setiap instans CContainedWindowT dapat mensubkelas jendela yang berbeda.

Catatan

Untuk objek tertentu CContainedWindowT , panggil atau Create SubclassWindow. Anda tidak boleh memanggil kedua metode pada objek yang sama.

Saat Anda menggunakan opsi Tambahkan kontrol berdasarkan pada Wizard Proyek ATL, wizard akan secara otomatis menambahkan CContainedWindowT anggota data ke kelas yang mengimplementasikan kontrol. Contoh berikut menunjukkan bagaimana jendela yang terkandung dinyatakan:

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;
}
Untuk informasi lebih lanjut tentang Lihat
Membuat kontrol ATL Tutorial
Menggunakan jendela di ATL Kelas Jendela ATL
Wizard Proyek ATL Membuat Proyek ATL
Windows Windows dan topik berikutnya di Windows SDK

Hierarki Warisan

TBase

CContainedWindowT

Persyaratan

Header: atlwin.h

CContainedWindowT::CContainedWindowT

Konstruktor menginisialisasi anggota data.

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

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

Parameter

lpszClassName
[di] Nama kelas jendela yang ada di mana jendela yang terkandung akan didasarkan.

pObject
[di] Penunjuk ke objek yang berisi yang mendeklarasikan peta pesan. Kelas objek ini harus berasal dari CMessageMap.

dwMsgMapID
[di] Mengidentifikasi peta pesan yang akan memproses pesan jendela yang terkandung. Nilai default, 0, menentukan peta pesan default yang dideklarasikan dengan BEGIN_MSG_MAP. Untuk menggunakan peta pesan alternatif yang dideklarasikan dengan ALT_MSG_MAP(msgMapID), teruskan msgMapID.

Keterangan

Jika Anda ingin membuat jendela baru melalui Buat, Anda harus meneruskan nama kelas jendela yang ada untuk parameter lpszClassName . Misalnya, lihat gambaran umum CContainedWindow .

Ada tiga konstruktor:

  • Konstruktor dengan tiga argumen adalah yang biasanya dipanggil.

  • Konstruktor dengan dua argumen menggunakan nama kelas dari TBase::GetWndClassName.

  • Konstruktor tanpa argumen digunakan jika Anda ingin menyediakan argumen nanti. Anda harus memberikan nama kelas jendela, objek peta pesan, dan ID peta pesan saat Anda nanti memanggil Create.

Jika Anda mensubkelas jendela yang ada melalui SubclassWindow, nilai lpszClassName tidak akan digunakan; oleh karena itu, Anda dapat meneruskan NULL untuk parameter ini.

CContainedWindowT::Create

Memanggil RegisterWndSuperclass untuk mendaftarkan kelas jendela yang didasarkan pada kelas yang ada tetapi menggunakan 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);

Parameter

lpszClassName
[di] Nama kelas jendela yang ada di mana jendela yang terkandung akan didasarkan.

pObject
[di] Penunjuk ke objek yang berisi yang mendeklarasikan peta pesan. Kelas objek ini harus berasal dari CMessageMap.

dwMsgMapID
[di] Mengidentifikasi peta pesan yang akan memproses pesan jendela yang terkandung. Nilai default, 0, menentukan peta pesan default yang dideklarasikan dengan BEGIN_MSG_MAP. Untuk menggunakan peta pesan alternatif yang dideklarasikan dengan ALT_MSG_MAP(msgMapID), teruskan msgMapID.

hWndParent
[di] Handel ke jendela induk atau pemilik.

rect
[di] Struktur RECT yang menentukan posisi jendela. RECT dapat diteruskan oleh penunjuk atau dengan referensi.

szWindowName
[di] Menentukan nama jendela. Nilai defaultnya adalah NULL.

dwStyle
[di] Gaya jendela. Nilai defaultnya adalah WS_CHILD | WS_VISIBLE. Untuk daftar nilai yang mungkin, lihat CreateWindow di Windows SDK.

dwExStyle
[di] Gaya jendela yang diperluas. Nilai defaultnya adalah 0, yang berarti tidak ada gaya yang diperluas. Untuk daftar nilai yang mungkin, lihat CreateWindowEx di Windows SDK.

MenuOrID
[di] Untuk jendela anak, pengidentifikasi jendela. Untuk jendela tingkat atas, handel menu untuk jendela. Nilai defaultnya adalah 0U.

lpCreateParam
[di] Penunjuk ke data pembuatan jendela. Untuk deskripsi lengkapnya, lihat deskripsi untuk parameter akhir ke CreateWindowEx.

Tampilkan Nilai

Jika berhasil, handel ke jendela yang baru dibuat; jika tidak, NULL.

Keterangan

Nama kelas jendela yang ada disimpan di m_lpszClassName. Create kemudian membuat jendela berdasarkan kelas baru ini. Jendela yang baru dibuat secara otomatis dilampirkan ke CContainedWindowT objek.

Catatan

Jangan menelepon Create jika Anda telah memanggil SubclassWindow.

Catatan

Jika 0 digunakan sebagai nilai untuk parameter MenuOrID , itu harus ditentukan sebagai 0U (nilai default) untuk menghindari kesalahan pengkompilasi.

CContainedWindowT::D efWindowProc

Dipanggil oleh WindowProc untuk memproses pesan yang tidak ditangani oleh peta pesan.

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

Parameter

uMsg
[di] Pesan yang dikirim ke jendela.

wParam
[di] Informasi khusus pesan tambahan.

lParam
[di] Informasi khusus pesan tambahan.

Tampilkan Nilai

Hasil pemrosesan pesan.

Keterangan

Secara default, DefWindowProc memanggil fungsi CallWindowProc Win32 untuk mengirim informasi pesan ke prosedur jendela yang ditentukan dalam m_pfnSuperWindowProc.

CContainedWindowT::GetCurrentMessage

Mengembalikan pesan saat ini (m_pCurrentMsg).

const _ATL_MSG* GetCurrentMessage();

Tampilkan Nilai

Pesan saat ini, dimas dalam MSG struktur.

CContainedWindowT::m_dwMsgMapID

Menahan pengidentifikasi peta pesan yang saat ini digunakan untuk jendela yang terkandung.

DWORD m_dwMsgMapID;

Keterangan

Peta pesan ini harus dideklarasikan dalam objek yang berisi.

Peta pesan default, dinyatakan dengan BEGIN_MSG_MAP, selalu diidentifikasi dengan nol. Peta pesan alternatif, dideklarasikan dengan ALT_MSG_MAP(msgMapID), diidentifikasi oleh msgMapID.

m_dwMsgMapID pertama kali diinisialisasi oleh konstruktor dan dapat diubah dengan memanggil SwitchMessageMap. Misalnya, lihat Gambaran Umum CContainedWindowT.

CContainedWindowT::m_lpszClassName

Menentukan nama kelas jendela yang ada.

LPTSTR m_lpszClassName;

Keterangan

Saat Anda membuat jendela, Buat mendaftarkan kelas jendela baru yang didasarkan pada kelas yang ada ini tetapi menggunakan CContainedWindowT::WindowProc.

m_lpszClassName diinisialisasi oleh konstruktor. Misalnya, lihat gambaran umum CContainedWindowT .

CContainedWindowT::m_pfnSuperWindowProc

Jika jendela yang terkandung disubkelas, m_pfnSuperWindowProc arahkan ke prosedur jendela asli kelas jendela.

WNDPROC m_pfnSuperWindowProc;

Keterangan

Jika jendela yang terkandung di-superclassed, artinya didasarkan pada kelas jendela yang memodifikasi kelas yang ada, m_pfnSuperWindowProc menunjuk ke prosedur jendela kelas jendela yang ada.

Metode DefWindowProc mengirim informasi pesan ke prosedur jendela yang disimpan di m_pfnSuperWindowProc.

CContainedWindowT::m_pObject

Menunjuk ke objek yang CContainedWindowT berisi objek.

CMessageMap* m_pObject;

Keterangan

Kontainer ini, yang kelasnya harus berasal dari CMessageMap, mendeklarasikan peta pesan yang digunakan oleh jendela yang terkandung.

m_pObject diinisialisasi oleh konstruktor. Misalnya, lihat gambaran umum CContainedWindowT .

CContainedWindowT::RegisterWndSuperclass

Dipanggil oleh Buat untuk mendaftarkan kelas jendela jendela yang terkandung.

ATOM RegisterWndSuperClass();

Tampilkan Nilai

Jika berhasil, atom yang secara unik mengidentifikasi kelas jendela yang didaftarkan; jika tidak, nol.

Keterangan

Kelas jendela ini didasarkan pada kelas yang ada tetapi menggunakan CContainedWindowT::WindowProc. Nama dan prosedur jendela kelas jendela yang ada disimpan di m_lpszClassName dan m_pfnSuperWindowProc.

CContainedWindowT::SubclassWindow

Subkelas jendela yang diidentifikasi oleh hWnd dan melampirkannya ke CContainedWindowT objek.

BOOL SubclassWindow(HWND hWnd);

Parameter

hWnd
[di] Handel ke jendela yang sedang disubkelas.

Tampilkan Nilai

TRUE jika jendela berhasil disubkelas; jika tidak, FALSE.

Keterangan

Jendela subkelas sekarang menggunakan CContainedWindowT::WindowProc. Prosedur jendela asli disimpan dalam m_pfnSuperWindowProc.

Catatan

Jangan panggil SubclassWindow jika Anda telah memanggil Buat.

CContainedWindowT::SwitchMessageMap

Perubahan peta pesan mana yang akan digunakan untuk memproses pesan jendela yang terkandung.

void SwitchMessageMap(DWORD dwMsgMapID);

Parameter

dwMsgMapID
[di] Pengidentifikasi peta pesan. Untuk menggunakan peta pesan default yang dideklarasikan dengan BEGIN_MSG_MAP, lewati nol. Untuk menggunakan peta pesan alternatif yang dideklarasikan dengan ALT_MSG_MAP(msgMapID), teruskan msgMapID.

Keterangan

Peta pesan harus didefinisikan dalam objek yang berisi.

Anda awalnya menentukan pengidentifikasi peta pesan di konstruktor.

CContainedWindowT::UnsubclassWindow

Lepaskan jendela subkelas dari CContainedWindowT objek dan memulihkan prosedur jendela asli, disimpan dalam m_pfnSuperWindowProc.

HWND UnsubclassWindow(BOOL bForce = FALSE);

Parameter

bForce
[di] Atur ke TRUE untuk memaksa prosedur jendela asli dipulihkan meskipun prosedur jendela untuk objek ini CContainedWindowT saat ini tidak aktif. Jika bForce diatur ke FALSE dan prosedur jendela untuk objek ini CContainedWindowT saat ini tidak aktif, prosedur jendela asli tidak akan dipulihkan.

Tampilkan Nilai

Handel ke jendela yang sebelumnya disubkelas. Jika bForce diatur ke FALSE dan prosedur jendela untuk objek ini saat ini CContainedWindowT tidak aktif, mengembalikan NULL.

Keterangan

Gunakan metode ini hanya jika Anda ingin memulihkan prosedur jendela asli sebelum jendela dihancurkan. Jika tidak, WindowProc akan secara otomatis melakukan ini ketika jendela dihancurkan.

CContainedWindowT::WindowProc

Metode statis ini mengimplementasikan prosedur jendela.

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

Parameter

hWnd
[di] Handel ke jendela.

uMsg
[di] Pesan yang dikirim ke jendela.

wParam
[di] Informasi khusus pesan tambahan.

lParam
[di] Informasi khusus pesan tambahan.

Tampilkan Nilai

Hasil pemrosesan pesan.

Keterangan

WindowProc mengarahkan pesan ke peta pesan yang diidentifikasi oleh m_dwMsgMapID. Jika perlu, WindowProc panggil DefWindowProc untuk pemrosesan pesan tambahan.

Lihat juga

Kelas CWindow
Kelas CWindowImpl
Kelas CMessageMap
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
Gambaran Umum Kelas