CMenu
Kelas
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 CMenu
fungsi 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_CHECKED
Bertindak sebagai tombolMF_UNCHECKED
dengan untuk menempatkan tanda centang default di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihatSetMenuItemBitmaps
fungsi anggota), bitmap "tanda centang pada" ditampilkan.MF_UNCHECKED
Bertindak sebagai tombolMF_CHECKED
dengan untuk menghapus tanda centang di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihatSetMenuItemBitmaps
fungsi anggota), bitmap "tanda centang mati" ditampilkan.MF_DISABLED
Menonaktifkan item menu sehingga tidak dapat dipilih tetapi tidak meredakannya.MF_ENABLED
Mengaktifkan item menu sehingga dapat dipilih dan memulihkannya dari status redup.MF_GRAYED
Menonaktifkan item menu sehingga tidak dapat dipilih dan redupkan.MF_MENUBARBREAK
Tempatkan 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_MENUBREAK
Tempatkan 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_OWNERDRAW
Menentukan bahwa item tersebut adalah item gambar pemilik. Saat menu ditampilkan untuk pertama kalinya, jendela yang memilikiWM_MEASUREITEM
menu menerima pesan, yang mengambil tinggi dan lebar item menu. PesanWM_DRAWITEM
adalah pesan yang dikirim setiap kali pemilik harus memperbarui tampilan visual item menu. Opsi ini tidak valid untuk item menu tingkat atas.MF_POPUP
Menentukan 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_SEPARATOR
Menggambar garis pembagian horizontal. Hanya dapat digunakan dalam menu pop-up. Baris ini tidak dapat diredupkan, dinonaktifkan, atau disorot. Parameter lain diabaikan.MF_STRING
Menentukan 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_GRAYED
MF_STRING
, ,MF_OWNERDRAW
MF_SEPARATOR
, dan versi bitmapMF_MENUBARBREAK
danMF_MENUBREAK
MF_CHECKED
danMF_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_BYCOMMAND
Menentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default.MF_BYPOSITION
Menentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0.MF_CHECKED
Bertindak sebagai tombolMF_UNCHECKED
dengan untuk menempatkan tanda centang default di samping item.MF_UNCHECKED
Bertindak sebagai tombolMF_CHECKED
dengan 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 , nIDFirst
nIDLast
, 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_ENABLED
atau 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_BYCOMMAND
Menentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default.MF_BYPOSITION
Menentukan bahwa parameter memberikan posisi item menu yang ada. Item pertama berada di posisi 0.MF_DISABLED
Menonaktifkan item menu sehingga tidak dapat dipilih tetapi tidak meredakannya.MF_ENABLED
Mengaktifkan item menu sehingga dapat dipilih dan memulihkannya dari status redup.MF_GRAYED
Menonaktifkan 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 CreateMenu
anggota , , InsertMenu
ModifyMenu
, 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 GetMenuDefaultItem
Win32 , 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 MENUITEMINFO
dijelaskan 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 GetLastError
Win32 , seperti yang dijelaskan di Windows SDK.
Keterangan
Fungsi anggota ini mengimplementasikan perilaku fungsi GetMenuItemInfo
Win32 , seperti yang dijelaskan dalam Windows SDK. Perhatikan bahwa dalam implementasi GetMenuItemInfo
MFC , 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_BYCOMMAND
Menentukan bahwa parameter memberikan ID perintah dari item menu yang ada. Ini adalah default.MF_BYPOSITION
Menentukan 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_CHECKED
Bertindak sebagai tombolMF_UNCHECKED
dengan untuk menempatkan tanda centang default di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihatSetMenuItemBitmaps
fungsi anggota), bitmap "tanda centang pada" ditampilkan.MF_DISABLED
Menonaktifkan item menu sehingga tidak dapat dipilih tetapi tidak meredakannya.MF_ENABLED
Mengaktifkan 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_GRAYED
Menonaktifkan item menu sehingga tidak dapat dipilih dan redupkan.MF_MENUBARBREAK
Tempatkan 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_MENUBREAK
Tempatkan 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_SEPARATOR
Menggambar garis pembagian horizontal. Hanya dapat digunakan dalam menu pop-up. Baris ini tidak dapat diredupkan, dinonaktifkan, atau disorot. Parameter lain diabaikan.MF_UNCHECKED
Bertindak sebagai tombolMF_CHECKED
dengan untuk menghapus tanda centang di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihatSetMenuItemBitmaps
fungsi 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 GetLastError
Win32 , seperti yang dijelaskan di Windows SDK.
Keterangan
Fungsi anggota ini mengimplementasikan perilaku fungsi SetMenuDefaultItem
Win32 , 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
, NULL
maka 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