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.
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. CWindowImplberisi 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_hWndMenghapus .Memanggil OnFinalMessage sebelum jendela dihancurkan.
Anda dapat mengambil alih WindowProc untuk menyediakan mekanisme yang berbeda untuk menangani pesan.