Bagikan melalui


Kelas CMDIChildWnd

Menyediakan fungsionalitas jendela turunan antarmuka beberapa dokumen (MDI) Windows, bersama dengan anggota untuk mengelola jendela.

Sintaks

class CMDIChildWnd : public CFrameWnd

Anggota

Konstruktor Publik

Nama Deskripsi
CMDIChildWnd::CMDIChildWnd Membuat CMDIChildWnd objek.

Metode Publik

Nama Deskripsi
CMDIChildWnd::Create Membuat jendela anak Windows MDI yang terkait dengan CMDIChildWnd objek.
CMDIChildWnd::GetMDIFrame Mengembalikan bingkai MDI induk dari jendela klien MDI.
CMDIChildWnd::MDIActivate Mengaktifkan jendela anak MDI ini.
CMDIChildWnd::MDIDestroy Menghancurkan jendela anak MDI ini.
CMDIChildWnd::MDIMaximize Memaksimalkan jendela anak MDI ini.
CMDIChildWnd::MDIRestore Memulihkan jendela anak MDI ini dari ukuran yang dimaksimalkan atau diminimalkan.
CMDIChildWnd::SetHandles Mengatur handel untuk menu dan sumber daya akselerator.

Keterangan

Jendela anak MDI terlihat seperti jendela bingkai biasa, kecuali bahwa jendela anak MDI muncul di dalam jendela bingkai MDI daripada di desktop. Jendela anak MDI tidak memiliki bilah menu sendiri, tetapi sebaliknya berbagi menu jendela bingkai MDI. Kerangka kerja secara otomatis mengubah menu bingkai MDI untuk mewakili jendela anak MDI yang saat ini aktif.

Untuk membuat jendela anak MDI yang berguna untuk aplikasi Anda, dapatkan kelas dari CMDIChildWnd. Tambahkan variabel anggota ke kelas turunan untuk menyimpan data khusus untuk aplikasi Anda. Terapkan fungsi anggota penangan pesan dan peta pesan di kelas turunan untuk menentukan apa yang terjadi ketika pesan diarahkan ke jendela.

Ada tiga cara untuk membangun jendela anak MDI:

  • Langsung membangunnya menggunakan Create.

  • Langsung membangunnya menggunakan LoadFrame.

  • Secara tidak langsung membangunnya melalui templat dokumen.

Sebelum memanggil Create atau LoadFrame, Anda harus membuat objek jendela bingkai pada tumpukan menggunakan operator C++ new . Sebelum memanggil Create , Anda juga dapat mendaftarkan kelas jendela dengan fungsi global AfxRegisterWndClass untuk mengatur ikon dan gaya kelas untuk bingkai.

Create Gunakan fungsi anggota untuk meneruskan parameter pembuatan bingkai sebagai argumen langsung.

LoadFrame membutuhkan lebih sedikit argumen daripada Create, dan sebaliknya mengambil sebagian besar nilai defaultnya dari sumber daya, termasuk keterangan bingkai, ikon, tabel akselerator, dan menu. Agar dapat diakses oleh LoadFrame, semua sumber daya ini harus memiliki ID sumber daya yang sama (misalnya, IDR_MAINFRAME).

Saat objek CMDIChildWnd berisi tampilan dan dokumen, objek dibuat secara tidak langsung oleh kerangka kerja alih-alih langsung oleh programmer. Objek CDocTemplate mengatur pembuatan bingkai, pembuatan tampilan yang berisi, dan koneksi tampilan ke dokumen yang sesuai. Parameter CDocTemplate konstruktor menentukan CRuntimeClass dari tiga kelas yang terlibat (dokumen, bingkai, dan tampilan). Objek CRuntimeClass digunakan oleh kerangka kerja untuk membuat bingkai baru secara dinamis saat ditentukan oleh pengguna (misalnya, dengan menggunakan perintah File Baru atau perintah MDI Window New).

Kelas jendela bingkai yang berasal harus CMDIChildWnd dideklarasikan dengan DECLARE_DYNCREATE agar mekanisme RUNTIME_CLASS di atas berfungsi dengan benar.

Kelas CMDIChildWnd mewarisi banyak implementasi defaultnya dari CFrameWnd. Untuk daftar terperinci fitur-fitur ini, silakan lihat deskripsi kelas CFrameWnd . Kelas CMDIChildWnd ini memiliki fitur tambahan berikut:

  • Bersama dengan CMultiDocTemplate kelas , beberapa CMDIChildWnd objek dari templat dokumen yang sama berbagi menu yang sama, menyimpan sumber daya sistem Windows.

  • Menu jendela anak MDI yang saat ini aktif sepenuhnya menggantikan menu jendela bingkai MDI, dan keterangan jendela anak MDI yang saat ini aktif ditambahkan ke keterangan jendela bingkai MDI. Untuk contoh lebih lanjut fungsi jendela anak MDI yang diimplementasikan bersama dengan jendela bingkai MDI, lihat CMDIFrameWnd deskripsi kelas.

Jangan gunakan operator C++ delete untuk menghancurkan jendela bingkai. Gunakan CWnd::DestroyWindow sebagai gantinya. Implementasi CFrameWndPostNcDestroy akan menghapus objek C++ saat jendela dihancurkan. Ketika pengguna menutup jendela bingkai, handler default OnClose akan memanggil DestroyWindow.

Untuk informasi selengkapnya tentang CMDIChildWnd, lihat Bingkai Windows.

Hierarki Warisan

CObject

CCmdTarget

CWnd

CFrameWnd

CMDIChildWnd

Persyaratan

Header: afxwin.h

CMDIChildWnd::CMDIChildWnd

Panggil untuk membuat CMDIChildWnd objek.

CMDIChildWnd();

Keterangan

Panggil Create untuk membuat jendela yang terlihat.

Contoh

Lihat contoh untuk CMDIChildWnd::Create.

CMDIChildWnd::Create

Panggil fungsi anggota ini untuk membuat jendela anak Windows MDI dan melampirkannya ke CMDIChildWnd objek.

virtual BOOL Create(
    LPCTSTR lpszClassName,
    LPCTSTR lpszWindowName,
    DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
    const RECT& rect = rectDefault,
    CMDIFrameWnd* pParentWnd = NULL,
    CCreateContext* pContext = NULL);

Parameter

lpszClassName
Menunjuk ke string karakter null-terminated yang memberi nama kelas Windows ( struktur WNDCLASS ). Nama kelas dapat berupa nama apa pun yang terdaftar dengan fungsi global AfxRegisterWndClass . Harus NULL untuk standar CMDIChildWnd.

lpszWindowName
Menunjuk ke string karakter null-terminated yang mewakili nama jendela. Digunakan sebagai teks untuk bilah judul.

dwStyle
Menentukan atribut gaya jendela. Gaya WS_CHILD diperlukan.

rect
Berisi ukuran dan posisi jendela. Nilai memungkinkan rectDefault Windows untuk menentukan ukuran dan posisi baru CMDIChildWnd.

pParentWnd
Menentukan induk jendela. Jika NULL, jendela aplikasi utama digunakan.

pContext
Menentukan struktur CCreateContext. Parameter ini bisa NULL.

Tampilkan Nilai

Bukan nol jika berhasil; jika tidak, 0.

Keterangan

Jendela bingkai anak MDI yang saat ini aktif dapat menentukan keterangan jendela bingkai induk. Fitur ini dinonaktifkan dengan menonaktifkan bit gaya FWS_ADDTOTITLE dari jendela bingkai anak.

Kerangka kerja memanggil fungsi anggota ini sebagai respons terhadap perintah pengguna untuk membuat jendela anak, dan kerangka kerja menggunakan parameter pContext untuk menghubungkan jendela anak dengan benar ke aplikasi. Ketika Anda memanggil Create, pContext dapat berupa NULL.

Contoh 1

Contoh penangan perintah menu ini memanggil Create untuk membuat jendela anak MDI:

// CMainFrame::OnFileNewCMdiChildWnd() is a menu command handler for the
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It shows the creation of a standard Windows MDI child window using
// the registered CMDIChildWnd class.
void CMainFrame::OnFileNewMdiChildWnd()
{
   CMDIChildWnd *pMDIChildWnd = new CMDIChildWnd;
   VERIFY(pMDIChildWnd->Create(
       NULL,                                        // standard CMDIChildWnd class
       _T("My MDIChildWnd"),                        // caption of MDI child window
       WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, // window styles
       rectDefault,                                 // default rectangle size
       this));                                      // parent window; can be NULL

   // the default PostNcDestroy handler will delete this object when destroyed
}

Contoh 2

Contoh kode memanggil Create metode CHelloWnd, kelas yang berasal dari CMDIChildWnd:

// CMainFrame::OnHello() is a menu command handler for the CMainFrame
// class, which in turn is a CMDIFrameWnd-derived class.
// It shows the creation of a Windows MDI child window using a custom
// window class. The custom window class is registered in
// CHelloWnd::Create(). CHelloWnd is a CMDIChildWnd-derived class.
void CMainFrame::OnHello()
{
   CHelloWnd *pHelloWnd = new CHelloWnd;
   if (!pHelloWnd->Create(_T("Hello"),
                          WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                          rectDefault, this))
      return;

   // the default PostNcDestroy handler will delete this object when destroyed
}

Contoh ini menunjukkan Create implementasi CHelloWnd kelas:

BOOL CHelloWnd::Create(
    LPCTSTR szTitle,
    LONG style /* = 0 */,
    const RECT &rect /* = rectDefault */,
    CMDIFrameWnd *parent /* = NULL */)
{
   // Setup the shared menu
   SetHandles(::LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_HELLO)),
              NULL);

   // Register a custom WndClass and create a window.
   // This must be done because CHelloWnd has a custom icon.
   LPCTSTR lpszHelloClass =
       AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
                           LoadCursor(NULL, IDC_ARROW),
                           (HBRUSH)(COLOR_WINDOW + 1),
                           LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_HELLO)));

   return CMDIChildWnd::Create(lpszHelloClass, szTitle, style, rect, parent);
}

CMDIChildWnd::GetMDIFrame

Panggil fungsi ini untuk mengembalikan bingkai induk MDI.

CMDIFrameWnd* GetMDIFrame();

Tampilkan Nilai

Penunjuk ke jendela bingkai induk MDI.

Keterangan

Bingkai yang dikembalikan adalah dua induk yang dihapus dari CMDIChildWnd dan merupakan induk dari jendela jenis MDICLIENT yang mengelola CMDIChildWnd objek. Panggil fungsi anggota GetParent untuk mengembalikan CMDIChildWnd induk MDICLIENT langsung objek sebagai penunjuk sementaraCWnd.

Contoh

Lihat contoh untuk CMDIFrameWnd::MDISetMenu.

CMDIChildWnd::MDIActivate

Panggil fungsi anggota ini untuk mengaktifkan jendela anak MDI secara independen dari jendela bingkai MDI.

void MDIActivate();

Keterangan

Ketika bingkai menjadi aktif, jendela anak yang terakhir diaktifkan juga akan diaktifkan.

Contoh

Lihat contoh untuk CMDIFrameWnd::GetWindowMenuPopup.

CMDIChildWnd::MDIDestroy

Panggil fungsi anggota ini untuk menghancurkan jendela anak MDI.

void MDIDestroy();

Keterangan

Fungsi anggota menghapus judul jendela anak dari jendela bingkai dan menonaktifkan jendela anak.

Contoh

// CMainFrame::OnCloseWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived
// class. It closes and destroys the current active MDI child window.
void CMainFrame::OnCloseWindow()
{
   CMDIChildWnd *child = MDIGetActive();
   if (child)
      child->MDIDestroy();
}

CMDIChildWnd::MDIMaximize

Panggil fungsi anggota ini untuk memaksimalkan jendela anak MDI.

void MDIMaximize();

Keterangan

Ketika jendela anak dimaksimalkan, Windows mengubah ukurannya untuk membuat area kliennya mengisi area klien jendela bingkai. Windows menempatkan menu Kontrol jendela anak di bilah menu bingkai sehingga pengguna dapat memulihkan atau menutup jendela anak dan menambahkan judul jendela anak ke judul jendela bingkai.

Contoh

// CMainFrame::OnMaximizeWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived
// class. It maximizes the current active MDI child window.
void CMainFrame::OnMaximizeWindow()
{
   BOOL maximized;
   CMDIChildWnd *child = MDIGetActive(&maximized);
   if (child && (!maximized))
      child->MDIMaximize(); // or MDIMaximize(child);
}

CMDIChildWnd::MDIRestore

Panggil fungsi anggota ini untuk memulihkan jendela anak MDI dari ukuran yang dimaksimalkan atau diminimalkan.

void MDIRestore();

Contoh

// CMainFrame::OnRestoreWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It restores the current active MDI child window from maximized
// or minimized size.
void CMainFrame::OnRestoreWindow()
{
   BOOL maximized;
   CMDIChildWnd *child = MDIGetActive(&maximized);
   if (child && (maximized || child->IsIconic()))
      child->MDIRestore(); // or MDIRestore(child);
}

CMDIChildWnd::SetHandles

Mengatur handel untuk menu dan sumber daya akselerator.

void SetHandles(
    HMENU hMenu,
    HACCEL hAccel);

Parameter

hMenu
Handel sumber daya menu.

hAccel
Handel sumber daya akselerator.

Keterangan

Panggil fungsi ini untuk mengatur menu dan sumber daya akselerator yang digunakan oleh objek jendela anak MDI.

Baca juga

MFC Sampel MDI
MFC Sampel MDIDOCVW
Sampel MFC SNAPVW
Kelas CFrameWnd
Bagan Hierarki
Kelas CWnd
Kelas CMDIFrameWnd