Bagikan melalui


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. 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

CMessageMap

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.

Lihat juga

BEGIN_MSG_MAP
Kelas CComControl
Gambaran Umum Kelas