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.
Untuk mendukung peta pesan, MFC menyediakan makro berikut:
Nama | Deskripsi |
---|---|
DECLARE_MESSAGE_MAP |
Menyatakan bahwa peta pesan akan digunakan di kelas untuk memetakan pesan ke fungsi (harus digunakan dalam deklarasi kelas). |
BEGIN_MESSAGE_MAP |
Memulai definisi peta pesan (harus digunakan dalam implementasi kelas). |
BEGIN_TEMPLATE_MESSAGE_MAP |
Memulai definisi peta pesan pada jenis kelas yang berisi argumen templat tunggal. |
END_MESSAGE_MAP |
Mengakhiri definisi peta pesan (harus digunakan dalam implementasi kelas). |
Nama | Deskripsi |
---|---|
ON_COMMAND |
Menunjukkan fungsi mana yang akan menangani pesan perintah tertentu. |
ON_COMMAND_EX |
Menunjukkan fungsi mana yang akan menangani pesan perintah tertentu. |
ON_CONTROL |
Menunjukkan fungsi mana yang akan menangani pesan pemberitahuan kontrol tertentu. |
ON_MESSAGE |
Menunjukkan fungsi mana yang akan menangani pesan yang ditentukan pengguna. |
ON_OLECMD |
Menunjukkan fungsi mana yang akan menangani perintah menu dari DocObject atau kontainernya. |
ON_REGISTERED_MESSAGE |
Menunjukkan fungsi mana yang akan menangani pesan terdaftar yang ditentukan pengguna. |
ON_REGISTERED_THREAD_MESSAGE |
Menunjukkan fungsi mana yang akan menangani pesan terdaftar yang ditentukan pengguna saat Anda memiliki CWinThread kelas. |
ON_THREAD_MESSAGE |
Menunjukkan fungsi mana yang akan menangani pesan yang ditentukan pengguna saat Anda memiliki CWinThread kelas. |
ON_UPDATE_COMMAND_UI |
Menunjukkan fungsi mana yang akan menangani pesan perintah pembaruan antarmuka pengguna tertentu. |
Nama | Deskripsi |
---|---|
ON_COMMAND_RANGE |
Menunjukkan fungsi mana yang akan menangani rentang ID perintah yang ditentukan dalam dua parameter pertama ke makro. |
ON_UPDATE_COMMAND_UI_RANGE |
Menunjukkan handler pembaruan mana yang akan menangani rentang ID perintah yang ditentukan dalam dua parameter pertama ke makro. |
ON_CONTROL_RANGE |
Menunjukkan fungsi mana yang akan menangani pemberitahuan dari rentang ID kontrol yang ditentukan dalam parameter kedua dan ketiga ke makro. Parameter pertama adalah pesan pemberitahuan kontrol, seperti BN_CLICKED . |
Untuk informasi selengkapnya tentang peta pesan, makro deklarasi dan demarkasi peta pesan, dan makro pemetaan pesan, lihat Peta Pesan dan Penanganan Pesan dan Topik Pemetaan. Untuk informasi selengkapnya tentang rentang peta pesan, lihat Penangan untuk Rentang Peta Pesan.
Memulai definisi peta pesan Anda.
BEGIN_MESSAGE_MAP( theClass, baseClass )
theClass
Menentukan nama kelas yang pesannya memetakan ini.
baseClass
Menentukan nama kelas theClass
dasar .
Dalam file implementasi (.cpp) yang menentukan fungsi anggota untuk kelas Anda, mulai peta pesan dengan BEGIN_MESSAGE_MAP
makro, lalu tambahkan entri makro untuk setiap fungsi penanganan pesan Anda, dan selesaikan peta pesan dengan END_MESSAGE_MAP
makro.
Untuk informasi selengkapnya tentang peta pesan, lihat Peta Pesan
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
ON_WM_CREATE()
END_MESSAGE_MAP()
Header: afxwin.h
Memulai definisi peta pesan pada jenis kelas yang berisi argumen templat tunggal.
BEGIN_TEMPLATE_MESSAGE_MAP( theClass, type_name, baseClass )
theClass
Menentukan nama kelas yang pesannya memetakan ini.
type_name
Nama parameter templat yang ditentukan untuk kelas .
baseClass
Menentukan nama kelas theClass
dasar .
Makro ini mirip BEGIN_MESSAGE_MAP
dengan makro; namun, makro ini ditujukan untuk kelas yang berisi argumen templat tunggal.
Di bagian implementasi metode kelas Anda, mulai peta pesan dengan BEGIN_TEMPLATE_MESSAGE_MAP
makro; lalu tambahkan entri makro untuk setiap metode penanganan pesan seperti yang Anda lakukan untuk peta pesan standar. Seperti halnya BEGIN_MESSAGE_MAP
makro, selesaikan peta pesan templat dengan END_MESSAGE_MAP
makro.
Untuk informasi selengkapnya tentang menerapkan peta pesan untuk kelas templat, lihat Cara: Membuat Peta Pesan untuk Kelas Templat.
Header: afxwin.h
Menyatakan bahwa kelas mendefinisikan peta pesan. Setiap CCmdTarget
kelas -turunan dalam program Anda harus menyediakan peta pesan untuk menangani pesan.
DECLARE_MESSAGE_MAP( )
DECLARE_MESSAGE_MAP
Gunakan makro di akhir deklarasi kelas Anda. Kemudian, dalam file .cpp yang menentukan fungsi anggota untuk kelas, gunakan BEGIN_MESSAGE_MAP
makro, entri makro untuk setiap fungsi pengelola pesan Anda, dan END_MESSAGE_MAP
makro.
Catatan
Jika Anda mendeklarasikan anggota DECLARE_MESSAGE_MAP
setelah , Anda harus menentukan jenis akses baru (public
, private
, atau protected
) untuk mereka.
Untuk informasi selengkapnya tentang peta pesan dan DECLARE_MESSAGE_MAP
makro, lihat Topik Penanganan dan Pemetaan Pesan.
class CMainFrame : public CMDIFrameWnd
{
DECLARE_MESSAGE_MAP()
// Remainder of class declaration omitted.
Header: afxwin.h
Mengakhiri definisi peta pesan Anda.
END_MESSAGE_MAP( )
Untuk informasi selengkapnya tentang peta pesan dan END_MESSAGE_MAP
makro, lihat Topik Penanganan dan Pemetaan Pesan.
Header: afxwin.h
Makro ini memetakan pesan perintah ke fungsi anggota.
ON_COMMAND( commandId, memberFxn )
commandId
ID perintah.
memberFxn
Nama fungsi message-handler tempat perintah dipetakan.
Ini menunjukkan fungsi mana yang akan menangani pesan perintah dari objek antarmuka pengguna perintah seperti item menu atau tombol toolbar.
Ketika objek target perintah menerima pesan Windows WM_COMMAND
dengan ID yang ditentukan, ON_COMMAND
akan memanggil fungsi memberFxn
anggota untuk menangani pesan.
Gunakan ON_COMMAND
untuk memetakan satu perintah ke fungsi anggota. Gunakan ON_COMMAND_RANGE
untuk memetakan rentang ID perintah ke satu fungsi anggota. Hanya satu entri peta pesan yang dapat mencocokkan ID perintah tertentu. Artinya, Anda tidak dapat memetakan perintah ke lebih dari satu handler. Untuk informasi dan contoh selengkapnya, lihat Topik Penanganan dan Pemetaan Pesan.
BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()
Header: afxmsg_.h
Fungsi anggota handler perintah yang diperluas.
ON_COMMAND_EX(commandId, memberFxn);
commandId
ID perintah.
memberFxn
Nama fungsi message-handler tempat perintah dipetakan.
Bentuk penangan pesan perintah yang diperluas tersedia untuk penggunaan tingkat lanjut. ON_COMMAND_EX
Makro digunakan untuk penanganan pesan tersebut, dan menyediakan superset ON_COMMAND
fungsionalitas. Fungsi anggota handler perintah yang diperluas mengambil satu parameter, yang UINT
berisi ID perintah, dan mengembalikan BOOL
. Nilai pengembalian harus TRUE
menunjukkan bahwa perintah telah ditangani; jika tidak, perutean akan berlanjut ke objek target perintah lainnya.
Untuk informasi selengkapnya, lihat Catatan Teknis [TN006: Peta Pesan]tm006-message-maps.md).
File header: afxmsg_.h
Menunjukkan fungsi mana yang akan menangani pesan pemberitahuan kontrol kustom.
ON_CONTROL( wNotifyCode, commandId, memberFxn )
wNotifyCode
Kode pemberitahuan kontrol.
commandId
ID perintah.
memberFxn
Nama fungsi message-handler tempat perintah dipetakan.
Pesan pemberitahuan kontrol adalah pesan yang dikirim dari kontrol ke jendela induknya.
Harus ada tepat satu ON_CONTROL
pernyataan makro di peta pesan Anda untuk setiap pesan pemberitahuan kontrol yang harus dipetakan ke fungsi penanganan pesan.
Untuk informasi dan contoh selengkapnya, lihat Topik Penanganan dan Pemetaan Pesan.
Header: afxmsg_.h
Menunjukkan fungsi mana yang akan menangani pesan yang ditentukan pengguna.
ON_MESSAGE( message, memberFxn )
message
ID pesan.
memberFxn
Nama fungsi message-handler tempat pesan dipetakan.
Jenis fungsi harus afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM)
.
Pesan yang ditentukan pengguna adalah pesan apa pun yang bukan merupakan pesan Windows WM_MESSAGE
standar. Saat memilih ID pesan, Anda harus menggunakan nilai dalam rentang WM_USER
(0x0400) untuk 0x7FFF atau WM_APP
(0x8000) untuk 0xBFFF. Untuk informasi selengkapnya mengenai ID pesan, lihat WM_APP
.
Harus ada tepat satu ON_MESSAGE
pernyataan makro di peta pesan Anda untuk setiap pesan yang ditentukan pengguna yang harus dipetakan ke fungsi penanganan pesan.
Catatan
Selain pesan yang ditentukan pengguna, ON_MESSAGE
menangani pesan Windows yang kurang umum. Untuk informasi selengkapnya, lihat Peta Pesan.
Untuk informasi dan contoh selengkapnya, lihat Topik Penanganan dan Pemetaan Pesan dan Penangan yang Ditentukan Pengguna
#define WM_MYMESSAGE (WM_USER + 100)
BEGIN_MESSAGE_MAP(CMyWnd2, CWnd)
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
END_MESSAGE_MAP()
// inside the class declaration
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
LRESULT CMyWnd2::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(wParam);
UNREFERENCED_PARAMETER(lParam);
// Handle message here.
return 0;
}
Header: afxmsg_.h
Merutekan perintah melalui antarmuka IOleCommandTarget
pengiriman perintah .
ON_OLECMD( pguid, olecmdid, commandId )
pguid
Pengidentifikasi grup perintah tempat perintah berada. Gunakan NULL
untuk grup standar.
olecmdid
Pengidentifikasi perintah OLE.
commandId
ID menu, ID toolbar, ID tombol, atau ID sumber daya atau objek lain yang mengeluarkan perintah.
IOleCommandTarget
memungkinkan kontainer untuk menerima perintah yang berasal dari antarmuka pengguna DocObject, dan memungkinkan kontainer untuk mengirim perintah yang sama (seperti Baru, Buka, Simpan, dan Cetak pada menu File; dan Salin, Tempel, Batalkan, dan sebagainya pada menu Edit) ke DocObject.
IOleCommandTarget
lebih sederhana daripada OLE Automation IDispatch
. IOleCommandTarget
sepenuhnya bergantung pada sekumpulan perintah standar yang jarang memiliki argumen, dan tidak ada informasi jenis yang terlibat (keamanan jenis juga berkurang untuk argumen perintah). Jika Anda perlu mengirimkan perintah dengan argumen, gunakan COleServerDoc::OnExecOleCmd
.
IOleCommandTarget
Perintah menu standar telah diimplementasikan oleh MFC dalam makro berikut:
ON_OLECMD_CLEARSELECTION( )
Mengirimkan perintah Edit Hapus. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_CLEARSELECTION, ID_EDIT_CLEAR)
ON_OLECMD_COPY( )
Mengirimkan perintah Edit Salin. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_COPY, ID_EDIT_COPY)
ON_OLECMD_CUT( )
Mengirimkan perintah Edit Potong. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_CUT, ID_EDIT_CUT)
ON_OLECMD_NEW( )
Mengirimkan perintah File Baru. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_NEW, ID_FILE_NEW)
ON_OLECMD_OPEN( )
Mengirimkan perintah Buka File. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_OPEN, ID_FILE_OPEN)
ON_OLECMD_PAGESETUP( )
Mengirimkan perintah Penyetelan Halaman File. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_PAGESETUP, ID_FILE_PAGE_SETUP)
ON_OLECMD_PASTE( )
Mengirimkan perintah Edit Tempel. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_PASTE, ID_EDIT_PASTE)
ON_OLECMD_PASTESPECIAL( )
Mengirimkan perintah Edit Tempel Spesial. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_PASTESPECIAL, ID_EDIT_PASTE_SPECIAL)
ON_OLECMD_PRINT( )
Mengirimkan perintah Cetak File. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_PRINT, ID_FILE_PRINT)
ON_OLECMD_PRINTPREVIEW( )
Mengirimkan perintah Pratinjau Cetak File. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_PRINTPREVIEW, ID_FILE_PRINT_PREVIEW)
ON_OLECMD_REDO( )
Mengirimkan perintah Edit Ulang. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_REDO, ID_EDIT_REDO)
ON_OLECMD_SAVE( )
Mengirimkan perintah Simpan File. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_SAVE, ID_FILE_SAVE)
ON_OLECMD_SAVE_AS( )
Mengirimkan perintah Simpan Sebagai File. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_SAVEAS, ID_FILE_SAVE_AS)
ON_OLECMD_SAVE_COPY_AS( )
Mengirimkan perintah Simpan File Salin Sebagai. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_SAVECOPYAS, ID_FILE_SAVE_COPY_AS)
ON_OLECMD_SELECTALL( )
Mengirimkan perintah Edit Pilih Semua. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_SELECTALL, ID_EDIT_SELECT_ALL)
ON_OLECMD_UNDO( )
Mengirimkan perintah Edit Batalkan. Diimplementasikan sebagai:
ON_OLECMD(NULL, OLECMDID_UNDO, ID_EDIT_UNDO)
Header: afxdocob.h
Fungsi Windows RegisterWindowMessage
digunakan untuk menentukan pesan jendela baru yang dijamin unik di seluruh sistem.
ON_REGISTERED_MESSAGE( nMessageVariable, memberFxn )
nMessageVariable
Variabel ID pesan jendela terdaftar.
memberFxn
Nama fungsi message-handler tempat pesan dipetakan.
Makro ini menunjukkan fungsi mana yang akan menangani pesan terdaftar.
Untuk informasi dan contoh selengkapnya, lihat Topik Penanganan dan Pemetaan Pesan.
static UINT NEAR WM_FIND = RegisterWindowMessage(_T("COMMDLG_FIND"));
BEGIN_MESSAGE_MAP(CMyWnd3, CWnd)
ON_REGISTERED_MESSAGE(WM_FIND, OnFind)
END_MESSAGE_MAP()
Header: afxmsg_.h
Menunjukkan fungsi mana yang akan menangani pesan yang didaftarkan oleh fungsi Windows RegisterWindowMessage
.
ON_REGISTERED_THREAD_MESSAGE(nMessageVariable, memberFxn )
nMessageVariable
Variabel ID pesan jendela terdaftar.
memberFxn
Nama CWinThread
fungsi -message-handler tempat pesan dipetakan.
RegisterWindowMessage
digunakan untuk menentukan pesan jendela baru yang dijamin unik di seluruh sistem. ON_REGISTERED_THREAD_MESSAGE
harus digunakan alih-alih ON_REGISTERED_MESSAGE
ketika Anda memiliki CWinThread
kelas.
Header: afxmsg_.h
Menunjukkan fungsi mana yang akan menangani pesan yang ditentukan pengguna.
ON_THREAD_MESSAGE( message, memberFxn )
message
ID pesan.
memberFxn
Nama CWinThread
fungsi -message-handler tempat pesan dipetakan.
ON_THREAD_MESSAGE
harus digunakan alih-alih ON_MESSAGE
ketika Anda memiliki CWinThread
kelas. Pesan yang ditentukan pengguna adalah pesan apa pun yang bukan merupakan pesan Windows WM_MESSAGE
standar. Harus ada tepat satu ON_THREAD_MESSAGE
pernyataan makro di peta pesan Anda untuk setiap pesan yang ditentukan pengguna yang harus dipetakan ke fungsi penanganan pesan.
Header: afxole.h
Makro ini menunjukkan fungsi mana yang akan menangani pesan perintah pembaruan antarmuka pengguna.
ON_UPDATE_COMMAND_UI( messageId, memberFxn )
messageId
ID pesan.
memberFxn
Nama fungsi message-handler tempat pesan dipetakan.
Harus ada tepat satu ON_UPDATE_COMMAND_UI
pernyataan makro di peta pesan Anda untuk setiap perintah pembaruan antarmuka pengguna yang harus dipetakan ke fungsi penanganan pesan.
Untuk informasi dan contoh selengkapnya, lihat Topik Penanganan dan Pemetaan Pesan.
Header: afxole.h
Gunakan makro ini untuk memetakan rentang ID perintah yang bersebelahan ke satu fungsi handler pesan.
ON_COMMAND_RANGE( id1, id2, memberFxn )
id1
ID perintah di awal rentang ID perintah yang bersebelahan.
id2
ID perintah di akhir rentang ID perintah yang bersebelahan.
memberFxn
Nama fungsi message-handler tempat perintah dipetakan.
Rentang ID dimulai dengan id1
dan diakhir dengan id2
.
Gunakan ON_COMMAND_RANGE
untuk memetakan rentang ID perintah ke satu fungsi anggota. Gunakan ON_COMMAND
untuk memetakan satu perintah ke fungsi anggota. Hanya satu entri peta pesan yang dapat mencocokkan ID perintah tertentu. Artinya, Anda tidak dapat memetakan perintah ke lebih dari satu handler. Untuk informasi selengkapnya tentang pemetaan rentang pesan, lihat Penangan untuk Rentang Peta Pesan.
Tidak ada dukungan otomatis untuk rentang peta pesan, jadi Anda harus menempatkan makro sendiri.
// The code fragment below shows how to use ON_COMMAND_RANGE macro
// to map a contiguous range of command IDs to a single message
// handler function (i.e. OnRangeCmds() in the sample below). In
// addition, it also shows how to use CheckMenuRadioItem() to check a
// selected menu item and makes it a radio item.
BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
ON_COMMAND_RANGE(ID_COMMAND_RANGECMD1, ID_COMMAND_RANGECMD3, &CChildFrame::OnRangeCmds)
END_MESSAGE_MAP()
void CChildFrame::OnRangeCmds(UINT nID)
{
CMenu* mmenu = AfxGetMainWnd()->GetMenu();
CMenu* submenu = mmenu->GetSubMenu(5);
submenu->CheckMenuRadioItem(ID_COMMAND_RANGECMD1, ID_COMMAND_RANGECMD3,
nID, MF_BYCOMMAND);
}
Header: afxmsg_.h
Memetakan rentang ID perintah yang bersebelahan ke satu fungsi handler pesan pembaruan.
ON_UPDATE_COMMAND_UI_RANGE( id1, id2, memberFxn )
id1
ID perintah di awal rentang ID perintah yang bersebelahan.
id2
ID perintah di akhir rentang ID perintah yang bersebelahan.
memberFxn
Nama fungsi update message-handler tempat perintah dipetakan.
Perbarui penangan pesan memperbarui status item menu dan tombol toolbar yang terkait dengan perintah. Rentang ID dimulai dengan id1
dan diakhir dengan id2
.
Tidak ada dukungan otomatis untuk rentang peta pesan, jadi Anda harus menempatkan makro sendiri.
Header: afxmsg_.h
Gunakan makro ini untuk memetakan rentang ID kontrol yang bersebelahan ke fungsi handler pesan tunggal untuk pesan pemberitahuan Windows tertentu, seperti BN_CLICKED
.
ON_CONTROL_RANGE( wNotifyCode, id1, id2, memberFxn )
wNotifyCode
Kode pemberitahuan yang direspons oleh handler Anda.
id1
ID Perintah di awal rentang ID kontrol yang bersebelahan.
id2
ID perintah di akhir rentang ID kontrol yang bersebelahan.
memberFxn
Nama fungsi message-handler tempat kontrol dipetakan.
Rentang ID dimulai dengan id1
dan diakhir dengan id2
. Handler dipanggil untuk pemberitahuan yang ditentukan yang berasal dari salah satu kontrol yang dipetakan.
Tidak ada dukungan otomatis untuk rentang peta pesan, jadi Anda harus menempatkan makro sendiri.
Untuk informasi selengkapnya tentang menerapkan fungsi handler untuk berbagai ID kontrol, lihat Handler untuk Rentang Peta Pesan.
Header: afxmsg_.h
ON_COMMAND
TN006: Peta Pesan
COleCmdUI
Kelas
COleServerDoc::OnExecOleCmd
RegisterWindowMessage
Handler yang Ditentukan Pengguna
CCmdUI
Kelas