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.
Untuk menerapkan jendela, dapatkan kelas dari CWindowImpl. Di kelas turunan Anda, deklarasikan peta pesan dan fungsi handler 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, teruskan 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 Kelas Windows yang Ada
Makro DECLARE_WND_SUPERCLASS memungkinkan Anda membuat jendela yang mengganti kelas Windows yang ada. Tentukan makro ini di kelas -turunan Anda CWindowImpl. 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: Superclass 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 Edit superkelas, buat instans CMyEdit lalu panggil Create metode .
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 disubkelas, jendela akan menggunakan CWindowImpl::WindowProc (atau fungsi Anda yang mengambil alih metode ini) untuk mengarahkan pesan ke peta pesan. Untuk melepaskan jendela subkelas dari objek Anda, panggil UnsubclassWindow. Prosedur jendela asli jendela kemudian akan dipulihkan.