Menerapkan Kotak Dialog
Ada dua cara untuk menambahkan kotak dialog ke proyek ATL Anda: gunakan Wizard Dialog ATL atau tambahkan secara manual.
Menambahkan Kotak Dialog dengan Panduan Dialog ATL
Dalam kotak dialog Tambahkan Kelas, pilih objek Dialog ATL untuk menambahkan kotak dialog ke proyek ATL Anda. Isi Wizard Dialog ATL yang sesuai dan klik Selesai. Wizard menambahkan kelas yang berasal dari CAxDialogImpl ke proyek Anda. Buka Tampilan Sumber Daya dari menu Tampilan , temukan dialog Anda, dan klik dua kali untuk membukanya di editor sumber daya.
Catatan
Jika kotak dialog Anda berasal dari CAxDialogImpl
, kotak dialog dapat menghosting kontrol ActiveX dan Windows. Jika Anda tidak ingin overhead dukungan kontrol ActiveX di kelas kotak dialog Anda, gunakan CSimpleDialog atau CDialogImpl sebagai gantinya.
Penangan pesan dan peristiwa dapat ditambahkan ke kelas dialog Anda dari Tampilan Kelas. Untuk informasi selengkapnya, lihat Menambahkan Handler Pesan ATL.
Menambahkan Kotak Dialog Secara Manual
Menerapkan kotak dialog mirip dengan menerapkan jendela. Anda mendapatkan kelas dari CAxDialogImpl, CDialogImpl, atau CSimpleDialog dan mendeklarasikan peta pesan untuk menangani pesan. Namun, Anda juga harus menentukan ID sumber daya templat dialog di kelas turunan Anda. Kelas Anda harus memiliki anggota data yang dipanggil IDD
untuk menyimpan nilai ini.
Catatan
Saat Anda membuat kotak dialog menggunakan Wizard Dialog ATL, wizard secara otomatis menambahkan IDD
anggota sebagai enum
tipe.
CDialogImpl
memungkinkan Anda menerapkan kotak dialog modal atau tanpa mode yang menghosting kontrol Windows. CAxDialogImpl
memungkinkan Anda menerapkan kotak dialog modal atau modeless yang menghosting kontrol ActiveX dan Windows.
Untuk membuat kotak dialog modal, buat instans kelas -turunan (atau CAxDialogImpl
-turunan) Anda CDialogImpl
lalu panggil metode DoModal. Untuk menutup kotak dialog modal, panggil metode EndDialog dari handler pesan. Untuk membuat kotak dialog tanpa mode, panggil metode Buat alih-alih DoModal
. Untuk menghancurkan kotak dialog tanpa mode, panggil DestroyWindow.
Peristiwa tenggelam secara otomatis dilakukan di CAxDialogImpl. Terapkan penanganan pesan kotak dialog seperti yang Anda lakukan pada handler di CWindowImpl
kelas -turunan. Jika ada nilai pengembalian khusus pesan, kembalikan sebagai LRESULT
. Nilai yang dikembalikan dipetakan LRESULT
oleh ATL untuk penanganan yang tepat oleh manajer dialog Windows. Untuk detailnya, lihat kode sumber untuk CDialogImplBaseT::D ialogProc di atlwin.h.
Contoh
Kelas berikut mengimplementasikan kotak dialog:
class CMyDialog : public CDialogImpl<CMyDialog>
{
public:
enum { IDD = IDD_MYDLG };
BEGIN_MSG_MAP(CMyDialog)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnBnClickedCancel)
END_MSG_MAP()
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
// Do some initialization code
return 1;
}
public:
LRESULT OnBnClickedCancel(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
};