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.
Catatan
Pustaka Templat Aktif (ATL) terus didukung. Namun, kami tidak lagi menambahkan fitur atau memperbarui dokumentasi.
Untuk menerapkan jendela, dapatkan kelas dari CWindowImpl. Di kelas turunan Anda, deklarasikan pemetaan pesan dan fungsi penangan pesan. Anda sekarang dapat menggunakan kelas Anda dengan tiga cara berbeda:
Membuat Jendela Berdasarkan Kelas Windows Baru
CWindowImpl
berisi makro DECLARE_WND_CLASS untuk mendeklarasikan informasi kelas Windows. Makro ini mengimplementasikan GetWndClassInfo fungsi , yang menggunakan CWndClassInfo untuk menentukan informasi kelas Windows baru. Ketika CWindowImpl::Create dipanggil, kelas Windows ini terdaftar dan jendela baru dibuat.
Catatan
CWindowImpl meneruskan NULL ke DECLARE_WND_CLASS makro, yang berarti ATL akan menghasilkan nama kelas Windows. Untuk menentukan nama Anda sendiri, berikan string ke DECLARE_WND_CLASS di kelas turunan Anda CWindowImpl.
Contoh: Menerapkan jendela
Berikut ini adalah contoh kelas yang mengimplementasikan jendela berdasarkan kelas Windows baru:
class CMyCustomWnd : public CWindowImpl<CMyCustomWnd>
{
public:
// Optionally specify name of the new Windows class
DECLARE_WND_CLASS(_T("MyName"))
// If this macro is not specified in your
// class, ATL will generate a class name
BEGIN_MSG_MAP(CMyCustomWnd)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
// Do some painting code
return 0;
}
};
Untuk membuat jendela, buat instans CMyWindow lalu panggil Create metode .
Catatan
Untuk mengambil alih informasi kelas Windows default, terapkan GetWndClassInfo metode di kelas turunan Anda dengan mengatur CWndClassInfo anggota ke nilai yang sesuai.
Superclassing (Pewarisan Kelas) Kelas Windows yang Sudah Ada
Makro DECLARE_WND_SUPERCLASS memungkinkan Anda membuat jendela yang mengganti kelas Windows yang ada. Tentukan makro ini di kelas turunan CWindowImpl Anda. Seperti jendela ATL lainnya, pesan ditangani oleh peta pesan.
Ketika Anda menggunakan DECLARE_WND_SUPERCLASS, kelas Windows baru akan didaftarkan. Kelas baru ini akan sama dengan kelas yang ada yang Anda tentukan, tetapi akan mengganti prosedur jendela dengan CWindowImpl::WindowProc (atau dengan fungsi Anda yang mengambil alih metode ini).
Contoh: kelas induk dari kelas Edit
Berikut ini adalah contoh kelas yang menggantikan kelas Edit standar:
class CMyEdit : public CWindowImpl<CMyEdit>
{
public:
// "Edit" is the name of the standard Windows class.
// "MyEdit" is the name of the new Windows class
// that will be based on the Edit class.
DECLARE_WND_SUPERCLASS(_T("MyEdit"), _T("Edit"))
BEGIN_MSG_MAP(CMyEdit)
MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()
LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
// Do some character handling code
return 0;
}
};
Untuk membuat jendela superkelas Edit, buat instans CMyEdit lalu panggil metode Create.
Subkelas Jendela yang Ada
Untuk mensubkelas jendela yang ada, dapatkan kelas dari CWindowImpl dan deklarasikan peta pesan, seperti pada dua kasus sebelumnya. Namun, perhatikan bahwa Anda tidak menentukan informasi kelas Windows apa pun, karena Anda akan subkelas jendela yang sudah ada.
Alih-alih memanggil Create, panggil SubclassWindow dan teruskan handel ke jendela yang ada yang ingin Anda subkelas. Setelah jendela di-subclass, jendela akan menggunakan CWindowImpl::WindowProc (atau fungsi Anda yang menggantikan metode ini) untuk mengarahkan pesan ke peta pesan. Untuk melepaskan jendela subkelas dari objek Anda, panggil UnsubclassWindow. Prosedur asli dari jendela kemudian akan dipulihkan.