Kelas CWindowImpl
Menyediakan metode untuk membuat atau subkelas jendela.
Penting
Kelas ini dan anggotanya tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime.
Sintaks
template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>
Parameter
T
Kelas baru Anda, berasal dari CWindowImpl
.
TBase
Kelas dasar kelas Anda. Secara default, kelas dasarnya adalah CWindow.
TWinTraits
Kelas sifat yang menentukan gaya untuk jendela Anda. Default adalah CControlWinTraits
.
Anggota
Metode Publik
Nama | Deskripsi |
---|---|
CWindowImpl::Create | Membuat jendela. |
Metode CWindowImplBaseT
Nama | Deskripsi |
---|---|
DefWindowProc | Menyediakan pemrosesan pesan default. |
GetCurrentMessage | Mengembalikan pesan saat ini. |
GetWindowProc | Mengembalikan prosedur jendela saat ini. |
OnFinalMessage | Dipanggil setelah pesan terakhir diterima (biasanya WM_NCDESTROY). |
SubclassWindow | Subkelas jendela. |
UnsubclassWindow | Memulihkan jendela yang sebelumnya disubkelas. |
Metode Statis
Nama | Deskripsi |
---|---|
GetWndClassInfo | Mengembalikan instans statis CWndClassInfo, yang mengelola informasi kelas jendela. |
WindowProc | Memproses pesan yang dikirim ke jendela. |
Anggota Data
Nama | Deskripsi |
---|---|
m_pfnSuperWindowProc | Menunjuk ke prosedur jendela asli kelas jendela. |
Keterangan
Anda dapat menggunakan CWindowImpl
untuk membuat jendela atau subkelas jendela yang ada. CWindowImpl
prosedur jendela menggunakan peta pesan untuk mengarahkan pesan ke handler yang sesuai.
CWindowImpl::Create
membuat jendela berdasarkan informasi kelas jendela yang dikelola oleh CWndClassInfo. CWindowImpl
berisi makro DECLARE_WND_CLASS, yang berarti CWndClassInfo
mendaftarkan kelas jendela baru. Jika Anda ingin superclass kelas jendela yang ada, dapatkan kelas Anda dari CWindowImpl
dan sertakan makro DECLARE_WND_SUPERCLASS . Dalam hal ini, CWndClassInfo
mendaftarkan kelas jendela yang didasarkan pada kelas yang ada tetapi menggunakan CWindowImpl::WindowProc
. Contoh:
class ATL_NO_VTABLE CMyWindow :
OtherInheritedClasses
public CComControl<CMyWindow>
// CComControl derives from CWindowImpl
{
public:
// 1. The NULL parameter means ATL will generate a
// name for the superclass
// 2. The "EDIT" parameter means the superclass is
// based on the standard Windows Edit box
DECLARE_WND_SUPERCLASS(NULL, _T("EDIT"))
// Remainder of class declaration omitted
Catatan
Karena CWndClassInfo
mengelola informasi hanya untuk satu kelas jendela, setiap jendela yang dibuat melalui instans CWindowImpl
didasarkan pada kelas jendela yang sama.
CWindowImpl
juga mendukung subkelas jendela. Metode SubclassWindow
melampirkan jendela yang ada ke CWindowImpl
objek dan mengubah prosedur jendela menjadi CWindowImpl::WindowProc
. Setiap instans CWindowImpl
dapat mensubkelas jendela yang berbeda.
Catatan
Untuk objek tertentu CWindowImpl
, panggil atau Create
SubclassWindow
. Jangan panggil kedua metode pada objek yang sama.
Selain CWindowImpl
, ATL menyediakan CContainedWindow untuk membuat jendela yang terkandung dalam objek lain.
Destruktor kelas dasar (~ CWindowImplRoot
) memastikan bahwa jendela hilang sebelum objek dihancurkan.
CWindowImpl
berasal dari CWindowImplBaseT
, yang berasal dari CWindowImplRoot
, yang berasal dari TBase
dan CMessageMap.
Untuk informasi lebih lanjut tentang | Lihat |
---|---|
Membuat kontrol | ATL Tutorial |
Menggunakan jendela di ATL | Kelas Jendela ATL |
Wizard Proyek ATL | Membuat Proyek ATL |
Hierarki Warisan
TBase
CWindowImplRoot
CWindowImplBaseT
CWindowImpl
Persyaratan
Header: atlwin.h
CWindowImpl::Create
Membuat jendela berdasarkan kelas jendela baru.
HWND Create(
HWND hWndParent,
_U_RECT rect = NULL,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
Parameter
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 ini dikombinasikan dengan gaya yang disediakan oleh kelas sifat untuk jendela. Nilai default memberi kelas sifat kontrol penuh atas gaya. Untuk daftar nilai yang mungkin, lihat CreateWindow di Windows SDK.
dwExStyle
[di] Gaya jendela yang diperluas. Nilai ini dikombinasikan dengan gaya yang disediakan oleh kelas sifat untuk jendela. Nilai default memberi kelas sifat kontrol penuh atas gaya. 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
Create
pertama-tama mendaftarkan kelas jendela jika belum terdaftar. Jendela yang baru dibuat secara otomatis dilampirkan ke CWindowImpl
objek.
Catatan
Jangan menelepon Create
jika Anda telah memanggil SubclassWindow.
Untuk menggunakan kelas jendela yang didasarkan pada kelas jendela yang ada, dapatkan kelas Anda dari CWindowImpl
dan sertakan makro DECLARE_WND_SUPERCLASS . Prosedur jendela kelas jendela yang ada disimpan di m_pfnSuperWindowProc. Untuk informasi selengkapnya, lihat gambaran umum CWindowImpl .
Catatan
Jika 0 digunakan sebagai nilai untuk parameter MenuOrID , itu harus ditentukan sebagai 0U (nilai default) untuk menghindari kesalahan pengkompilasi.
CWindowImpl::D efWindowProc
Dipanggil oleh WindowProc untuk memproses pesan yang tidak ditangani oleh peta pesan.
LRESULT DefWindowProc(
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
LRESULT DefWindowProc();
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.
Fungsi tanpa parameter secara otomatis mengambil parameter yang diperlukan dari pesan saat ini.
CWindowImpl::GetCurrentMessage
Mengembalikan pesan saat ini, yang MSG
dibungkus dalam struktur.
const MSG* GetCurrentMessage();
Tampilkan Nilai
Pesan saat ini.
CWindowImpl::GetWindowProc
Mengembalikan WindowProc
, prosedur jendela saat ini.
virtual WNDPROC GetWindowProc();
Tampilkan Nilai
Prosedur jendela saat ini.
Keterangan
Ambil alih metode ini untuk mengganti prosedur jendela dengan prosedur Anda sendiri.
CWindowImpl::GetWndClassInfo
Dipanggil oleh Buat untuk mengakses informasi kelas jendela.
static CWndClassInfo& GetWndClassInfo();
Tampilkan Nilai
Instans statis CWndClassInfo.
Keterangan
Secara default, CWindowImpl
mendapatkan metode ini melalui makro DECLARE_WND_CLASS , yang menentukan kelas jendela baru.
Untuk superclass kelas jendela yang ada, dapatkan kelas Anda dari CWindowImpl
dan sertakan makro DECLARE_WND_SUPERCLASS untuk mengambil alih GetWndClassInfo
. Untuk informasi selengkapnya, lihat gambaran umum CWindowImpl .
Selain menggunakan makro DECLARE_WND_CLASS dan DECLARE_WND_SUPERCLASS, Anda dapat mengambil alih GetWndClassInfo
dengan implementasi Anda sendiri.
CWindowImpl::m_pfnSuperWindowProc
Bergantung pada jendela, arahkan ke salah satu prosedur jendela berikut.
WNDPROC m_pfnSuperWindowProc;
Keterangan
Jenis jendela | Prosedur jendela |
---|---|
Jendela berdasarkan kelas jendela baru, ditentukan melalui makro DECLARE_WND_CLASS . | Fungsi DefWindowProc Win32. |
Jendela berdasarkan kelas jendela yang memodifikasi kelas yang ada, ditentukan melalui makro DECLARE_WND_SUPERCLASS . | Prosedur jendela kelas jendela yang ada. |
Jendela subkelas. | Prosedur jendela asli jendela subkelas. |
CWindowImpl::D efWindowProc mengirim informasi pesan ke prosedur jendela yang disimpan di m_pfnSuperWindowProc
.
CWindowImpl::OnFinalMessage
Dipanggil setelah menerima pesan terakhir (biasanya WM_NCDESTROY).
virtual void OnFinalMessage(HWND hWnd);
Parameter
hWnd
[di] Handel ke jendela sedang dihancurkan.
Keterangan
Implementasi OnFinalMessage
default tidak melakukan apa-apa, tetapi Anda dapat mengambil alih fungsi ini untuk menangani pembersihan sebelum menghancurkan jendela. Jika Anda ingin menghapus objek secara otomatis saat penghancuran jendela, Anda dapat memanggil delete this;
fungsi ini.
CWindowImpl::SubclassWindow
Subkelas jendela yang diidentifikasi oleh hWnd dan melampirkannya ke CWindowImpl
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 CWindowImpl::WindowProc. Prosedur jendela asli disimpan dalam m_pfnSuperWindowProc.
Catatan
Jangan panggil SubclassWindow
jika Anda telah memanggil Buat.
CWindowImpl::UnsubclassWindow
Lepaskan jendela subkelas dari CWindowImpl
objek dan memulihkan prosedur jendela asli, disimpan dalam m_pfnSuperWindowProc.
HWND UnsubclassWindow();
Tampilkan Nilai
Handel ke jendela yang sebelumnya disubkelas.
CWindowImpl::WindowProc
Fungsi 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
menggunakan peta pesan default (dideklarasikan dengan BEGIN_MSG_MAP) untuk mengarahkan pesan ke penangan yang sesuai. Jika perlu, WindowProc
panggil DefWindowProc untuk pemrosesan pesan tambahan. Jika pesan akhir tidak ditangani, WindowProc
lakukan hal berikut:
Melakukan unsubclassing jika jendela tidak disubclassed.
m_hWnd
Menghapus .Memanggil OnFinalMessage sebelum jendela dihancurkan.
Anda dapat mengambil alih WindowProc
untuk menyediakan mekanisme yang berbeda untuk menangani pesan.