Bagikan melalui


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 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

CObject

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 tombol MF_UNCHECKED dengan untuk menempatkan tanda centang default di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihat SetMenuItemBitmaps fungsi anggota), bitmap "tanda centang pada" ditampilkan.

  • MF_UNCHECKED Bertindak sebagai tombol MF_CHECKED dengan untuk menghapus tanda centang di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihat SetMenuItemBitmaps 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 memiliki WM_MEASUREITEM menu menerima pesan, yang mengambil tinggi dan lebar item menu. Pesan WM_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, dan MF_GRAYED

  • MF_STRING, , MF_OWNERDRAWMF_SEPARATOR, dan versi bitmap

  • MF_MENUBARBREAK dan MF_MENUBREAK

  • MF_CHECKED dan MF_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 tombol MF_UNCHECKED dengan untuk menempatkan tanda centang default di samping item.

  • MF_UNCHECKED Bertindak sebagai tombol MF_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 , 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_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 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_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 tombol MF_UNCHECKED dengan untuk menempatkan tanda centang default di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihat SetMenuItemBitmaps 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 tombol MF_CHECKED dengan untuk menghapus tanda centang di samping item. Ketika aplikasi menyediakan bitmap tanda centang (lihat SetMenuItemBitmaps 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 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