Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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