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.
Enkapsulasi Windows HMENU.
Sintaks
class CMenu : public CObject
Anggota
Konstruktor Publik
| Nama | Deskripsi |
|---|---|
CMenu::CMenu |
Membuat CMenu objek. |
Metode Publik
| Nama | Deskripsi |
|---|---|
CMenu::AppendMenu |
Menambahkan item baru ke akhir menu ini. |
CMenu::Attach |
Melampirkan handel menu Windows ke CMenu objek. |
CMenu::CheckMenuItem |
Menempatkan tanda centang di samping atau menghapus tanda centang dari item menu di menu pop-up. |
CMenu::CheckMenuRadioItem |
Menempatkan tombol radio di samping item menu dan menghapus tombol radio dari semua item menu lainnya dalam grup. |
CMenu::CreateMenu |
Membuat menu kosong dan melampirkannya ke CMenu objek. |
CMenu::CreatePopupMenu |
Membuat menu pop-up kosong dan melampirkannya ke CMenu objek. |
CMenu::DeleteMenu |
Menghapus item tertentu dari menu. Jika item menu memiliki menu pop-up terkait, menghancurkan handel ke menu pop-up dan membebaskan memori yang digunakan olehnya. |
CMenu::DeleteTempMap |
Menghapus objek sementara CMenu yang dibuat oleh FromHandle fungsi anggota. |
CMenu::DestroyMenu |
Menghancurkan menu yang CMenu dilampirkan ke objek dan membebaskan memori apa pun yang ditempati menu. |
CMenu::Detach |
Mencopot handel menu Windows dari CMenu objek dan mengembalikan handel. |
CMenu::DrawItem |
Dipanggil oleh kerangka kerja saat aspek visual menu yang digambar pemilik berubah. |
CMenu::EnableMenuItem |
Mengaktifkan, menonaktifkan, atau meringkas (abu-abu) item menu. |
CMenu::FromHandle |
Mengembalikan penunjuk ke objek yang CMenu diberikan handel menu Windows. |
CMenu::GetDefaultItem |
Menentukan item menu default pada menu yang ditentukan. |
CMenu::GetMenuContextHelpId |
Mengambil ID konteks bantuan yang terkait dengan menu. |
CMenu::GetMenuInfo |
Mengambil informasi pada menu tertentu. |
CMenu::GetMenuItemCount |
Menentukan jumlah item dalam menu pop-up atau tingkat atas. |
CMenu::GetMenuItemID |
Mendapatkan pengidentifikasi item menu untuk item menu yang terletak pada posisi yang ditentukan. |
CMenu::GetMenuItemInfo |
Mengambil informasi tentang item menu. |
CMenu::GetMenuState |
Mengembalikan status item menu yang ditentukan atau jumlah item dalam menu pop-up. |
CMenu::GetMenuString |
Mengambil label item menu yang ditentukan. |
CMenu::GetSafeHmenu |
Mengembalikan yang dibungkus m_hMenu oleh objek ini CMenu . |
CMenu::GetSubMenu |
Mengambil penunjuk ke menu pop-up. |
CMenu::InsertMenu |
Menyisipkan item menu baru pada posisi yang ditentukan, memindahkan item lain ke bawah menu. |
CMenu::InsertMenuItem |
Sisipkan item menu baru pada posisi yang ditentukan dalam menu. |
CMenu::LoadMenu |
Memuat sumber daya menu dari file yang dapat dieksekusi dan melampirkannya ke CMenu objek. |
CMenu::LoadMenuIndirect |
Memuat menu dari templat menu dalam memori dan melampirkannya ke CMenu objek. |
CMenu::MeasureItem |
Dipanggil oleh kerangka kerja untuk menentukan dimensi menu saat menu yang digambar pemilik dibuat. |
CMenu::ModifyMenu |
Mengubah item menu yang ada pada posisi yang ditentukan. |
CMenu::RemoveMenu |
Menghapus item menu dengan menu pop-up terkait dari menu yang ditentukan. |
CMenu::SetDefaultItem |
Mengatur item menu default untuk menu yang ditentukan. |
CMenu::SetMenuContextHelpId |
Mengatur ID konteks bantuan yang akan dikaitkan dengan menu. |
CMenu::SetMenuInfo |
Mengatur informasi pada menu tertentu. |
CMenu::SetMenuItemBitmaps |
Mengaitkan bitmap tanda centang yang ditentukan dengan item menu. |
CMenu::SetMenuItemInfo |
Mengubah informasi tentang item menu. |
CMenu::TrackPopupMenu |
Menampilkan menu pop-up mengambang di lokasi yang ditentukan dan melacak pilihan item pada menu pop-up. |
CMenu::TrackPopupMenuEx |
Menampilkan menu pop-up mengambang di lokasi yang ditentukan dan melacak pilihan item pada menu pop-up. |
Operator Publik
| Nama | Deskripsi |
|---|---|
CMenu::operator HMENU |
Mengambil handel objek menu. |
CMenu::operator != |
Menentukan apakah dua objek menu tidak sama. |
CMenu::operator == |
Menentukan apakah dua objek menu sama. |
Anggota Data Publik
| Nama | Deskripsi |
|---|---|
CMenu::m_hMenu |
Menentukan handel ke menu Windows yang dilampirkan ke CMenu objek. |
Keterangan
Ini menyediakan fungsi anggota untuk membuat, melacak, memperbarui, dan menghancurkan menu.
Buat CMenu objek pada bingkai tumpukan sebagai lokal, lalu panggil CMenufungsi anggota untuk memanipulasi menu baru sesuai kebutuhan. Selanjutnya, panggil CWnd::SetMenu untuk mengatur menu ke jendela, diikuti segera dengan panggilan ke CMenu fungsi anggota objek Detach . Fungsi CWnd::SetMenu anggota mengatur menu jendela ke menu baru, menyebabkan jendela digambar ulang untuk mencerminkan perubahan menu, dan juga meneruskan kepemilikan menu ke jendela. Panggilan untuk Detach melepaskan HMENU dari CMenu objek, sehingga ketika variabel lokal CMenu melewati cakupan, CMenu destruktor objek tidak mencoba menghancurkan menu yang tidak lagi dimilikinya. Menu itu sendiri secara otomatis dihancurkan ketika jendela dihancurkan.
Anda dapat menggunakan LoadMenuIndirect fungsi anggota untuk membuat menu dari templat dalam memori, tetapi menu yang dibuat dari sumber daya dengan panggilan ke LoadMenu lebih mudah dikelola, dan sumber daya menu itu sendiri dapat dibuat dan dimodifikasi oleh editor menu.
Hierarki Warisan
CMenu
Persyaratan
Header: afxwin.h
CMenu::AppendMenu
Menambahkan item baru ke akhir menu.
BOOL AppendMenu(
UINT nFlags,
UINT_PTR nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL AppendMenu(
UINT nFlags,
UINT_PTR nIDNewItem,
const CBitmap* pBmp);
Parameter
nFlags
Menentukan informasi tentang status item menu baru saat ditambahkan ke menu. Ini terdiri dari satu atau beberapa nilai yang tercantum di bagian Keterangan.
nIDNewItem
Menentukan ID perintah item menu baru atau, jika nFlags diatur ke MF_POPUP, handel menu (HMENU) menu pop-up. Parameter nIDNewItem diabaikan (tidak diperlukan) jika nFlags diatur ke MF_SEPARATOR.
lpszNewItem
Menentukan isi item menu baru. Parameter nFlags digunakan untuk menafsirkan lpszNewItem dengan cara berikut:
nFlags |
Interpretasi dari lpszNewItem |
|---|---|
MF_OWNERDRAW |
Berisi nilai 32-bit yang disediakan aplikasi yang dapat digunakan aplikasi untuk mempertahankan data tambahan yang terkait dengan item menu. Nilai 32-bit ini tersedia untuk aplikasi saat diproses WM_MEASUREITEM dan WM_DRAWITEM pesan. Nilai disimpan dalam itemData anggota struktur yang disediakan dengan pesan tersebut. |
MF_STRING |
Berisi penunjuk ke string yang dihentikan null. Ini adalah interpretasi default. |
MF_SEPARATOR |
Parameter lpszNewItem diabaikan (tidak diperlukan). |
pBmp
Menunjuk ke CBitmap objek yang akan digunakan sebagai item menu.
Tampilkan Nilai
Bukan nol jika fungsi berhasil; jika tidak, 0.
Keterangan
Aplikasi dapat menentukan status item menu dengan mengatur nilai di nFlags. Saat nIDNewItem menentukan menu pop-up, menu tersebut menjadi bagian dari menu tempat menu ditambahkan. Jika menu tersebut dihancurkan, menu yang ditambahkan juga akan dihancurkan. Menu tambahan harus dilepas dari CMenu objek untuk menghindari konflik. Perhatikan bahwa MF_STRING dan MF_OWNERDRAW tidak valid untuk versi bitmap .AppendMenu
Daftar berikut ini menjelaskan bendera yang mungkin diatur dalam nFlags:
MF_CHECKEDBertindak sebagai tombolMF_UNCHECKEDdengan untuk menempatkan tanda centang default di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihatSetMenuItemBitmapsfungsi anggota), bitmap "tanda centang pada" ditampilkan.MF_UNCHECKEDBertindak sebagai tombolMF_CHECKEDdengan untuk menghapus tanda centang di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihatSetMenuItemBitmapsfungsi anggota), bitmap "tanda centang mati" ditampilkan.MF_DISABLEDMenonaktifkan item menu sehingga tidak dapat dipilih tetapi tidak meredakannya.MF_ENABLEDMengaktifkan item menu sehingga dapat dipilih dan memulihkannya dari status redup.MF_GRAYEDMenonaktifkan item menu sehingga tidak dapat dipilih dan redupkan.MF_MENUBARBREAKTempatkan item pada baris baru di menu statis atau di kolom baru di menu pop-up. Kolom menu pop-up baru akan dipisahkan dari kolom lama dengan garis pembagian vertikal.MF_MENUBREAKTempatkan item pada baris baru di menu statis atau di kolom baru di menu pop-up. Tidak ada garis pembagian yang ditempatkan di antara kolom.MF_OWNERDRAWMenentukan bahwa item tersebut adalah item gambar pemilik. Saat menu ditampilkan untuk pertama kalinya, jendela yang memilikiWM_MEASUREITEMmenu menerima pesan, yang mengambil tinggi dan lebar item menu. PesanWM_DRAWITEMadalah pesan yang dikirim setiap kali pemilik harus memperbarui tampilan visual item menu. Opsi ini tidak valid untuk item menu tingkat atas.MF_POPUPMenentukan bahwa item menu memiliki menu pop-up yang terkait dengannya. Parameter ID menentukan handel ke menu pop-up yang akan dikaitkan dengan item. Ini digunakan untuk menambahkan menu pop-up tingkat atas atau menu pop-up hierarkis ke item menu pop-up.MF_SEPARATORMenggambar garis pembagian horizontal. Hanya dapat digunakan dalam menu pop-up. Baris ini tidak dapat diredupkan, dinonaktifkan, atau disorot. Parameter lain diabaikan.MF_STRINGMenentukan bahwa item menu adalah string karakter.
Setiap grup berikut mencantumkan bendera yang saling eksklusif dan tidak dapat digunakan bersama-sama:
MF_DISABLED,MF_ENABLED, danMF_GRAYEDMF_STRING, ,MF_OWNERDRAWMF_SEPARATOR, dan versi bitmapMF_MENUBARBREAKdanMF_MENUBREAKMF_CHECKEDdanMF_UNCHECKED
Setiap kali menu yang berada di jendela diubah (apakah jendela ditampilkan atau tidak), aplikasi harus memanggil CWnd::DrawMenuBar.
Contoh
Lihat contoh untuk CMenu::CreateMenu.
CMenu::Attach
Melampirkan menu Windows yang CMenu ada ke objek.
BOOL Attach(HMENU hMenu);
Parameter
hMenu
Menentukan handel ke menu Windows.
Tampilkan Nilai
Bukan nol jika operasi berhasil; jika tidak, 0.
Keterangan
Fungsi ini tidak boleh dipanggil jika menu sudah dilampirkan ke CMenu objek. Handel menu disimpan di m_hMenu anggota data.
Jika menu yang ingin Anda manipulasi sudah dikaitkan dengan jendela, Anda dapat menggunakan CWnd::GetMenu fungsi untuk mendapatkan handel ke menu.
Contoh
CMenu mnu;
HMENU hmnu = AfxGetMainWnd()->GetMenu()->GetSafeHmenu();
mnu.Attach(hmnu);
// Now you can manipulate the window's menu as a CMenu
// object...
mnu.Detach();
CMenu::CheckMenuItem
Menambahkan tanda centang ke atau menghapus tanda centang dari item menu di menu pop-up.
UINT CheckMenuItem(
UINT nIDCheckItem,
UINT nCheck);
Parameter
nIDCheckItem
Menentukan item menu yang akan dicentang, seperti yang ditentukan oleh nCheck.
nCheck
Menentukan cara memeriksa item menu dan cara menentukan posisi item di menu. Parameter nCheck dapat berupa kombinasi MF_CHECKED atau MF_UNCHECKED dengan MF_BYPOSITION MF_BYCOMMAND atau bendera. Bendera ini dapat digabungkan dengan menggunakan operator BITWISE OR. Mereka memiliki arti berikut:
MF_BYCOMMANDMenentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default.MF_BYPOSITIONMenentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0.MF_CHECKEDBertindak sebagai tombolMF_UNCHECKEDdengan untuk menempatkan tanda centang default di samping item.MF_UNCHECKEDBertindak sebagai tombolMF_CHECKEDdengan untuk menghapus tanda centang di samping item.
Tampilkan Nilai
Status item sebelumnya: MF_CHECKED atau MF_UNCHECKED, atau 0xFFFFFFFF jika item menu tidak ada.
Keterangan
Parameter nIDCheckItem menentukan item yang akan dimodifikasi.
Parameter nIDCheckItem dapat mengidentifikasi item menu pop-up serta item menu. Tidak ada langkah khusus yang diperlukan untuk memeriksa item menu pop-up. Item menu tingkat atas tidak dapat diperiksa. Item menu pop-up harus diperiksa berdasarkan posisi karena tidak memiliki pengidentifikasi item menu yang terkait dengannya.
Contoh
Lihat contoh untuk CMenu::GetMenuState.
CMenu::CheckMenuRadioItem
Memeriksa item menu tertentu dan menjadikannya item radio.
BOOL CheckMenuRadioItem(
UINT nIDFirst,
UINT nIDLast,
UINT nIDItem,
UINT nFlags);
Parameter
nIDFirst
Menentukan (sebagai ID atau offset, tergantung pada nilai nFlags) item menu pertama dalam grup tombol radio.
nIDLast
Menentukan (sebagai ID atau offset, tergantung pada nilai nFlags) item menu terakhir dalam grup tombol radio.
nIDItem
Menentukan (sebagai ID atau offset, tergantung pada nilai nFlags) item dalam grup yang akan diperiksa dengan tombol radio.
nFlags
Menentukan interpretasi , nIDFirstnIDLast, dan nIDItem dengan cara berikut:
| nFlags | Interpretasi |
|---|---|
MF_BYCOMMAND |
Menentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default jika tidak juga MF_BYCOMMAND MF_BYPOSITION diatur. |
MF_BYPOSITION |
Menentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0. |
Tampilkan Nilai
Bukan nol jika berhasil; jika tidak, 0
Keterangan
Pada saat yang sama, fungsi menghapus centang semua item menu lainnya dalam grup terkait dan menghapus bendera jenis item radio untuk item tersebut. Item yang dicentang ditampilkan menggunakan bitmap tombol radio (atau poin) alih-alih bitmap tanda centang.
Contoh
Lihat contoh untuk ON_COMMAND_RANGE.
CMenu::CMenu
Membuat menu kosong dan melampirkannya ke CMenu objek.
CMenu();
Keterangan
Menu tidak dibuat sampai Anda memanggil salah satu fungsi buat atau muat anggota dari CMenu:
CMenu::CreateMenu
Membuat menu dan melampirkannya ke CMenu objek.
BOOL CreateMenu();
Tampilkan Nilai
Bukan nol jika menu berhasil dibuat; jika tidak, 0.
Keterangan
Menu awalnya kosong. Item menu dapat ditambahkan dengan menggunakan AppendMenu fungsi atau InsertMenu anggota.
Jika menu ditetapkan ke jendela, menu akan dihancurkan secara otomatis saat jendela dihancurkan.
Sebelum keluar, aplikasi harus membebaskan sumber daya sistem yang terkait dengan menu jika menu tidak ditetapkan ke jendela. Aplikasi membebaskan menu dengan memanggil DestroyMenu fungsi anggota.
Contoh
// The code fragment below shows how to create a new menu for the
// application window using CreateMenu() and CreatePopupMenu().
// Then, the created menu will replace the current menu of the
// application. The old menu will be destroyed with DestroyMenu().
// NOTE: The code fragment below is done in a CFrameWnd-derived class.
// Create a new menu for the application window.
VERIFY(m_NewMenu.CreateMenu());
// Create a "File" popup menu and insert this popup menu to the
// new menu of the application window. The "File" menu has only
// one menu item, i.e. "Exit".
VERIFY(m_FileMenu.CreatePopupMenu());
m_FileMenu.AppendMenu(MF_STRING, ID_APP_EXIT, _T("E&xit"));
m_NewMenu.AppendMenu(MF_POPUP, (UINT_PTR)m_FileMenu.m_hMenu, _T("&File"));
// Remove and destroy old menu
SetMenu(NULL);
CMenu *old_menu = CMenu::FromHandle(m_hMenuDefault);
old_menu->DestroyMenu();
// Add new menu.
SetMenu(&m_NewMenu);
// Assign default menu
m_hMenuDefault = m_NewMenu.m_hMenu;
CMenu::CreatePopupMenu
Membuat menu pop-up dan melampirkannya ke CMenu objek.
BOOL CreatePopupMenu();
Tampilkan Nilai
Bukan nol jika menu pop-up berhasil dibuat; jika tidak, 0.
Keterangan
Menu awalnya kosong. Item menu dapat ditambahkan dengan menggunakan AppendMenu fungsi atau InsertMenu anggota. Aplikasi dapat menambahkan menu pop-up ke menu atau menu pop-up yang ada. Fungsi TrackPopupMenu anggota dapat digunakan untuk menampilkan menu ini sebagai menu pop-up mengambang dan untuk melacak pilihan pada menu pop-up.
Jika menu ditetapkan ke jendela, menu akan dihancurkan secara otomatis saat jendela dihancurkan. Jika menu ditambahkan ke menu yang ada, menu tersebut akan dihancurkan secara otomatis saat menu tersebut dihancurkan.
Sebelum keluar, aplikasi harus membebaskan sumber daya sistem yang terkait dengan menu pop-up jika menu tidak ditetapkan ke jendela. Aplikasi membebaskan menu dengan memanggil DestroyMenu fungsi anggota.
Contoh
Lihat contoh untuk CMenu::CreateMenu.
CMenu::DeleteMenu
Menghapus item dari menu.
BOOL DeleteMenu(
UINT nPosition,
UINT nFlags);
Parameter
nPosition
Menentukan item menu yang akan dihapus, seperti yang ditentukan oleh nFlags.
nFlags
Digunakan untuk menafsirkan nPosition dengan cara berikut:
nFlags |
Interpretasi dari nPosition |
|---|---|
MF_BYCOMMAND |
Menentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default jika tidak juga MF_BYCOMMAND MF_BYPOSITION diatur. |
MF_BYPOSITION |
Menentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0. |
Tampilkan Nilai
Bukan nol jika fungsi berhasil; jika tidak, 0.
Keterangan
Jika item menu memiliki menu pop-up terkait, DeleteMenu menghancurkan handel ke menu pop-up dan membebaskan memori yang digunakan oleh menu pop-up.
Setiap kali menu yang berada di jendela diubah (apakah jendela ditampilkan atau tidak), aplikasi harus memanggil CWnd::DrawMenuBar.
Contoh
Lihat contoh untuk CWnd::GetMenu.
CMenu::DeleteTempMap
Dipanggil secara otomatis oleh CWinApp handler idle-time, menghapus objek sementara CMenu yang dibuat oleh FromHandle fungsi anggota.
static void PASCAL DeleteTempMap();
Keterangan
DeleteTempMap melepaskan objek menu Windows yang dilampirkan ke objek sementara CMenu sebelum menghapus CMenu objek.
Contoh
// DeleteTempMap() is a static member and does not need
// an instantiated CMenu object.
CMenu::DeleteTempMap();
CMenu::DestroyMenu
Menghancurkan menu dan sumber daya Windows apa pun yang digunakan.
BOOL DestroyMenu();
Tampilkan Nilai
Bukan nol jika menu dihancurkan; jika tidak, 0.
Keterangan
Menu dilepas dari CMenu objek sebelum dihancurkan. Fungsi Windows DestroyMenu secara otomatis dipanggil dalam CMenu destruktor.
Contoh
Lihat contoh untuk CMenu::CreateMenu.
CMenu::Detach
Mencopot menu Windows dari CMenu objek dan mengembalikan handel.
HMENU Detach();
Tampilkan Nilai
Handel, jenis HMENU, ke menu Windows, jika berhasil; jika tidak NULL.
Keterangan
Anggota m_hMenu data diatur ke NULL.
Contoh
CMenu mnu;
HMENU hmnu = AfxGetMainWnd()->GetMenu()->GetSafeHmenu();
mnu.Attach(hmnu);
// Now you can manipulate the window's menu as a CMenu
// object...
mnu.Detach();
CMenu::DrawItem
Dipanggil oleh kerangka kerja saat aspek visual menu yang digambar pemilik berubah.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parameter
lpDrawItemStruct
Penunjuk ke DRAWITEMSTRUCT struktur yang berisi informasi tentang jenis gambar yang diperlukan.
Keterangan
Anggota itemAction DRAWITEMSTRUCT struktur mendefinisikan tindakan menggambar yang akan dilakukan. Ambil alih fungsi anggota ini untuk mengimplementasikan gambar untuk objek gambar CMenu pemilik. Aplikasi harus memulihkan semua objek antarmuka perangkat grafis (GDI) yang dipilih untuk konteks tampilan yang disediakan sebelum lpDrawItemStruct penghentian fungsi anggota ini.
Lihat CWnd::OnDrawItem untuk deskripsi DRAWITEMSTRUCT struktur.
Contoh
Kode berikut berasal dari sampel MFC CTRLTEST :
// Override DrawItem() to implement drawing for an owner-draw CMenu object.
// CColorMenu is a CMenu-derived class.
void CColorMenu::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
CDC *pDC = CDC::FromHandle(lpDIS->hDC);
COLORREF cr = (COLORREF)lpDIS->itemData; // RGB in item data
if (lpDIS->itemAction & ODA_DRAWENTIRE)
{
// Paint the color item in the color requested
CBrush br(cr);
pDC->FillRect(&lpDIS->rcItem, &br);
}
if ((lpDIS->itemState & ODS_SELECTED) &&
(lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
{
// item has been selected - hilite frame
COLORREF crHilite = RGB(255 - GetRValue(cr),
255 - GetGValue(cr), 255 - GetBValue(cr));
CBrush br(crHilite);
pDC->FrameRect(&lpDIS->rcItem, &br);
}
if (!(lpDIS->itemState & ODS_SELECTED) &&
(lpDIS->itemAction & ODA_SELECT))
{
// Item has been de-selected -- remove frame
CBrush br(cr);
pDC->FrameRect(&lpDIS->rcItem, &br);
}
}
CMenu::EnableMenuItem
Mengaktifkan, menonaktifkan, atau meringkas item menu.
UINT EnableMenuItem(
UINT nIDEnableItem,
UINT nEnable);
Parameter
nIDEnableItem
Menentukan item menu yang akan diaktifkan, seperti yang ditentukan oleh nEnable. Parameter ini dapat menentukan item menu pop-up serta item menu standar.
nEnable
Menentukan tindakan yang akan diambil. Ini bisa menjadi kombinasi dari MF_DISABLED, , MF_ENABLEDatau MF_GRAYED, dengan MF_BYCOMMAND atau MF_BYPOSITION. Nilai-nilai ini dapat dikombinasikan dengan menggunakan operator C++ bitwise OR (|). Nilai-nilai ini memiliki arti berikut:
MF_BYCOMMANDMenentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default.MF_BYPOSITIONMenentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0.MF_DISABLEDMenonaktifkan item menu sehingga tidak dapat dipilih tetapi tidak meredakannya.MF_ENABLEDMengaktifkan item menu sehingga dapat dipilih dan memulihkannya dari status redup.MF_GRAYEDMenonaktifkan item menu sehingga tidak dapat dipilih dan redupkan.
Tampilkan Nilai
Status sebelumnya (MF_DISABLED, MF_ENABLED, atau MF_GRAYED) atau -1 jika tidak valid.
Keterangan
Fungsi CreateMenuanggota , , InsertMenuModifyMenu, dan LoadMenuIndirect juga dapat mengatur status (diaktifkan, dinonaktifkan, atau redup) dari item menu.
MF_BYPOSITION Menggunakan nilai memerlukan aplikasi untuk menggunakan yang benarCMenu. Jika bilah CMenu menu digunakan, item menu tingkat atas (item di bilah menu) terpengaruh. Untuk mengatur status item di menu pop-up atau pop-up berlapis menurut posisi, aplikasi harus menentukan CMenu menu pop-up.
Ketika aplikasi menentukan MF_BYCOMMAND bendera, Windows memeriksa semua item menu pop-up yang berada di bawah CMenu; oleh karena itu, kecuali item menu duplikat ada, menggunakan CMenu bilah menu sudah cukup.
Contoh
// The code fragment below shows how to disable (and gray out) the
// File\New menu item.
// NOTE: m_bAutoMenuEnable is set to FALSE in the constructor of
// CMainFrame so no ON_UPDATE_COMMAND_UI or ON_COMMAND handlers are
// needed, and CMenu::EnableMenuItem() will work as expected.
CMenu *mmenu = GetMenu();
CMenu *submenu = mmenu->GetSubMenu(0);
submenu->EnableMenuItem(ID_FILE_NEW, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
CMenu::FromHandle
Mengembalikan penunjuk ke objek yang CMenu diberikan handel Windows ke menu.
static CMenu* PASCAL FromHandle(HMENU hMenu);
Parameter
hMenu
Handel Windows ke menu.
Tampilkan Nilai
Penunjuk ke yang CMenu mungkin bersifat sementara atau permanen.
Keterangan
CMenu Jika objek belum dilampirkan ke objek menu Windows, objek sementara CMenu dibuat dan dilampirkan.
Objek sementara CMenu ini hanya berlaku hingga kali berikutnya aplikasi memiliki waktu menganggur dalam perulangan peristiwanya, di mana semua objek sementara dihapus.
Contoh
Lihat contoh untuk CMenu::CreateMenu.
CMenu::GetDefaultItem
Menentukan item menu default pada menu yang ditentukan.
UINT GetDefaultItem(
UINT gmdiFlags,
BOOL fByPos = FALSE);
Parameter
gmdiFlags
Nilai yang menentukan cara fungsi mencari item menu. Parameter ini tidak boleh ada, satu, atau kombinasi dari nilai berikut:
| Nilai | Makna |
|---|---|
GMDI_GOINTOPOPUPS |
Menentukan bahwa, jika item default adalah item yang membuka submenu, fungsinya adalah mencari di submenu yang sesuai secara rekursif. Jika submenu tidak memiliki item default, nilai pengembalian mengidentifikasi item yang membuka submenu. Secara default, fungsi mengembalikan item default pertama pada menu yang ditentukan, terlepas dari apakah itu adalah item yang membuka submenu. |
GMDI_USEDISABLED |
Menentukan bahwa fungsinya adalah mengembalikan item default, meskipun dinonaktifkan. Secara default, fungsi melompati item yang dinonaktifkan atau berwarna abu-abu. |
fByPos
Nilai yang menentukan apakah akan mengambil pengidentifikasi item menu atau posisinya. Jika parameter ini adalah FALSE, pengidentifikasi dikembalikan. Jika tidak, posisi dikembalikan.
Tampilkan Nilai
Jika fungsi berhasil, nilai pengembalian adalah pengidentifikasi atau posisi item menu. Jika fungsi gagal, nilai yang dikembalikan adalah - 1.
Keterangan
Fungsi anggota ini mengimplementasikan perilaku fungsi GetMenuDefaultItemWin32 , seperti yang dijelaskan dalam Windows SDK.
Contoh
Lihat contoh untuk CMenu::InsertMenu.
CMenu::GetMenuContextHelpId
Mengambil ID bantuan konteks yang terkait dengan CMenu.
DWORD GetMenuContextHelpId() const;
Tampilkan Nilai
ID bantuan konteks yang saat ini terkait dengan CMenu jika memilikinya; nol sebaliknya.
Contoh
Lihat contoh untuk CMenu::InsertMenu.
CMenu::GetMenuInfo
Mengambil informasi untuk menu.
BOOL GetMenuInfo(LPMENUINFO lpcmi) const;
Parameter
lpcmi
Penunjuk ke struktur yang MENUINFO berisi informasi untuk menu.
Tampilkan Nilai
Jika fungsi berhasil, nilai yang dikembalikan bukan nol; jika tidak, nilai yang dikembalikan adalah nol.
Keterangan
Panggil fungsi ini untuk mengambil informasi tentang menu.
CMenu::GetMenuItemCount
Menentukan jumlah item dalam menu pop-up atau tingkat atas.
UINT GetMenuItemCount() const;
Tampilkan Nilai
Jumlah item di menu jika fungsi berhasil; jika tidak -1.
Contoh
Lihat contoh untuk CWnd::GetMenu.
CMenu::GetMenuItemID
Mendapatkan pengidentifikasi item menu untuk item menu yang terletak di posisi yang ditentukan oleh nPos.
UINT GetMenuItemID(int nPos) const;
Parameter
nPos
Menentukan posisi (berbasis nol) dari item menu yang ID-nya sedang diambil.
Tampilkan Nilai
ID item untuk item yang ditentukan di menu pop-up jika fungsi berhasil. Jika item yang ditentukan adalah menu pop-up (dibandingkan dengan item dalam menu pop-up), nilai yang dikembalikan adalah -1. Jika nPos sesuai dengan SEPARATOR item menu, nilai yang dikembalikan adalah 0.
Contoh
Lihat contoh untuk CMenu::InsertMenu.
CMenu::GetMenuItemInfo
Mengambil informasi tentang item menu.
BOOL GetMenuItemInfo(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parameter
uItem
Pengidentifikasi atau posisi item menu untuk mendapatkan informasi tentang. Arti parameter ini tergantung pada nilai ByPos.
lpMenuItemInfo
Penunjuk ke , seperti yang MENUITEMINFOdijelaskan di Windows SDK, yang berisi informasi tentang menu.
fByPos
Nilai yang menentukan arti dari nIDItem. Secara default, ByPos adalah FALSE, yang menunjukkan bahwa uItem adalah pengidentifikasi item menu. Jika ByPos tidak diatur ke FALSE, itu menunjukkan posisi item menu.
Tampilkan Nilai
Jika fungsi berhasil, nilai yang dikembalikan bukan nol. Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, gunakan fungsi GetLastErrorWin32 , seperti yang dijelaskan di Windows SDK.
Keterangan
Fungsi anggota ini mengimplementasikan perilaku fungsi GetMenuItemInfoWin32 , seperti yang dijelaskan dalam Windows SDK. Perhatikan bahwa dalam implementasi GetMenuItemInfoMFC , Anda tidak menggunakan handel ke menu.
Contoh
// CMainFrame::OnToggleTestMenuInfo() is a menu command handler for
// "Toggle Info" menu item (whose resource id is ID_MENU_TOGGLEINFO). It
// toggles the checked or unchecked state of the "Toggle Info" menu item.
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnToggleTestMenuItemInfo()
{
// Get the popup menu which contains the "Toggle Info" menu item.
CMenu* mmenu = GetMenu();
CMenu* submenu = mmenu->GetSubMenu(4);
// Check the state of the "Toggle Info" menu item. Check the menu item
// if it is currently unchecked. Otherwise, uncheck the menu item
// if it is not currently checked.
MENUITEMINFO info;
info.cbSize = sizeof (MENUITEMINFO); // must fill up this field
info.fMask = MIIM_STATE; // get the state of the menu item
VERIFY(submenu->GetMenuItemInfo(ID_MENU_TOGGLEINFO, &info));
if (info.fState & MF_CHECKED)
submenu->CheckMenuItem(ID_MENU_TOGGLEINFO, MF_UNCHECKED | MF_BYCOMMAND);
else
submenu->CheckMenuItem(ID_MENU_TOGGLEINFO, MF_CHECKED | MF_BYCOMMAND);
}
CMenu::GetMenuState
Mengembalikan status item menu yang ditentukan atau jumlah item dalam menu pop-up.
UINT GetMenuState(
UINT nID,
UINT nFlags) const;
Parameter
nID
Menentukan ID item menu, seperti yang ditentukan oleh nFlags.
nFlags
Menentukan sifat .nID Jenis dapat berupa salah satu dari nilai berikut:
MF_BYCOMMANDMenentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default.MF_BYPOSITIONMenentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0.
Tampilkan Nilai
Nilai 0xFFFFFFFF jika item yang ditentukan tidak ada. Jika nId mengidentifikasi menu pop-up, byte pesanan tinggi berisi jumlah item di menu pop-up dan byte urutan rendah berisi bendera menu yang terkait dengan menu pop-up. Jika tidak, nilai yang dikembalikan adalah masker (Boolean OR) dari nilai dari daftar berikut (masker ini menjelaskan status item menu yang nId mengidentifikasi):
MF_CHECKEDBertindak sebagai tombolMF_UNCHECKEDdengan untuk menempatkan tanda centang default di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihatSetMenuItemBitmapsfungsi anggota), bitmap "tanda centang pada" ditampilkan.MF_DISABLEDMenonaktifkan item menu sehingga tidak dapat dipilih tetapi tidak meredakannya.MF_ENABLEDMengaktifkan item menu sehingga dapat dipilih dan memulihkannya dari status redup. Perhatikan bahwa nilai konstanta ini adalah 0; aplikasi tidak boleh menguji terhadap 0 untuk kegagalan saat menggunakan nilai ini.MF_GRAYEDMenonaktifkan item menu sehingga tidak dapat dipilih dan redupkan.MF_MENUBARBREAKTempatkan item pada baris baru di menu statis atau di kolom baru di menu pop-up. Kolom menu pop-up baru akan dipisahkan dari kolom lama dengan garis pembagian vertikal.MF_MENUBREAKTempatkan item pada baris baru di menu statis atau di kolom baru di menu pop-up. Tidak ada garis pembagian yang ditempatkan di antara kolom.MF_SEPARATORMenggambar garis pembagian horizontal. Hanya dapat digunakan dalam menu pop-up. Baris ini tidak dapat diredupkan, dinonaktifkan, atau disorot. Parameter lain diabaikan.MF_UNCHECKEDBertindak sebagai tombolMF_CHECKEDdengan untuk menghapus tanda centang di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihatSetMenuItemBitmapsfungsi anggota), bitmap "tanda centang mati" ditampilkan. Perhatikan bahwa nilai konstanta ini adalah 0; aplikasi tidak boleh menguji terhadap 0 untuk kegagalan saat menggunakan nilai ini.
Contoh
// CMainFrame::OnToggleTestMenuState() is a menu command handler for
// "Toggle State" menu item (whose resource id is ID_MENU_TOGGLESTATE).
// It toggles the checked or unchecked state of the "Toggle State" menu item.
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnToggleTestMenuState()
{
// Get the popup menu which contains the "Toggle State" menu item.
CMenu *mmenu = GetMenu();
CMenu *submenu = mmenu->GetSubMenu(4);
// Check the state of the "Toggle State" menu item. Check the menu item
// if it is currently unchecked. Otherwise, uncheck the menu item
// if it is not currently checked.
UINT state = submenu->GetMenuState(ID_MENU_TOGGLESTATE, MF_BYCOMMAND);
ASSERT(state != 0xFFFFFFFF);
if (state & MF_CHECKED)
submenu->CheckMenuItem(ID_MENU_TOGGLESTATE, MF_UNCHECKED | MF_BYCOMMAND);
else
submenu->CheckMenuItem(ID_MENU_TOGGLESTATE, MF_CHECKED | MF_BYCOMMAND);
}
CMenu::GetMenuString
Menyalin label item menu yang ditentukan ke buffer yang ditentukan.
int GetMenuString(
UINT nIDItem,
LPTSTR lpString,
int nMaxCount,
UINT nFlags) const;
int GetMenuString(
UINT nIDItem,
CString& rString,
UINT nFlags) const;
Parameter
nIDItem
Menentukan pengidentifikasi bilangan bulat item menu atau offset item menu di menu, tergantung pada nilai nFlags.
lpString
Arahkan ke buffer yaitu menerima label.
rString
Referensi ke CString objek yang akan menerima string menu yang disalin.
nMaxCount
Menentukan panjang maksimum (dalam karakter) label yang akan disalin. Jika label lebih panjang dari maksimum yang ditentukan dalam nMaxCount, karakter tambahan akan dipotong.
nFlags
Menentukan interpretasi nIDItem parameter. Jenis dapat berupa salah satu dari nilai berikut:
nFlags |
Interpretasi dari nIDItem |
|---|---|
MF_BYCOMMAND |
Menentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default jika tidak juga MF_BYCOMMAND MF_BYPOSITION diatur. |
MF_BYPOSITION |
Menentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0. |
Tampilkan Nilai
Menentukan jumlah karakter aktual yang disalin ke buffer, tidak termasuk terminator null.
Keterangan
Parameter nMaxCount harus satu lebih besar dari jumlah karakter dalam label untuk mengakomodasi karakter null yang mengakhiri string.
Contoh
Lihat contoh untuk CMenu::InsertMenu.
CMenu::GetSafeHmenu
Mengembalikan yang dibungkus HMENU oleh objek ini CMenu , atau penunjuk NULL CMenu .
HMENU GetSafeHmenu() const;
Contoh
Lihat contoh untuk CMenu::LoadMenu.
CMenu::GetSubMenu
Mengambil CMenu objek menu pop-up.
CMenu* GetSubMenu(int nPos) const;
Parameter
nPos
Menentukan posisi menu pop-up yang terkandung dalam menu. Nilai posisi dimulai dari 0 untuk item menu pertama. Pengidentifikasi menu pop-up tidak dapat digunakan dalam fungsi ini.
Tampilkan Nilai
Penunjuk ke objek yang CMenu anggotanya m_hMenu berisi handel ke menu pop-up jika menu pop-up ada pada posisi yang diberikan; jika tidak NULL. CMenu Jika objek tidak ada, maka objek sementara dibuat. Pointer CMenu yang dikembalikan tidak boleh disimpan.
Contoh
Lihat contoh untuk CMenu::TrackPopupMenu.
CMenu::InsertMenu
Sisipkan item menu baru pada posisi yang ditentukan oleh nPosition dan memindahkan item lain ke bawah menu.
BOOL InsertMenu(
UINT nPosition,
UINT nFlags,
UINT_PTR nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL InsertMenu(
UINT nPosition,
UINT nFlags,
UINT_PTR nIDNewItem,
const CBitmap* pBmp);
Parameter
nPosition
Menentukan item menu sebelum item menu baru disisipkan. Parameter nFlags dapat digunakan untuk menafsirkan nPosition dengan cara berikut:
nFlags |
Interpretasi dari nPosition |
|---|---|
MF_BYCOMMAND |
Menentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default jika tidak juga MF_BYCOMMAND MF_BYPOSITION diatur. |
MF_BYPOSITION |
Menentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0. Jika nPosition -1, item menu baru ditambahkan ke akhir menu. |
nFlags
Menentukan cara nPosition ditafsirkan dan menentukan informasi tentang status item menu baru saat ditambahkan ke menu. Untuk daftar bendera yang mungkin diatur, lihat AppendMenu fungsi anggota. Untuk menentukan lebih dari satu nilai, gunakan operator BITWISE OR untuk menggabungkannya dengan MF_BYCOMMAND bendera atau MF_BYPOSITION .
nIDNewItem
Menentukan ID perintah item menu baru atau, jika nFlags diatur ke MF_POPUP, handel menu (HMENU) menu pop-up. Parameter nIDNewItem diabaikan (tidak diperlukan) jika nFlags diatur ke MF_SEPARATOR.
lpszNewItem
Menentukan isi item menu baru. nFlags dapat digunakan untuk menafsirkan lpszNewItem dengan cara berikut:
nFlags |
Interpretasi dari lpszNewItem |
|---|---|
MF_OWNERDRAW |
Berisi nilai 32-bit yang disediakan aplikasi yang dapat digunakan aplikasi untuk mempertahankan data tambahan yang terkait dengan item menu. Nilai 32-bit ini tersedia untuk aplikasi dalam itemData anggota struktur yang disediakan oleh WM_MEASUREITEM pesan dan WM_DRAWITEM . Pesan ini dikirim ketika item menu awalnya ditampilkan atau diubah. |
MF_STRING |
Berisi penunjuk panjang ke string yang dihentikan null. Ini adalah interpretasi default. |
MF_SEPARATOR |
Parameter lpszNewItem diabaikan (tidak diperlukan). |
pBmp
Menunjuk ke CBitmap objek yang akan digunakan sebagai item menu.
Tampilkan Nilai
Bukan nol jika fungsi berhasil; jika tidak, 0.
Keterangan
Aplikasi dapat menentukan status item menu dengan mengatur nilai di nFlags.
Setiap kali menu yang berada di jendela diubah (apakah jendela ditampilkan atau tidak), aplikasi harus memanggil CWnd::DrawMenuBar.
Saat nIDNewItem menentukan menu pop-up, menu tersebut menjadi bagian dari menu tempat menu dimasukkan. Jika menu tersebut dihancurkan, menu yang disisipkan juga akan dihancurkan. Menu yang disisipkan harus dilepas dari CMenu objek untuk menghindari konflik.
Jika jendela turunan antarmuka beberapa dokumen (MDI) aktif dimaksimalkan dan aplikasi menyisipkan menu pop-up ke menu aplikasi MDI dengan memanggil fungsi ini dan menentukan MF_BYPOSITION bendera, menu dimasukkan satu posisi lebih jauh ke kiri dari yang diharapkan. Ini terjadi karena menu Kontrol jendela anak MDI aktif dimasukkan ke posisi pertama bilah menu jendela bingkai MDI. Untuk memposisikan menu dengan benar, aplikasi harus menambahkan 1 ke nilai posisi yang jika tidak akan digunakan. Aplikasi dapat menggunakan WM_MDIGETACTIVE pesan untuk menentukan apakah jendela anak yang saat ini aktif dimaksimalkan.
Contoh
// CMainFrame::OnChangeFileMenu() is a menu command handler for
// CMainFrame class, which in turn is a CFrameWnd-derived class.
// It modifies the File menu by inserting, removing and renaming
// some menu items. Other operations include associating a context
// help id and setting default menu item to the File menu.
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnChangeFileMenu()
{
// Get the menu from the application window.
CMenu *mmenu = GetMenu();
// Look for "File" menu.
int pos = FindMenuItem(mmenu, _T("&File"));
if (pos == -1)
return;
// Remove "New" menu item from the File menu.
CMenu *submenu = mmenu->GetSubMenu(pos);
pos = FindMenuItem(submenu, _T("&New\tCtrl+N"));
if (pos > -1)
submenu->RemoveMenu(pos, MF_BYPOSITION);
// Look for "Open" menu item from the File menu. Insert a new
// menu item called "Close" right after the "Open" menu item.
// ID_CLOSEFILE is the command id for the "Close" menu item.
pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
if (pos > -1)
submenu->InsertMenu(pos + 1, MF_BYPOSITION, ID_CLOSEFILE, _T("&Close"));
// Rename menu item "Exit" to "Exit Application".
pos = FindMenuItem(submenu, _T("E&xit"));
if (pos > -1)
{
UINT id = submenu->GetMenuItemID(pos);
submenu->ModifyMenu(id, MF_BYCOMMAND, id, _T("E&xit Application"));
}
// Associate a context help ID with File menu, if one is not found.
// ID_FILE_CONTEXT_HELPID is the context help ID for the File menu
// that is defined in resource file.
if (submenu->GetMenuContextHelpId() == 0)
submenu->SetMenuContextHelpId(ID_FILE_CONTEXT_HELPID);
// Set "Open" menu item as the default menu item for the File menu,
// if one is not found. So, when a user double-clicks the File
// menu, the system sends a command message to the menu's owner
// window and closes the menu as if the File\Open command item had
// been chosen.
if (submenu->GetDefaultItem(GMDI_GOINTOPOPUPS, TRUE) == -1)
{
pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
submenu->SetDefaultItem(pos, TRUE);
}
}
// FindMenuItem() will find a menu item string from the specified
// popup menu and returns its position (0-based) in the specified
// popup menu. It returns -1 if no such menu item string is found.
int FindMenuItem(CMenu *Menu, LPCTSTR MenuString)
{
ASSERT(Menu);
ASSERT(::IsMenu(Menu->GetSafeHmenu()));
int count = Menu->GetMenuItemCount();
for (int i = 0; i < count; i++)
{
CString str;
if (Menu->GetMenuString(i, str, MF_BYPOSITION) &&
str.Compare(MenuString) == 0)
return i;
}
return -1;
}
CMenu::InsertMenuItem
Sisipkan item menu baru pada posisi yang ditentukan dalam menu.
BOOL InsertMenuItem(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parameter
uItem
Lihat deskripsi uItem di dalam InsertMenuItem Windows SDK.
lpMenuItemInfo
Lihat deskripsi lpmii di dalam InsertMenuItem Windows SDK.
fByPos
Lihat deskripsi fByPosition di dalam InsertMenuItem Windows SDK.
Keterangan
Fungsi ini membungkus InsertMenuItem, dijelaskan dalam Windows SDK.
CMenu::LoadMenu
Memuat sumber daya menu dari file yang dapat dieksekusi aplikasi dan melampirkannya ke CMenu objek.
BOOL LoadMenu(LPCTSTR lpszResourceName);
BOOL LoadMenu(UINT nIDResource);
Parameter
lpszResourceName
Menunjuk ke string null-terminated yang berisi nama sumber daya menu yang akan dimuat.
nIDResource
Menentukan ID menu sumber daya menu yang akan dimuat.
Tampilkan Nilai
Bukan nol jika sumber daya menu berhasil dimuat; jika tidak, 0.
Keterangan
Sebelum keluar, aplikasi harus membebaskan sumber daya sistem yang terkait dengan menu jika menu tidak ditetapkan ke jendela. Aplikasi membebaskan menu dengan memanggil DestroyMenu fungsi anggota.
Contoh
// CMainFrame::OnReplaceMenu() is a menu command handler for CMainFrame
// class, which in turn is a CFrameWnd-derived class. It loads a new
// menu resource and replaces the SDI application window's menu bar with
// this new menu. CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnReplaceMenu()
{
// Load the new menu.
m_ShortMenu.LoadMenu(IDR_SHORT_MENU);
ASSERT(m_ShortMenu);
// Remove and destroy the old menu
SetMenu(NULL);
::DestroyMenu(m_hMenuDefault);
// Add the new menu
SetMenu(&m_ShortMenu);
// Assign default menu
m_hMenuDefault = m_ShortMenu.GetSafeHmenu(); // or m_ShortMenu.m_hMenu;
}
CMenu::LoadMenuIndirect
Memuat sumber daya dari templat menu dalam memori dan melampirkannya ke CMenu objek.
BOOL LoadMenuIndirect(const void* lpMenuTemplate);
Parameter
lpMenuTemplate
Menunjuk ke templat menu (yang merupakan struktur tunggal MENUITEMTEMPLATEHEADER dan kumpulan satu atau beberapa MENUITEMTEMPLATE struktur). Untuk informasi selengkapnya tentang kedua struktur ini, lihat Windows SDK.
Tampilkan Nilai
Bukan nol jika sumber daya menu berhasil dimuat; jika tidak, 0.
Keterangan
Templat menu adalah header diikuti oleh kumpulan satu atau beberapa MENUITEMTEMPLATE struktur, yang masing-masing mungkin berisi satu atau beberapa item menu dan menu pop-up.
Nomor versi harus 0.
mtOption Bendera harus disertakan MF_END untuk item terakhir dalam daftar pop-up dan untuk item terakhir dalam daftar utama. AppendMenu Lihat fungsi anggota untuk bendera lain. Anggota mtId harus dihilangkan dari MENUITEMTEMPLATE struktur ketika MF_POPUP ditentukan dalam mtOption.
Ruang yang dialokasikan untuk MENUITEMTEMPLATE struktur harus cukup besar untuk mtString memuat nama item menu sebagai string null-terminated.
Sebelum keluar, aplikasi harus membebaskan sumber daya sistem yang terkait dengan menu jika menu tidak ditetapkan ke jendela. Aplikasi membebaskan menu dengan memanggil DestroyMenu fungsi anggota.
Contoh
// CMainFrame::OnLoadMenuIndirect() is a menu command handler for
// CMainFrame class, which in turn is a CFrameWnd-derived class. It
// shows how to use LoadMenuIndirect() to load a resource from a
// menu template in memory.
void CMainFrame::OnLoadMenuIndirect()
{
// For simplicity, allocate 500 bytes from stack. May use
// GlobalAlloc() to allocate memory bytes from heap.
BYTE milist[500];
memset(milist, 0, 500);
int bytes_left = sizeof(milist);
// Fill up the MENUITEMTEMPLATEHEADER structure.
MENUITEMTEMPLATEHEADER *mheader = (MENUITEMTEMPLATEHEADER*)milist;
mheader->versionNumber = 0;
mheader->offset = 0;
int bytes_used = sizeof(MENUITEMTEMPLATEHEADER);
bytes_left -= bytes_used;
// Add the following menu items to menu bar:
// File Edit
// Exit Copy
// Paste
bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&File", 0,
TRUE, FALSE);
bytes_left -= bytes_used;
bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"E&xit",
ID_APP_EXIT, FALSE, TRUE);
bytes_left -= bytes_used;
bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Edit", 0,
TRUE, TRUE);
bytes_left -= bytes_used;
bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Copy",
ID_EDIT_COPY, FALSE, FALSE);
bytes_left -= bytes_used;
bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Paste",
ID_EDIT_PASTE, FALSE, TRUE);
bytes_left -= bytes_used;
// Load resource from a menu template in memory.
ASSERT(m_IndiMenu.LoadMenuIndirect(milist));
// Remove and destroy old menu
SetMenu(NULL);
::DestroyMenu(m_hMenuDefault);
// Add new menu.
SetMenu(&m_IndiMenu);
// Assign default menu
m_hMenuDefault = m_IndiMenu.m_hMenu;
}
// This is a helper function for adding a menu item (either a popup
// or command item) to the specified menu template.
//
// MenuTemplate - pointer to a menu template
// TemplateBytes - space remaining in MenuTemplate
// MenuString - string for the menu item to be added
// MenuID - id for the command item. Its value is ignored if
// IsPopup is TRUE.
// IsPopup - TRUE for popup menu (or submenu); FALSE for command
// item
// LastItem - TRUE if MenuString is the last item for the popup;
// FALSE otherwise.
UINT AddMenuItem(LPVOID MenuTemplate, int TemplateBytes, WCHAR *MenuString,
WORD MenuID, BOOL IsPopup, BOOL LastItem)
{
MENUITEMTEMPLATE *mitem = (MENUITEMTEMPLATE*)MenuTemplate;
UINT bytes_used = 0;
if (IsPopup) // for popup menu
{
if (LastItem)
mitem->mtOption = MF_POPUP | MF_END;
else
mitem->mtOption = MF_POPUP;
bytes_used += sizeof(mitem->mtOption);
mitem = (MENUITEMTEMPLATE*)((BYTE*)MenuTemplate + bytes_used);
// a popup doesn't have mtID!!!
TemplateBytes -= bytes_used;
wcscpy_s((WCHAR*)mitem, TemplateBytes / sizeof(WCHAR), MenuString);
bytes_used += (UINT)(sizeof(WCHAR) * (wcslen(MenuString) + 1)); // include '\0'
}
else // for command item
{
mitem->mtOption = LastItem ? MF_END : 0;
mitem->mtID = MenuID;
TemplateBytes -= bytes_used;
wcscpy_s(mitem->mtString, TemplateBytes / sizeof(WCHAR), MenuString);
bytes_used += (UINT)(sizeof(mitem->mtOption) + sizeof(mitem->mtID) +
sizeof(WCHAR) * (wcslen(MenuString) + 1)); // include '\0'
}
return bytes_used;
}
CMenu::m_hMenu
HMENU Menentukan handel menu Windows yang dilampirkan ke CMenu objek.
HMENU m_hMenu;
Contoh
Lihat contoh untuk CMenu::LoadMenu.
CMenu::MeasureItem
Dipanggil oleh kerangka kerja saat menu dengan gaya gambar pemilik dibuat.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Parameter
lpMeasureItemStruct
Penunjuk ke MEASUREITEMSTRUCT struktur.
Keterangan
Secara default, fungsi anggota ini tidak melakukan apa pun. Ambil alih fungsi anggota ini dan isi MEASUREITEMSTRUCT struktur untuk memberi tahu Windows tentang dimensi menu.
Lihat CWnd::OnMeasureItem untuk deskripsi MEASUREITEMSTRUCT struktur.
Contoh
Kode berikut berasal dari sampel MFC CTRLTEST :
// Override MeasureItem() to return the size of the menu item.
// CColorMenu is a CMenu-derived class.
#define COLOR_BOX_WIDTH 20
#define COLOR_BOX_HEIGHT 20
void CColorMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
{
// all items are of fixed size
lpMIS->itemWidth = COLOR_BOX_WIDTH;
lpMIS->itemHeight = COLOR_BOX_HEIGHT;
}
CMenu::ModifyMenu
Mengubah item menu yang ada pada posisi yang ditentukan oleh nPosition.
BOOL ModifyMenu(
UINT nPosition,
UINT nFlags,
UINT_PTR nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL ModifyMenu(
UINT nPosition,
UINT nFlags,
UINT_PTR nIDNewItem,
const CBitmap* pBmp);
Parameter
nPosition
Menentukan item menu yang akan diubah. Parameter nFlags dapat digunakan untuk menafsirkan nPosition dengan cara berikut:
nFlags |
Interpretasi dari nPosition |
|---|---|
MF_BYCOMMAND |
Menentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default jika tidak juga MF_BYCOMMAND MF_BYPOSITION diatur. |
MF_BYPOSITION |
Menentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0. |
nFlags
Menentukan cara nPosition ditafsirkan dan memberikan informasi tentang perubahan yang akan dilakukan pada item menu. Untuk daftar bendera yang mungkin diatur, lihat AppendMenu fungsi anggota.
nIDNewItem
Menentukan ID perintah item menu yang dimodifikasi atau, jika nFlags diatur ke MF_POPUP, handel menu (HMENU) menu pop-up. Parameter nIDNewItem diabaikan (tidak diperlukan) jika nFlags diatur ke MF_SEPARATOR.
lpszNewItem
Menentukan isi item menu baru. Parameter nFlags dapat digunakan untuk menafsirkan lpszNewItem dengan cara berikut:
nFlags |
Interpretasi dari lpszNewItem |
|---|---|
MF_OWNERDRAW |
Berisi nilai 32-bit yang disediakan aplikasi yang dapat digunakan aplikasi untuk mempertahankan data tambahan yang terkait dengan item menu. Nilai 32-bit ini tersedia untuk aplikasi saat diproses MF_MEASUREITEM dan MF_DRAWITEM. |
MF_STRING |
Berisi penunjuk panjang ke string yang dihentikan null atau ke CString. |
MF_SEPARATOR |
Parameter lpszNewItem diabaikan (tidak diperlukan). |
pBmp
Menunjuk ke CBitmap objek yang akan digunakan sebagai item menu.
Tampilkan Nilai
Bukan nol jika fungsi berhasil; jika tidak, 0.
Keterangan
Aplikasi menentukan status baru item menu dengan mengatur nilai di nFlags. Jika fungsi ini menggantikan menu pop-up yang terkait dengan item menu, fungsi ini akan menghancurkan menu pop-up lama dan membebaskan memori yang digunakan oleh menu pop-up.
Saat nIDNewItem menentukan menu pop-up, menu tersebut menjadi bagian dari menu tempat menu dimasukkan. Jika menu tersebut dihancurkan, menu yang disisipkan juga akan dihancurkan. Menu yang disisipkan harus dilepas dari CMenu objek untuk menghindari konflik.
Setiap kali menu yang berada di jendela diubah (apakah jendela ditampilkan atau tidak), aplikasi harus memanggil CWnd::DrawMenuBar. Untuk mengubah atribut item menu yang ada, jauh lebih cepat untuk menggunakan CheckMenuItem fungsi anggota dan EnableMenuItem .
Contoh
Lihat contoh untuk CMenu::InsertMenu.
CMenu::operator HMENU
Gunakan operator ini untuk mengambil handel CMenu objek.
operator HMENU() const;
Tampilkan Nilai
Jika berhasil, handel CMenu objek; jika tidak, NULL.
Keterangan
Anda dapat menggunakan handel untuk memanggil API Windows secara langsung.
CMenu::operator !=
Menentukan apakah dua menu secara logis tidak sama.
BOOL operator!=(const CMenu& menu) const;
Parameter
menu
Objek CMenu untuk perbandingan.
Keterangan
Menguji apakah objek menu di sisi kiri tidak sama dengan objek menu di sisi kanan.
CMenu::operator ==
Menentukan apakah dua menu secara logis sama.
BOOL operator==(const CMenu& menu) const;
Parameter
menu
Objek CMenu untuk perbandingan.
Keterangan
Menguji apakah objek menu di sisi kiri sama (dalam hal HMENU nilai) ke objek menu di sisi kanan.
CMenu::RemoveMenu
Menghapus item menu dengan menu pop-up terkait dari menu.
BOOL RemoveMenu(
UINT nPosition,
UINT nFlags);
Parameter
nPosition
Menentukan item menu yang akan dihapus. Parameter nFlags dapat digunakan untuk menafsirkan nPosition dengan cara berikut:
nFlags |
Interpretasi dari nPosition |
|---|---|
MF_BYCOMMAND |
Menentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default jika tidak juga MF_BYCOMMAND MF_BYPOSITION diatur. |
MF_BYPOSITION |
Menentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0. |
nFlags
Menentukan bagaimana nPosition ditafsirkan.
Tampilkan Nilai
Bukan nol jika fungsi berhasil; jika tidak, 0.
Keterangan
Ini tidak menghancurkan handel untuk menu pop-up, sehingga menu dapat digunakan kembali. Sebelum memanggil fungsi ini, aplikasi dapat memanggil GetSubMenu fungsi anggota untuk mengambil objek pop-up CMenu untuk digunakan kembali.
Setiap kali menu yang berada di jendela diubah (apakah jendela ditampilkan atau tidak), aplikasi harus memanggil CWnd::DrawMenuBar.
Contoh
Lihat contoh untuk CMenu::InsertMenu.
CMenu::SetDefaultItem
Mengatur item menu default untuk menu yang ditentukan.
BOOL SetDefaultItem(
UINT uItem,
BOOL fByPos = FALSE);
Parameter
uItem
Pengidentifikasi atau posisi item menu default baru atau - 1 tanpa item default. Arti parameter ini tergantung pada nilai fByPos.
fByPos
Nilai yang menentukan arti dari uItem. Jika parameter ini adalah FALSE, uItem adalah pengidentifikasi item menu. Jika tidak, itu adalah posisi item menu.
Tampilkan Nilai
Jika fungsi berhasil, nilai yang dikembalikan bukan nol. Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, gunakan fungsi GetLastErrorWin32 , seperti yang dijelaskan di Windows SDK.
Keterangan
Fungsi anggota ini mengimplementasikan perilaku fungsi SetMenuDefaultItemWin32 , seperti yang dijelaskan dalam Windows SDK.
Contoh
Lihat contoh untuk CMenu::InsertMenu.
CMenu::SetMenuContextHelpId
Mengaitkan ID bantuan konteks dengan CMenu.
BOOL SetMenuContextHelpId(DWORD dwContextHelpId);
Parameter
dwContextHelpId
ID bantuan konteks untuk dikaitkan dengan CMenu.
Tampilkan Nilai
Bukan nol jika berhasil; jika tidak, 0
Keterangan
Semua item di menu berbagi pengidentifikasi ini — tidak dimungkinkan untuk melampirkan pengidentifikasi konteks bantuan ke item menu individual.
Contoh
Lihat contoh untuk CMenu::InsertMenu.
CMenu::SetMenuInfo
Mengatur informasi untuk menu.
BOOL SetMenuInfo(LPCMENUINFO lpcmi);
Parameter
lpcmi
Penunjuk ke struktur yang MENUINFO berisi informasi untuk menu.
Tampilkan Nilai
Jika fungsi berhasil, nilai yang dikembalikan bukan nol; jika tidak, nilai yang dikembalikan adalah nol.
Keterangan
Panggil fungsi ini untuk mengatur informasi spesifik tentang menu.
CMenu::SetMenuItemBitmaps
Mengaitkan bitmap yang ditentukan dengan item menu.
BOOL SetMenuItemBitmaps(
UINT nPosition,
UINT nFlags,
const CBitmap* pBmpUnchecked,
const CBitmap* pBmpChecked);
Parameter
nPosition
Menentukan item menu yang akan diubah. Parameter nFlags dapat digunakan untuk menafsirkan nPosition dengan cara berikut:
nFlags |
Interpretasi nPosition |
|---|---|
MF_BYCOMMAND |
Menentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default jika tidak juga MF_BYCOMMAND MF_BYPOSITION diatur. |
MF_BYPOSITION |
Menentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0. |
nFlags
Menentukan bagaimana nPosition ditafsirkan.
pBmpUnchecked
Menentukan bitmap yang akan digunakan untuk item menu yang tidak dicentang.
pBmpChecked
Menentukan bitmap yang akan digunakan untuk item menu yang dicentang.
Tampilkan Nilai
Bukan nol jika fungsi berhasil; jika tidak, 0.
Keterangan
Apakah item menu dicentang atau tidak dicentang, Windows menampilkan bitmap yang sesuai di samping item menu.
Jika salah satu pBmpUnchecked atau pBmpChecked , NULLmaka Windows tidak menampilkan apa pun di samping item menu untuk atribut yang sesuai. Jika kedua parameter adalah NULL, Windows menggunakan tanda centang default saat item dicentang dan menghapus tanda centang saat item tidak dicentang.
Ketika menu dihancurkan, bitmap ini tidak dihancurkan; aplikasi harus menghancurkannya.
Fungsi Windows GetMenuCheckMarkDimensions mengambil dimensi tanda centang default yang digunakan untuk item menu. Aplikasi menggunakan nilai-nilai ini untuk menentukan ukuran yang sesuai untuk bitmap yang disediakan dengan fungsi ini. Dapatkan ukurannya, buat bitmap Anda, lalu atur.
Contoh
// The code fragment below is from CMainFrame::OnCreate and shows
// how to associate bitmaps with the "Bitmap" menu item.
// Whether the "Bitmap" menu item is checked or unchecked, Windows
// displays the appropriate bitmap next to the menu item. Both
// IDB_CHECKBITMAP and IDB_UNCHECKBITMAP bitmaps are loaded
// in OnCreate() and destroyed in the destructor of CMainFrame class.
// CMainFrame is a CFrameWnd-derived class.
// Load bitmaps from resource. Both m_CheckBitmap and m_UnCheckBitmap
// are member variables of CMainFrame class of type CBitmap.
ASSERT(m_CheckBitmap.LoadBitmap(IDB_CHECKBITMAP));
ASSERT(m_UnCheckBitmap.LoadBitmap(IDB_UNCHECKBITMAP));
// Associate bitmaps with the "Bitmap" menu item.
CMenu *mmenu = GetMenu();
CMenu *submenu = mmenu->GetSubMenu(4);
ASSERT(submenu->SetMenuItemBitmaps(ID_MENU_BITMAP, MF_BYCOMMAND,
&m_CheckBitmap, &m_UnCheckBitmap));
// This code fragment is taken from CMainFrame::~CMainFrame
// Destroy the bitmap objects if they are loaded successfully
// in OnCreate().
if (m_CheckBitmap.m_hObject)
m_CheckBitmap.DeleteObject();
if (m_UnCheckBitmap.m_hObject)
m_UnCheckBitmap.DeleteObject();
CMenu::SetMenuItemInfo
Mengubah informasi tentang item menu.
BOOL SetMenuItemInfo(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parameter
uItem
Lihat deskripsi uItem di dalam SetMenuItemInfo Windows SDK.
lpMenuItemInfo
Lihat deskripsi lpmii di dalam SetMenuItemInfo Windows SDK.
fByPos
Lihat deskripsi fByPosition di dalam SetMenuItemInfo Windows SDK.
Keterangan
Fungsi ini membungkus SetMenuItemInfo, dijelaskan dalam Windows SDK.
CMenu::TrackPopupMenu
Menampilkan menu pop-up mengambang di lokasi yang ditentukan dan melacak pilihan item pada menu pop-up.
BOOL TrackPopupMenu(
UINT nFlags,
int x,
int y,
CWnd* pWnd,
LPCRECT lpRect = 0);
Parameter
nFlags
Menentukan bendera posisi layar dan posisi mouse. Lihat TrackPopupMenu untuk daftar bendera yang tersedia.
x
Menentukan posisi horizontal dalam koordinat layar menu pop-up. Bergantung pada nilai nFlags parameter, menu dapat diratakan kiri, rata kanan, atau berpusat relatif terhadap posisi ini.
y
Menentukan posisi vertikal dalam koordinat layar bagian atas menu pada layar.
pWnd
Mengidentifikasi jendela yang memiliki menu pop-up. Parameter ini tidak boleh NULL, meskipun TPM_NONOTIFY bendera ditentukan. Jendela ini menerima semua WM_COMMAND pesan dari menu. Di Windows versi 3.1 dan yang lebih baru, jendela tidak menerima WM_COMMAND pesan hingga TrackPopupMenu kembali. Di Windows 3.0, jendela menerima WM_COMMAND pesan sebelum TrackPopupMenu kembali.
lpRect
Diabaikan.
Tampilkan Nilai
Metode ini mengembalikan hasil panggilan TrackPopupMenu di Windows SDK.
Keterangan
Menu pop-up mengambang dapat muncul di mana saja di layar.
Contoh
// The code fragment shows how to get the File menu from the
// application window and displays it as a floating popup menu
// when the right mouse button is clicked in view.
// CMdiView is a CView-derived class.
void CMdiView::OnRButtonDown(UINT nFlags, CPoint point)
{
CView::OnRButtonDown(nFlags, point);
CMenu *menu_bar = AfxGetMainWnd()->GetMenu();
CMenu *file_menu = menu_bar->GetSubMenu(0);
ASSERT(file_menu);
ClientToScreen(&point);
file_menu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x,
point.y, this);
}
CMenu::TrackPopupMenuEx
Menampilkan menu pop-up mengambang di lokasi yang ditentukan dan melacak pilihan item pada menu pop-up.
BOOL TrackPopupMenuEx(
UINT fuFlags,
int x,
int y,
CWnd* pWnd,
LPTPMPARAMS lptpm);
Parameter
fuFlags
Menentukan berbagai fungsi untuk menu yang diperluas. Untuk daftar semua nilai dan maknanya, lihat TrackPopupMenuEx.
x
Menentukan posisi horizontal dalam koordinat layar menu pop-up.
y
Menentukan posisi vertikal dalam koordinat layar bagian atas menu pada layar.
pWnd
Penunjuk ke jendela yang memiliki menu pop-up dan menerima pesan dari menu yang dibuat. Jendela ini bisa berupa jendela apa pun dari aplikasi saat ini tetapi tidak dapat .NULL Jika Anda menentukan TPM_NONOTIFY dalam fuFlags parameter , fungsi tidak mengirim pesan apa pun ke pWnd. Fungsi harus kembali untuk jendela yang ditujuk oleh pWnd untuk menerima WM_COMMAND pesan.
lptpm
Penunjuk TPMPARAMS ke struktur yang menentukan area layar menu tidak boleh tumpang tindih. Parameter ini dapat berupa NULL.
Tampilkan Nilai
Jika Anda menentukan TPM_RETURNCMD dalam fuFlags parameter, nilai yang dikembalikan adalah pengidentifikasi item menu item yang dipilih pengguna. Jika pengguna membatalkan menu tanpa membuat pilihan, atau jika terjadi kesalahan, maka nilai yang dikembalikan adalah 0.
Jika Anda tidak menentukan TPM_RETURNCMD dalam fuFlags parameter, nilai yang dikembalikan bukan nol jika fungsi berhasil dan 0 jika gagal. Untuk mendapatkan informasi kesalahan yang diperluas, panggil GetLastError.
Keterangan
Menu pop-up mengambang dapat muncul di mana saja di layar. Untuk informasi selengkapnya tentang penanganan kesalahan saat membuat menu pop-up, lihat TrackPopupMenuEx.
Lihat juga
Sampel MFC CTRLTEST
Sampel MFC DYNAMENU
CObject Kelas
Bagan Hierarki