Classe CMenu
Incapsulamento di HMENU
di Windows.
Sintassi
class CMenu : public CObject
Membri
Costruttori pubblici
Nome | Descrizione |
---|---|
CMenu::CMenu |
Costruisce un oggetto CMenu . |
Metodi pubblici
Nome | Descrizione |
---|---|
CMenu::AppendMenu |
Aggiunge una nuova voce alla fine del menu. |
CMenu::Attach |
Collega un handle di menu di Windows a un CMenu oggetto . |
CMenu::CheckMenuItem |
Posiziona un segno di spunta accanto o rimuove un segno di spunta da una voce di menu nel menu a comparsa. |
CMenu::CheckMenuRadioItem |
Posiziona un pulsante di opzione accanto a una voce di menu e rimuove il pulsante di opzione da tutte le altre voci di menu del gruppo. |
CMenu::CreateMenu |
Crea un menu vuoto e lo collega a un CMenu oggetto . |
CMenu::CreatePopupMenu |
Crea un menu a comparsa vuoto e lo collega a un CMenu oggetto . |
CMenu::DeleteMenu |
Elimina una voce specificata dal menu. Se la voce di menu ha un menu a comparsa associato, elimina definitivamente l'handle nel menu a comparsa e libera la memoria utilizzata da esso. |
CMenu::DeleteTempMap |
Elimina tutti gli oggetti temporanei CMenu creati dalla FromHandle funzione membro. |
CMenu::DestroyMenu |
Elimina definitivamente il menu associato a un CMenu oggetto e libera qualsiasi memoria occupata dal menu. |
CMenu::Detach |
Scollega un handle di menu di Windows da un CMenu oggetto e restituisce l'handle. |
CMenu::DrawItem |
Chiamato dal framework quando cambia un aspetto visivo di un menu creato dal proprietario. |
CMenu::EnableMenuItem |
Abilita, disabilita o disattiva (grigi) una voce di menu. |
CMenu::FromHandle |
Restituisce un puntatore a un oggetto in base a un CMenu handle di menu di Windows. |
CMenu::GetDefaultItem |
Determina la voce di menu predefinita nel menu specificato. |
CMenu::GetMenuContextHelpId |
Recupera l'ID di contesto della Guida associato al menu. |
CMenu::GetMenuInfo |
Recupera informazioni in un menu specifico. |
CMenu::GetMenuItemCount |
Determina il numero di elementi in un menu a comparsa o di primo livello. |
CMenu::GetMenuItemID |
Ottiene l'identificatore della voce di menu per una voce di menu che si trova nella posizione specificata. |
CMenu::GetMenuItemInfo |
Recupera informazioni su una voce di menu. |
CMenu::GetMenuState |
Restituisce lo stato della voce di menu specificata o del numero di elementi in un menu a comparsa. |
CMenu::GetMenuString |
Recupera l'etichetta della voce di menu specificata. |
CMenu::GetSafeHmenu |
Restituisce l'oggetto di cui è stato eseguito il m_hMenu wrapping da questo CMenu oggetto. |
CMenu::GetSubMenu |
Recupera un puntatore a un menu a comparsa. |
CMenu::InsertMenu |
Inserisce una nuova voce di menu nella posizione specificata, spostando le altre voci verso il basso nel menu. |
CMenu::InsertMenuItem |
Inserisce una nuova voce di menu nella posizione specificata in un menu. |
CMenu::LoadMenu |
Carica una risorsa di menu dal file eseguibile e la collega a un CMenu oggetto . |
CMenu::LoadMenuIndirect |
Carica un menu da un modello di menu in memoria e lo collega a un CMenu oggetto . |
CMenu::MeasureItem |
Chiamato dal framework per determinare le dimensioni del menu quando viene creato un menu creato dal proprietario. |
CMenu::ModifyMenu |
Modifica una voce di menu esistente nella posizione specificata. |
CMenu::RemoveMenu |
Elimina una voce di menu con un menu a comparsa associato dal menu specificato. |
CMenu::SetDefaultItem |
Imposta la voce di menu predefinita per il menu specificato. |
CMenu::SetMenuContextHelpId |
Imposta l'ID di scelta rapida della Guida da associare al menu. |
CMenu::SetMenuInfo |
Imposta informazioni su un menu specifico. |
CMenu::SetMenuItemBitmaps |
Associa le bitmap di segno di spunta specificate a una voce di menu. |
CMenu::SetMenuItemInfo |
Modifica le informazioni su una voce di menu. |
CMenu::TrackPopupMenu |
Visualizza un menu a comparsa mobile nella posizione specificata e tiene traccia della selezione di elementi nel menu a comparsa. |
CMenu::TrackPopupMenuEx |
Visualizza un menu a comparsa mobile nella posizione specificata e tiene traccia della selezione di elementi nel menu a comparsa. |
Operatori pubblici
Nome | Descrizione |
---|---|
CMenu::operator HMENU |
Recupera l'handle dell'oggetto menu. |
CMenu::operator != |
Determina se due oggetti di menu non sono uguali. |
CMenu::operator == |
Determina se due oggetti di menu sono uguali. |
Membri dati pubblici
Nome | Descrizione |
---|---|
CMenu::m_hMenu |
Specifica l'handle al menu di Windows associato all'oggetto CMenu . |
Osservazioni:
Fornisce funzioni membro per la creazione, il rilevamento, l'aggiornamento e l'eliminazione di un menu.
Creare un CMenu
oggetto nello stack frame come locale, quindi chiamare CMenu
le funzioni membro di per modificare il nuovo menu in base alle esigenze. Chiamare CWnd::SetMenu
quindi per impostare il menu su una finestra, seguito immediatamente da una chiamata alla CMenu
funzione membro dell'oggetto Detach
. La CWnd::SetMenu
funzione membro imposta il menu della finestra sul nuovo menu, fa sì che la finestra venga ridisegnata in modo da riflettere la modifica del menu e passa anche la proprietà del menu alla finestra. La chiamata a scollega l'oggetto Detach
HMENU
dall'oggetto, in modo che quando la variabile locale CMenu
esce dall'ambitoCMenu
, il CMenu
distruttore dell'oggetto non tenta di eliminare definitivamente un menu di cui non è più proprietario. Il menu stesso viene eliminato automaticamente quando la finestra viene eliminata definitivamente.
È possibile usare la LoadMenuIndirect
funzione membro per creare un menu da un modello in memoria, ma un menu creato da una risorsa da una chiamata a LoadMenu
è più facilmente gestito e la risorsa di menu stessa può essere creata e modificata dall'editor di menu.
Gerarchia di ereditarietà
CMenu
Requisiti
Intestazione: afxwin.h
CMenu::AppendMenu
Aggiunge una nuova voce alla fine di un menu.
BOOL AppendMenu(
UINT nFlags,
UINT_PTR nIDNewItem = 0,
LPCTSTR lpszNewItem = NULL);
BOOL AppendMenu(
UINT nFlags,
UINT_PTR nIDNewItem,
const CBitmap* pBmp);
Parametri
nFlags
Specifica le informazioni sullo stato della nuova voce di menu quando viene aggiunta al menu. È costituito da uno o più valori elencati nella sezione Osservazioni.
nIDNewItem
Specifica l'ID comando della nuova voce di menu oppure, se nFlags
è impostato su MF_POPUP
, l'handle di menu (HMENU
) di un menu a comparsa. Il nIDNewItem
parametro viene ignorato (non necessario) se nFlags
è impostato su MF_SEPARATOR
.
lpszNewItem
Specifica il contenuto della nuova voce di menu. Il nFlags
parametro viene usato per interpretare lpszNewItem
nel modo seguente:
nFlags |
Interpretazione di lpszNewItem |
---|---|
MF_OWNERDRAW |
Contiene un valore a 32 bit fornito dall'applicazione che l'applicazione può usare per mantenere dati aggiuntivi associati alla voce di menu. Questo valore a 32 bit è disponibile per l'applicazione durante l'elaborazione WM_MEASUREITEM e WM_DRAWITEM i messaggi. Il valore viene archiviato nel itemData membro della struttura fornita con tali messaggi. |
MF_STRING |
Contiene un puntatore a una stringa con terminazione Null. Questa è l'interpretazione predefinita. |
MF_SEPARATOR |
Il lpszNewItem parametro viene ignorato (non necessario). |
pBmp
Punta a un CBitmap
oggetto che verrà utilizzato come voce di menu.
Valore restituito
Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.
Osservazioni:
L'applicazione può specificare lo stato della voce di menu impostando i valori in nFlags
. Quando nIDNewItem
specifica un menu a comparsa, diventa parte del menu a cui viene accodato. Se il menu viene eliminato definitivamente, verrà eliminato anche il menu aggiunto. Per evitare conflitti, è necessario scollegare un menu accodato da un CMenu
oggetto . Si noti che MF_STRING
e MF_OWNERDRAW
non sono validi per la versione bitmap di AppendMenu
.
L'elenco seguente descrive i flag che possono essere impostati in nFlags
:
MF_CHECKED
Funge da interruttore conMF_UNCHECKED
per posizionare il segno di spunta predefinito accanto all'elemento. Quando l'applicazione fornisce bitmap con segno di spunta (vedere la funzione membro), viene visualizzata laSetMenuItemBitmaps
bitmap "check mark on".MF_UNCHECKED
Funge da interruttore conMF_CHECKED
per rimuovere un segno di spunta accanto all'elemento. Quando l'applicazione fornisce bitmap con segno di spunta (vedere la funzione membro), viene visualizzata laSetMenuItemBitmaps
bitmap "check mark off".MF_DISABLED
Disabilita la voce di menu in modo che non possa essere selezionata, ma non lo dim.MF_ENABLED
Abilita la voce di menu in modo che possa essere selezionata e ripristinata dallo stato disattivato.MF_GRAYED
Disabilita la voce di menu in modo che non possa essere selezionata e disattivata.MF_MENUBARBREAK
Inserisce l'elemento in una nuova riga nei menu statici o in una nuova colonna nei menu a comparsa. La nuova colonna del menu a comparsa verrà separata dalla colonna precedente in base a una linea di divisione verticale.MF_MENUBREAK
Inserisce l'elemento in una nuova riga nei menu statici o in una nuova colonna nei menu a comparsa. Nessuna linea di divisione viene posizionata tra le colonne.MF_OWNERDRAW
Specifica che l'elemento è un elemento di disegno proprietario. Quando il menu viene visualizzato per la prima volta, la finestra proprietaria del menu riceve unWM_MEASUREITEM
messaggio, che recupera l'altezza e la larghezza della voce di menu. IlWM_DRAWITEM
messaggio è quello inviato ogni volta che il proprietario deve aggiornare l'aspetto visivo della voce di menu. Questa opzione non è valida per una voce di menu di primo livello.MF_POPUP
Specifica che alla voce di menu è associato un menu a comparsa. Il parametro ID specifica un handle per un menu a comparsa da associare all'elemento. Viene usato per aggiungere un menu a comparsa di primo livello o un menu a comparsa gerarchico a una voce di menu a comparsa.MF_SEPARATOR
Disegna una linea di divisione orizzontale. Può essere usato solo in un menu a comparsa. Questa riga non può essere disattivata, disabilitata o evidenziata. Gli altri parametri vengono ignorati.MF_STRING
Specifica che la voce di menu è una stringa di caratteri.
Ognuno dei gruppi seguenti elenca i flag che si escludono a vicenda e non possono essere usati insieme:
MF_DISABLED
,MF_ENABLED
eMF_GRAYED
MF_STRING
,MF_OWNERDRAW
,MF_SEPARATOR
e la versione bitmapMF_MENUBARBREAK
eMF_MENUBREAK
MF_CHECKED
eMF_UNCHECKED
Ogni volta che un menu che risiede in una finestra viene modificato (indipendentemente dal fatto che venga visualizzata o meno la finestra), l'applicazione deve chiamare CWnd::DrawMenuBar
.
Esempio
Vedere l'esempio per CMenu::CreateMenu
.
CMenu::Attach
Collega un menu di Windows esistente a un CMenu
oggetto .
BOOL Attach(HMENU hMenu);
Parametri
hMenu
Specifica un handle per un menu di Windows.
Valore restituito
Diverso da zero se l'operazione ha avuto esito positivo; in caso contrario, 0.
Osservazioni:
Questa funzione non deve essere chiamata se un menu è già associato all'oggetto CMenu
. L'handle m_hMenu
di menu viene archiviato nel membro dati.
Se il menu che si desidera modificare è già associato a una finestra, è possibile usare la CWnd::GetMenu
funzione per ottenere un handle al menu.
Esempio
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
Aggiunge segni di spunta o rimuove i segni di spunta dalle voci di menu nel menu a comparsa.
UINT CheckMenuItem(
UINT nIDCheckItem,
UINT nCheck);
Parametri
nIDCheckItem
Specifica la voce di menu da controllare, come determinato da nCheck
.
nCheck
Specifica come controllare la voce di menu e come determinare la posizione dell'elemento nel menu. Il nCheck
parametro può essere una combinazione di MF_CHECKED
o MF_UNCHECKED
con MF_BYPOSITION
o MF_BYCOMMAND
flag. Questi flag possono essere combinati usando l'operatore OR bit per bit. Hanno i significati seguenti:
MF_BYCOMMAND
Specifica che il parametro fornisce l'ID comando della voce di menu esistente. Si tratta dell'impostazione predefinita.MF_BYPOSITION
Specifica che il parametro fornisce la posizione della voce di menu esistente. Il primo elemento si trova nella posizione 0.MF_CHECKED
Funge da interruttore conMF_UNCHECKED
per posizionare il segno di spunta predefinito accanto all'elemento.MF_UNCHECKED
Funge da interruttore conMF_CHECKED
per rimuovere un segno di spunta accanto all'elemento.
Valore restituito
Stato precedente dell'elemento: MF_CHECKED
o MF_UNCHECKED
o se 0xFFFFFFFF
la voce di menu non esiste.
Osservazioni:
Il nIDCheckItem
parametro specifica l'elemento da modificare.
Il nIDCheckItem
parametro può identificare una voce di menu a comparsa e una voce di menu. Non sono necessari passaggi speciali per controllare una voce di menu a comparsa. Impossibile controllare le voci di menu di primo livello. Una voce di menu a comparsa deve essere selezionata in base alla posizione perché non dispone di un identificatore di voce di menu associato.
Esempio
Vedere l'esempio per CMenu::GetMenuState
.
CMenu::CheckMenuRadioItem
Controlla una voce di menu specificata e la rende una voce di opzione.
BOOL CheckMenuRadioItem(
UINT nIDFirst,
UINT nIDLast,
UINT nIDItem,
UINT nFlags);
Parametri
nIDFirst
Specifica (come ID o offset, a seconda del valore di ) la prima voce di nFlags
menu nel gruppo di pulsanti di opzione.
nIDLast
Specifica (come ID o offset, a seconda del valore di ) l'ultima voce di nFlags
menu nel gruppo di pulsanti di opzione.
nIDItem
Specifica (come ID o offset, a seconda del valore di nFlags
) l'elemento nel gruppo che verrà controllato con un pulsante di opzione.
nFlags
Specifica l'interpretazione di nIDFirst
, nIDLast
e nIDItem
nel modo seguente:
nFlags | Interpretazione |
---|---|
MF_BYCOMMAND |
Specifica che il parametro fornisce l'ID comando della voce di menu esistente. Questa è l'impostazione predefinita se né MF_BYCOMMAND MF_BYPOSITION né è impostata. |
MF_BYPOSITION |
Specifica che il parametro fornisce la posizione della voce di menu esistente. Il primo elemento si trova nella posizione 0. |
Valore restituito
Diverso da zero se ha esito positivo; in caso contrario 0
Osservazioni:
Allo stesso tempo, la funzione deseleziona tutte le altre voci di menu nel gruppo associato e cancella il flag del tipo di elemento di opzione per tali elementi. L'elemento selezionato viene visualizzato usando una bitmap di un pulsante di opzione (o un punto elenco) anziché una bitmap del segno di spunta.
Esempio
Vedere l'esempio per ON_COMMAND_RANGE
.
CMenu::CMenu
Crea un menu vuoto e lo collega a un CMenu
oggetto .
CMenu();
Osservazioni:
Il menu non viene creato fino a quando non si chiama una delle funzioni membro di creazione o caricamento di CMenu
:
CMenu::CreateMenu
Crea un menu e lo collega all'oggetto CMenu
.
BOOL CreateMenu();
Valore restituito
Diverso da zero se il menu è stato creato correttamente; in caso contrario, 0.
Osservazioni:
Il menu è inizialmente vuoto. È possibile aggiungere voci di menu tramite la AppendMenu
funzione membro o InsertMenu
.
Se il menu viene assegnato a una finestra, viene eliminato automaticamente quando la finestra viene eliminata definitivamente.
Prima di uscire, un'applicazione deve liberare le risorse di sistema associate a un menu se il menu non è assegnato a una finestra. Un'applicazione libera un menu chiamando la DestroyMenu
funzione membro.
Esempio
// 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
Crea un menu a comparsa e lo collega all'oggetto CMenu
.
BOOL CreatePopupMenu();
Valore restituito
Diverso da zero se il menu a comparsa è stato creato correttamente; in caso contrario, 0.
Osservazioni:
Il menu è inizialmente vuoto. È possibile aggiungere voci di menu tramite la AppendMenu
funzione membro o InsertMenu
. L'applicazione può aggiungere il menu a comparsa a un menu esistente o a un menu a comparsa. La TrackPopupMenu
funzione membro può essere usata per visualizzare questo menu come menu a comparsa mobile e per tenere traccia delle selezioni nel menu a comparsa.
Se il menu viene assegnato a una finestra, viene eliminato automaticamente quando la finestra viene eliminata definitivamente. Se il menu viene aggiunto a un menu esistente, viene eliminato automaticamente quando il menu viene eliminato definitivamente.
Prima di uscire, un'applicazione deve liberare le risorse di sistema associate a un menu a comparsa se il menu non è assegnato a una finestra. Un'applicazione libera un menu chiamando la DestroyMenu
funzione membro.
Esempio
Vedere l'esempio per CMenu::CreateMenu
.
CMenu::DeleteMenu
Elimina una voce dal menu.
BOOL DeleteMenu(
UINT nPosition,
UINT nFlags);
Parametri
nPosition
Specifica la voce di menu da eliminare, come determinato da nFlags
.
nFlags
Viene usato per interpretare nPosition
nel modo seguente:
nFlags |
Interpretazione di nPosition |
---|---|
MF_BYCOMMAND |
Specifica che il parametro fornisce l'ID comando della voce di menu esistente. Questa è l'impostazione predefinita se né MF_BYCOMMAND MF_BYPOSITION né è impostata. |
MF_BYPOSITION |
Specifica che il parametro fornisce la posizione della voce di menu esistente. Il primo elemento si trova nella posizione 0. |
Valore restituito
Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.
Osservazioni:
Se la voce di menu ha un menu a comparsa associato, DeleteMenu
elimina definitivamente l'handle nel menu a comparsa e libera la memoria utilizzata dal menu a comparsa.
Ogni volta che un menu che risiede in una finestra viene modificato (indipendentemente dal fatto che venga visualizzata o meno la finestra), l'applicazione deve chiamare CWnd::DrawMenuBar
.
Esempio
Vedere l'esempio per CWnd::GetMenu
.
CMenu::DeleteTempMap
Chiamato automaticamente dal CWinApp
gestore tempo di inattività, elimina tutti gli oggetti temporanei CMenu
creati dalla FromHandle
funzione membro.
static void PASCAL DeleteTempMap();
Osservazioni:
DeleteTempMap
scollega l'oggetto menu di Windows associato a un oggetto temporaneo CMenu
prima di eliminare l'oggetto CMenu
.
Esempio
// DeleteTempMap() is a static member and does not need
// an instantiated CMenu object.
CMenu::DeleteTempMap();
CMenu::DestroyMenu
Elimina definitivamente il menu e tutte le risorse di Windows usate.
BOOL DestroyMenu();
Valore restituito
Diverso da zero se il menu viene distrutto; in caso contrario, 0.
Osservazioni:
Il menu viene scollegato dall'oggetto CMenu
prima che venga eliminato definitivamente. La funzione Windows DestroyMenu
viene chiamata automaticamente nel CMenu
distruttore.
Esempio
Vedere l'esempio per CMenu::CreateMenu
.
CMenu::Detach
Scollega un menu di Windows da un CMenu
oggetto e restituisce l'handle.
HMENU Detach();
Valore restituito
Handle, di tipo HMENU
, in un menu di Windows, se ha esito positivo; in caso contrario NULL
, .
Osservazioni:
Il m_hMenu
membro dati è impostato su NULL
.
Esempio
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
Chiamato dal framework quando cambia un aspetto visivo di un menu creato dal proprietario.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parametri
lpDrawItemStruct
Puntatore a una DRAWITEMSTRUCT
struttura che contiene informazioni sul tipo di disegno richiesto.
Osservazioni:
Il itemAction
membro della DRAWITEMSTRUCT
struttura definisce l'azione di disegno da eseguire. Eseguire l'override di questa funzione membro per implementare il disegno per un oggetto di disegno CMenu
proprietario. L'applicazione deve ripristinare tutti gli oggetti GDI (Graphics Device Interface) selezionati per il contesto di visualizzazione fornito in lpDrawItemStruct
prima della terminazione di questa funzione membro.
Vedere CWnd::OnDrawItem
per una descrizione della DRAWITEMSTRUCT
struttura.
Esempio
Il codice seguente proviene dall'esempio 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
Abilita, disabilita o disattiva una voce di menu.
UINT EnableMenuItem(
UINT nIDEnableItem,
UINT nEnable);
Parametri
nIDEnableItem
Specifica la voce di menu da abilitare, come determinato da nEnable
. Questo parametro può specificare voci di menu a comparsa e voci di menu standard.
nEnable
Specifica l'azione da eseguire. Può essere una combinazione di MF_DISABLED
, MF_ENABLED
o MF_GRAYED
, con MF_BYCOMMAND
o MF_BYPOSITION
. Questi valori possono essere combinati usando l'operatore OR bit per bit C++ (|
). I valori hanno il significato seguente:
MF_BYCOMMAND
Specifica che il parametro fornisce l'ID comando della voce di menu esistente. Si tratta dell'impostazione predefinita.MF_BYPOSITION
Specifica che il parametro fornisce la posizione della voce di menu esistente. Il primo elemento si trova nella posizione 0.MF_DISABLED
Disabilita la voce di menu in modo che non possa essere selezionata, ma non lo dim.MF_ENABLED
Abilita la voce di menu in modo che possa essere selezionata e ripristinata dallo stato disattivato.MF_GRAYED
Disabilita la voce di menu in modo che non possa essere selezionata e disattivata.
Valore restituito
Stato precedente (MF_DISABLED
, MF_ENABLED
o MF_GRAYED
) o -1 se non valido.
Osservazioni:
Le CreateMenu
funzioni membro , InsertMenu
ModifyMenu
, e LoadMenuIndirect
possono anche impostare lo stato (abilitato, disabilitato o disattivato) di una voce di menu.
L'uso del MF_BYPOSITION
valore richiede che un'applicazione usi l'oggetto corretto CMenu
. Se viene utilizzata la CMenu
barra dei menu, viene interessata una voce di menu di primo livello (una voce nella barra dei menu). Per impostare lo stato di un elemento in un menu a comparsa o annidato in base alla posizione, un'applicazione deve specificare il CMenu
del menu a comparsa.
Quando un'applicazione specifica il MF_BYCOMMAND
flag, Windows controlla tutte le voci di menu a comparsa subordinate a CMenu
, pertanto, a meno che non siano presenti voci di menu duplicate, l'utilizzo CMenu
della barra dei menu è sufficiente.
Esempio
// 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
Restituisce un puntatore a un CMenu
oggetto dato un handle di Windows a un menu.
static CMenu* PASCAL FromHandle(HMENU hMenu);
Parametri
hMenu
Handle di Windows in un menu.
Valore restituito
Puntatore a un CMenu
oggetto che può essere temporaneo o permanente.
Osservazioni:
Se un CMenu
oggetto non è già collegato all'oggetto menu di Windows, viene creato e associato un oggetto temporaneo CMenu
.
Questo oggetto temporaneo CMenu
è valido solo alla successiva esecuzione dell'applicazione nel ciclo di eventi, in cui vengono eliminati tutti gli oggetti temporanei.
Esempio
Vedere l'esempio per CMenu::CreateMenu
.
CMenu::GetDefaultItem
Determina la voce di menu predefinita nel menu specificato.
UINT GetDefaultItem(
UINT gmdiFlags,
BOOL fByPos = FALSE);
Parametri
gmdiFlags
Valore che specifica il modo in cui la funzione cerca le voci di menu. Questo parametro può essere nessuno, uno o una combinazione dei valori seguenti:
Valore | Significato |
---|---|
GMDI_GOINTOPOPUPS |
Specifica che, se l'elemento predefinito è uno che apre un sottomenu, la funzione consiste nel cercare in modo ricorsivo nel sottomenu corrispondente. Se il sottomenu non ha alcun elemento predefinito, il valore restituito identifica l'elemento che apre il sottomenu. Per impostazione predefinita, la funzione restituisce la prima voce predefinita nel menu specificato, indipendentemente dal fatto che si tratti di un elemento che apre un sottomenu. |
GMDI_USEDISABLED |
Specifica che la funzione deve restituire un elemento predefinito, anche se è disabilitato. Per impostazione predefinita, la funzione ignora gli elementi disabilitati o disattivati. |
fByPos
Valore che specifica se recuperare l'identificatore della voce di menu o la relativa posizione. Se questo parametro è FALSE
, viene restituito l'identificatore . In caso contrario, viene restituita la posizione.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è l'identificatore o la posizione della voce di menu. Se la funzione ha esito negativo, il valore restituito è - 1.
Osservazioni:
Questa funzione membro implementa il comportamento della funzione GetMenuDefaultItem
Win32 , come descritto in Windows SDK.
Esempio
Vedere l'esempio per CMenu::InsertMenu
.
CMenu::GetMenuContextHelpId
Recupera l'ID della Guida del contesto associato a CMenu
.
DWORD GetMenuContextHelpId() const;
Valore restituito
L'ID della Guida di contesto attualmente associato a CMenu
se ne ha uno; in caso contrario, zero.
Esempio
Vedere l'esempio per CMenu::InsertMenu
.
CMenu::GetMenuInfo
Recupera informazioni per un menu.
BOOL GetMenuInfo(LPMENUINFO lpcmi) const;
Parametri
lpcmi
Puntatore a una MENUINFO
struttura contenente informazioni per il menu.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è diverso da zero; in caso contrario, il valore restituito è zero.
Osservazioni:
Chiamare questa funzione per recuperare informazioni sul menu.
CMenu::GetMenuItemCount
Determina il numero di elementi in un menu a comparsa o di primo livello.
UINT GetMenuItemCount() const;
Valore restituito
Numero di voci nel menu se la funzione ha esito positivo; in caso contrario -1.
Esempio
Vedere l'esempio per CWnd::GetMenu
.
CMenu::GetMenuItemID
Ottiene l'identificatore della voce di menu per una voce di menu che si trova nella posizione definita da nPos
.
UINT GetMenuItemID(int nPos) const;
Parametri
nPos
Specifica la posizione (in base zero) della voce di menu il cui ID viene recuperato.
Valore restituito
ID elemento per l'elemento specificato in un menu a comparsa se la funzione ha esito positivo. Se l'elemento specificato è un menu a comparsa anziché un elemento nel menu a comparsa, il valore restituito è -1. Se nPos
corrisponde a una SEPARATOR
voce di menu, il valore restituito è 0.
Esempio
Vedere l'esempio per CMenu::InsertMenu
.
CMenu::GetMenuItemInfo
Recupera informazioni su una voce di menu.
BOOL GetMenuItemInfo(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parametri
uItem
Identificatore o posizione della voce di menu per ottenere informazioni. Il significato di questo parametro dipende dal valore di ByPos
.
lpMenuItemInfo
Puntatore a un oggetto MENUITEMINFO
, come descritto in Windows SDK, che contiene informazioni sul menu.
fByPos
Valore che specifica il significato di nIDItem
. Per impostazione predefinita, ByPos
è FALSE
, che indica che uItem è un identificatore di voce di menu. Se ByPos
non è impostato su FALSE
, indica una posizione della voce di menu.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è diverso da zero. Se la funzione ha esito negativo, il valore restituito è zero. Per ottenere informazioni estese sull'errore, usare la funzione GetLastError
Win32 , come descritto in Windows SDK.
Osservazioni:
Questa funzione membro implementa il comportamento della funzione GetMenuItemInfo
Win32 , come descritto in Windows SDK. Si noti che nell'implementazione MFC di GetMenuItemInfo
non si usa un handle per un menu.
Esempio
// 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
Restituisce lo stato della voce di menu specificata o del numero di elementi in un menu a comparsa.
UINT GetMenuState(
UINT nID,
UINT nFlags) const;
Parametri
nID
Specifica l'ID voce di menu, come determinato da nFlags
.
nFlags
Specifica la natura di nID
. Può essere uno dei valori seguenti:
MF_BYCOMMAND
Specifica che il parametro fornisce l'ID comando della voce di menu esistente. Si tratta dell'impostazione predefinita.MF_BYPOSITION
Specifica che il parametro fornisce la posizione della voce di menu esistente. Il primo elemento si trova nella posizione 0.
Valore restituito
Valore 0xFFFFFFFF
se l'elemento specificato non esiste. Se nId
identifica un menu a comparsa, il byte di ordine elevato contiene il numero di elementi nel menu a comparsa e il byte di ordine basso contiene i flag di menu associati al menu a comparsa. In caso contrario, il valore restituito è una maschera (OR booleano) dei valori dell'elenco seguente (questa maschera descrive lo stato della voce di menu che nId
identifica):
MF_CHECKED
Funge da interruttore conMF_UNCHECKED
per posizionare il segno di spunta predefinito accanto all'elemento. Quando l'applicazione fornisce bitmap con segno di spunta (vedere la funzione membro), viene visualizzata laSetMenuItemBitmaps
bitmap "check mark on".MF_DISABLED
Disabilita la voce di menu in modo che non possa essere selezionata, ma non lo dim.MF_ENABLED
Abilita la voce di menu in modo che possa essere selezionata e ripristinata dallo stato disattivato. Si noti che il valore di questa costante è 0; Un'applicazione non deve eseguire il test su 0 in caso di errore quando si usa questo valore.MF_GRAYED
Disabilita la voce di menu in modo che non possa essere selezionata e disattivata.MF_MENUBARBREAK
Inserisce l'elemento in una nuova riga nei menu statici o in una nuova colonna nei menu a comparsa. La nuova colonna del menu a comparsa verrà separata dalla colonna precedente in base a una linea di divisione verticale.MF_MENUBREAK
Inserisce l'elemento in una nuova riga nei menu statici o in una nuova colonna nei menu a comparsa. Nessuna linea di divisione viene posizionata tra le colonne.MF_SEPARATOR
Disegna una linea di divisione orizzontale. Può essere usato solo in un menu a comparsa. Questa riga non può essere disattivata, disabilitata o evidenziata. Gli altri parametri vengono ignorati.MF_UNCHECKED
Funge da interruttore conMF_CHECKED
per rimuovere un segno di spunta accanto all'elemento. Quando l'applicazione fornisce bitmap con segno di spunta (vedere la funzione membro), viene visualizzata laSetMenuItemBitmaps
bitmap "check mark off". Si noti che il valore di questa costante è 0; Un'applicazione non deve eseguire il test su 0 in caso di errore quando si usa questo valore.
Esempio
// 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
Copia l'etichetta della voce di menu specificata nel buffer specificato.
int GetMenuString(
UINT nIDItem,
LPTSTR lpString,
int nMaxCount,
UINT nFlags) const;
int GetMenuString(
UINT nIDItem,
CString& rString,
UINT nFlags) const;
Parametri
nIDItem
Specifica l'identificatore intero della voce di menu o l'offset della voce di menu nel menu, a seconda del valore di nFlags
.
lpString
Punta al buffer che deve ricevere l'etichetta.
rString
Riferimento a un CString
oggetto che deve ricevere la stringa di menu copiata.
nMaxCount
Specifica la lunghezza massima, espressa in caratteri, dell'etichetta da copiare. Se l'etichetta è più lunga del valore massimo specificato in nMaxCount
, i caratteri aggiuntivi vengono troncati.
nFlags
Specifica l'interpretazione del nIDItem
parametro. Può essere uno dei valori seguenti:
nFlags |
Interpretazione di nIDItem |
---|---|
MF_BYCOMMAND |
Specifica che il parametro fornisce l'ID comando della voce di menu esistente. Questa è l'impostazione predefinita se né MF_BYCOMMAND MF_BYPOSITION né è impostata. |
MF_BYPOSITION |
Specifica che il parametro fornisce la posizione della voce di menu esistente. Il primo elemento si trova nella posizione 0. |
Valore restituito
Specifica il numero effettivo di caratteri copiati nel buffer, senza includere il carattere di terminazione Null.
Osservazioni:
Il nMaxCount
parametro deve essere maggiore del numero di caratteri nell'etichetta per contenere il carattere Null che termina una stringa.
Esempio
Vedere l'esempio per CMenu::InsertMenu
.
CMenu::GetSafeHmenu
Restituisce l'oggetto di cui è stato eseguito il HMENU
wrapping da questo CMenu
oggetto o da un NULL
CMenu
puntatore.
HMENU GetSafeHmenu() const;
Esempio
Vedere l'esempio per CMenu::LoadMenu
.
CMenu::GetSubMenu
Recupera l'oggetto CMenu
di un menu a comparsa.
CMenu* GetSubMenu(int nPos) const;
Parametri
nPos
Specifica la posizione del menu a comparsa contenuto nel menu. I valori di posizione iniziano da 0 per la prima voce di menu. L'identificatore del menu a comparsa non può essere usato in questa funzione.
Valore restituito
Puntatore a un CMenu
oggetto il cui m_hMenu
membro contiene un handle al menu a comparsa se esiste un menu a comparsa nella posizione specificata; in caso contrario NULL
, . Se un CMenu
oggetto non esiste, ne viene creato uno temporaneo. Il CMenu
puntatore restituito non deve essere archiviato.
Esempio
Vedere l'esempio per CMenu::TrackPopupMenu
.
CMenu::InsertMenu
Inserisce una nuova voce di menu nella posizione specificata da nPosition
e sposta le altre voci verso il basso nel 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);
Parametri
nPosition
Specifica la voce di menu prima della quale deve essere inserita la nuova voce di menu. Il nFlags
parametro può essere usato per interpretare nPosition
nei modi seguenti:
nFlags |
Interpretazione di nPosition |
---|---|
MF_BYCOMMAND |
Specifica che il parametro fornisce l'ID comando della voce di menu esistente. Questa è l'impostazione predefinita se né MF_BYCOMMAND MF_BYPOSITION né è impostata. |
MF_BYPOSITION |
Specifica che il parametro fornisce la posizione della voce di menu esistente. Il primo elemento si trova nella posizione 0. Se nPosition è -1, la nuova voce di menu viene aggiunta alla fine del menu. |
nFlags
Specifica come nPosition
viene interpretato e specifica le informazioni sullo stato della nuova voce di menu quando viene aggiunta al menu. Per un elenco dei flag che possono essere impostati, vedere la AppendMenu
funzione membro. Per specificare più valori, usare l'operatore OR bit per bit per combinarli con il MF_BYCOMMAND
flag o MF_BYPOSITION
.
nIDNewItem
Specifica l'ID comando della nuova voce di menu oppure, se nFlags
è impostato su MF_POPUP
, l'handle di menu (HMENU
) del menu a comparsa. Il nIDNewItem
parametro viene ignorato (non necessario) se nFlags
è impostato su MF_SEPARATOR
.
lpszNewItem
Specifica il contenuto della nuova voce di menu. nFlags
può essere usato per interpretare lpszNewItem
nei modi seguenti:
nFlags |
Interpretazione di lpszNewItem |
---|---|
MF_OWNERDRAW |
Contiene un valore a 32 bit fornito dall'applicazione che l'applicazione può usare per mantenere dati aggiuntivi associati alla voce di menu. Questo valore a 32 bit è disponibile per l'applicazione nel itemData membro della struttura fornita dai WM_MEASUREITEM messaggi e WM_DRAWITEM . Questi messaggi vengono inviati quando la voce di menu viene inizialmente visualizzata o modificata. |
MF_STRING |
Contiene un puntatore lungo a una stringa con terminazione Null. Questa è l'interpretazione predefinita. |
MF_SEPARATOR |
Il lpszNewItem parametro viene ignorato (non necessario). |
pBmp
Punta a un CBitmap
oggetto che verrà utilizzato come voce di menu.
Valore restituito
Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.
Osservazioni:
L'applicazione può specificare lo stato della voce di menu impostando i valori in nFlags
.
Ogni volta che un menu che risiede in una finestra viene modificato (indipendentemente dal fatto che venga visualizzata o meno la finestra), l'applicazione deve chiamare CWnd::DrawMenuBar
.
Quando nIDNewItem
specifica un menu a comparsa, diventa parte del menu in cui viene inserito. Se il menu viene eliminato definitivamente, verrà eliminato anche il menu inserito. Per evitare conflitti, è necessario scollegare un menu inserito da un CMenu
oggetto .
Se la finestra figlio MDI (Multiple Document Interface) attiva è ingrandita e un'applicazione inserisce un menu a comparsa nel menu dell'applicazione MDI chiamando questa funzione e specificando il MF_BYPOSITION
flag, il menu viene inserito più a sinistra del previsto. Ciò si verifica perché il menu Controllo della finestra figlio MDI attiva viene inserito nella prima posizione della barra dei menu della finestra cornice MDI. Per posizionare correttamente il menu, l'applicazione deve aggiungere 1 al valore di posizione che altrimenti verrebbe usato. Un'applicazione può usare il WM_MDIGETACTIVE
messaggio per determinare se la finestra figlio attualmente attiva è ingrandita.
Esempio
// 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
Inserisce una nuova voce di menu nella posizione specificata in un menu.
BOOL InsertMenuItem(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parametri
uItem
Vedere la descrizione di uItem
in InsertMenuItem
In Windows SDK.
lpMenuItemInfo
Vedere la descrizione di lpmii
in InsertMenuItem
In Windows SDK.
fByPos
Vedere la descrizione di fByPosition
in InsertMenuItem
In Windows SDK.
Osservazioni:
Questa funzione esegue il wrapping di InsertMenuItem
, descritto in Windows SDK.
CMenu::LoadMenu
Carica una risorsa di menu dal file eseguibile dell'applicazione e la collega all'oggetto CMenu
.
BOOL LoadMenu(LPCTSTR lpszResourceName);
BOOL LoadMenu(UINT nIDResource);
Parametri
lpszResourceName
Punta a una stringa con terminazione Null contenente il nome della risorsa di menu da caricare.
nIDResource
Specifica l'ID menu della risorsa di menu da caricare.
Valore restituito
Diverso da zero se la risorsa di menu è stata caricata correttamente; in caso contrario, 0.
Osservazioni:
Prima di uscire, un'applicazione deve liberare le risorse di sistema associate a un menu se il menu non è assegnato a una finestra. Un'applicazione libera un menu chiamando la DestroyMenu
funzione membro.
Esempio
// 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
Carica una risorsa da un modello di menu in memoria e la collega all'oggetto CMenu
.
BOOL LoadMenuIndirect(const void* lpMenuTemplate);
Parametri
lpMenuTemplate
Punta a un modello di menu , ovvero una singola MENUITEMTEMPLATEHEADER
struttura e una raccolta di una o più MENUITEMTEMPLATE
strutture. Per altre informazioni su queste due strutture, vedere Windows SDK.
Valore restituito
Diverso da zero se la risorsa di menu è stata caricata correttamente; in caso contrario, 0.
Osservazioni:
Un modello di menu è un'intestazione seguita da una raccolta di una o più MENUITEMTEMPLATE
strutture, ognuna delle quali può contenere una o più voci di menu e menu a comparsa.
Il numero di versione deve essere 0.
I mtOption
flag devono includere MF_END
per l'ultimo elemento in un elenco popup e per l'ultimo elemento nell'elenco principale. Vedere la AppendMenu
funzione membro per altri flag. Il mtId
membro deve essere omesso dalla MENUITEMTEMPLATE
struttura quando MF_POPUP
viene specificato in mtOption
.
Lo spazio allocato per la MENUITEMTEMPLATE
struttura deve essere sufficiente per mtString
contenere il nome della voce di menu come stringa con terminazione Null.
Prima di uscire, un'applicazione deve liberare le risorse di sistema associate a un menu se il menu non è assegnato a una finestra. Un'applicazione libera un menu chiamando la DestroyMenu
funzione membro.
Esempio
// 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
Specifica l'handle HMENU
del menu di Windows associato all'oggetto CMenu
.
HMENU m_hMenu;
Esempio
Vedere l'esempio per CMenu::LoadMenu
.
CMenu::MeasureItem
Chiamato dal framework quando viene creato un menu con lo stile di disegno proprietario.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Parametri
lpMeasureItemStruct
Puntatore a una MEASUREITEMSTRUCT
struttura.
Osservazioni:
Per impostazione predefinita, questa funzione membro non esegue alcuna operazione. Eseguire l'override di questa funzione membro e compilare la MEASUREITEMSTRUCT
struttura per informare Windows delle dimensioni del menu.
Vedere CWnd::OnMeasureItem
per una descrizione della MEASUREITEMSTRUCT
struttura.
Esempio
Il codice seguente proviene dall'esempio 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
Modifica una voce di menu esistente nella posizione specificata da 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);
Parametri
nPosition
Specifica la voce di menu da modificare. Il nFlags
parametro può essere usato per interpretare nPosition
nei modi seguenti:
nFlags |
Interpretazione di nPosition |
---|---|
MF_BYCOMMAND |
Specifica che il parametro fornisce l'ID comando della voce di menu esistente. Questa è l'impostazione predefinita se né MF_BYCOMMAND MF_BYPOSITION né è impostata. |
MF_BYPOSITION |
Specifica che il parametro fornisce la posizione della voce di menu esistente. Il primo elemento si trova nella posizione 0. |
nFlags
Specifica come nPosition
viene interpretato e fornisce informazioni sulle modifiche da apportare alla voce di menu. Per un elenco di flag che possono essere impostati, vedere la AppendMenu
funzione membro.
nIDNewItem
Specifica l'ID comando della voce di menu modificata oppure, se nFlags
è impostato su MF_POPUP
, l'handle di menu (HMENU
) di un menu a comparsa. Il nIDNewItem
parametro viene ignorato (non necessario) se nFlags
è impostato su MF_SEPARATOR
.
lpszNewItem
Specifica il contenuto della nuova voce di menu. Il nFlags
parametro può essere usato per interpretare lpszNewItem
nei modi seguenti:
nFlags |
Interpretazione di lpszNewItem |
---|---|
MF_OWNERDRAW |
Contiene un valore a 32 bit fornito dall'applicazione che l'applicazione può usare per mantenere dati aggiuntivi associati alla voce di menu. Questo valore a 32 bit è disponibile per l'applicazione quando elabora MF_MEASUREITEM e MF_DRAWITEM . |
MF_STRING |
Contiene un puntatore lungo a una stringa con terminazione Null o a un oggetto CString . |
MF_SEPARATOR |
Il lpszNewItem parametro viene ignorato (non necessario). |
pBmp
Punta a un CBitmap
oggetto che verrà utilizzato come voce di menu.
Valore restituito
Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.
Osservazioni:
L'applicazione specifica il nuovo stato della voce di menu impostando i valori in nFlags
. Se questa funzione sostituisce un menu a comparsa associato alla voce di menu, elimina definitivamente il menu a comparsa precedente e libera la memoria usata dal menu a comparsa.
Quando nIDNewItem
specifica un menu a comparsa, diventa parte del menu in cui viene inserito. Se il menu viene eliminato definitivamente, verrà eliminato anche il menu inserito. Per evitare conflitti, è necessario scollegare un menu inserito da un CMenu
oggetto .
Ogni volta che un menu che risiede in una finestra viene modificato (indipendentemente dal fatto che venga visualizzata o meno la finestra), l'applicazione deve chiamare CWnd::DrawMenuBar
. Per modificare gli attributi delle voci di menu esistenti, è molto più veloce usare le CheckMenuItem
funzioni membro e EnableMenuItem
.
Esempio
Vedere l'esempio per CMenu::InsertMenu
.
CMenu::operator HMENU
Utilizzare questo operatore per recuperare l'handle dell'oggetto CMenu
.
operator HMENU() const;
Valore restituito
Se ha esito positivo, l'handle dell'oggetto CMenu
; in caso contrario, NULL
.
Osservazioni:
È possibile usare l'handle per chiamare direttamente le API di Windows.
CMenu::operator !=
Determina se due menu sono logicamente non uguali.
BOOL operator!=(const CMenu& menu) const;
Parametri
menu
Oggetto CMenu
per il confronto.
Osservazioni:
Verifica se un oggetto menu a sinistra non è uguale a un oggetto menu a destra.
CMenu::operator ==
Determina se due menu sono logicamente uguali.
BOOL operator==(const CMenu& menu) const;
Parametri
menu
Oggetto CMenu
per il confronto.
Osservazioni:
Verifica se un oggetto menu a sinistra è uguale (in termini di HMENU
valore) a un oggetto menu a destra.
CMenu::RemoveMenu
Elimina una voce di menu con un menu a comparsa associato dal menu.
BOOL RemoveMenu(
UINT nPosition,
UINT nFlags);
Parametri
nPosition
Specifica la voce di menu da rimuovere. Il nFlags
parametro può essere usato per interpretare nPosition
nei modi seguenti:
nFlags |
Interpretazione di nPosition |
---|---|
MF_BYCOMMAND |
Specifica che il parametro fornisce l'ID comando della voce di menu esistente. Questa è l'impostazione predefinita se né MF_BYCOMMAND MF_BYPOSITION né è impostata. |
MF_BYPOSITION |
Specifica che il parametro fornisce la posizione della voce di menu esistente. Il primo elemento si trova nella posizione 0. |
nFlags
Specifica la modalità nPosition
di interpretazione.
Valore restituito
Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.
Osservazioni:
Non elimina definitivamente l'handle per un menu a comparsa, quindi il menu può essere riutilizzato. Prima di chiamare questa funzione, l'applicazione può chiamare la GetSubMenu
funzione membro per recuperare l'oggetto popup CMenu
per il riutilizzo.
Ogni volta che un menu che risiede in una finestra viene modificato (indipendentemente dal fatto che venga visualizzata o meno la finestra), l'applicazione deve chiamare CWnd::DrawMenuBar
.
Esempio
Vedere l'esempio per CMenu::InsertMenu
.
CMenu::SetDefaultItem
Imposta la voce di menu predefinita per il menu specificato.
BOOL SetDefaultItem(
UINT uItem,
BOOL fByPos = FALSE);
Parametri
uItem
Identificatore o posizione della nuova voce di menu predefinita o - 1 per nessuna voce predefinita. Il significato di questo parametro dipende dal valore di fByPos
.
fByPos
Valore che specifica il significato di uItem
. Se questo parametro è FALSE
, uItem
è un identificatore di voce di menu. In caso contrario, si tratta di una posizione della voce di menu.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è diverso da zero. Se la funzione ha esito negativo, il valore restituito è zero. Per ottenere informazioni estese sull'errore, usare la funzione GetLastError
Win32 , come descritto in Windows SDK.
Osservazioni:
Questa funzione membro implementa il comportamento della funzione SetMenuDefaultItem
Win32 , come descritto in Windows SDK.
Esempio
Vedere l'esempio per CMenu::InsertMenu
.
CMenu::SetMenuContextHelpId
Associa un ID della Guida di contesto a CMenu
.
BOOL SetMenuContextHelpId(DWORD dwContextHelpId);
Parametri
dwContextHelpId
ID guida del contesto da associare a CMenu
.
Valore restituito
Diverso da zero se ha esito positivo; in caso contrario 0
Osservazioni:
Tutte le voci del menu condividono questo identificatore: non è possibile allegare un identificatore di contesto della Guida alle singole voci di menu.
Esempio
Vedere l'esempio per CMenu::InsertMenu
.
CMenu::SetMenuInfo
Imposta le informazioni per un menu.
BOOL SetMenuInfo(LPCMENUINFO lpcmi);
Parametri
lpcmi
Puntatore a una MENUINFO
struttura contenente informazioni per il menu.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è diverso da zero; in caso contrario, il valore restituito è zero.
Osservazioni:
Chiamare questa funzione per impostare informazioni specifiche sul menu.
CMenu::SetMenuItemBitmaps
Associa le bitmap specificate a una voce di menu.
BOOL SetMenuItemBitmaps(
UINT nPosition,
UINT nFlags,
const CBitmap* pBmpUnchecked,
const CBitmap* pBmpChecked);
Parametri
nPosition
Specifica la voce di menu da modificare. Il nFlags
parametro può essere usato per interpretare nPosition
nei modi seguenti:
nFlags |
Interpretazione di nPosition |
---|---|
MF_BYCOMMAND |
Specifica che il parametro fornisce l'ID comando della voce di menu esistente. Questa è l'impostazione predefinita se né MF_BYCOMMAND MF_BYPOSITION né è impostata. |
MF_BYPOSITION |
Specifica che il parametro fornisce la posizione della voce di menu esistente. Il primo elemento si trova nella posizione 0. |
nFlags
Specifica la modalità nPosition
di interpretazione.
pBmpUnchecked
Specifica la bitmap da utilizzare per le voci di menu non controllate.
pBmpChecked
Specifica la bitmap da utilizzare per le voci di menu controllate.
Valore restituito
Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.
Osservazioni:
Se la voce di menu è selezionata o deselezionata, Windows visualizza la bitmap appropriata accanto alla voce di menu.
pBmpUnchecked
Se o pBmpChecked
è NULL
, Windows non visualizza nulla accanto alla voce di menu per l'attributo corrispondente. Se entrambi i parametri sono NULL
, Windows usa il segno di spunta predefinito quando l'elemento viene selezionato e rimuove il segno di spunta quando l'elemento è deselezionato.
Quando il menu viene eliminato definitivamente, queste bitmap non vengono distrutte; l'applicazione deve distruggerli.
La funzione Windows GetMenuCheckMarkDimensions
recupera le dimensioni del segno di spunta predefinito utilizzato per le voci di menu. L'applicazione usa questi valori per determinare le dimensioni appropriate per le bitmap fornite con questa funzione. Ottenere le dimensioni, creare le bitmap e quindi impostarle.
Esempio
// 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
Modifica le informazioni su una voce di menu.
BOOL SetMenuItemInfo(
UINT uItem,
LPMENUITEMINFO lpMenuItemInfo,
BOOL fByPos = FALSE);
Parametri
uItem
Vedere la descrizione di uItem
in SetMenuItemInfo
In Windows SDK.
lpMenuItemInfo
Vedere la descrizione di lpmii
in SetMenuItemInfo
In Windows SDK.
fByPos
Vedere la descrizione di fByPosition
in SetMenuItemInfo
In Windows SDK.
Osservazioni:
Questa funzione esegue il wrapping di SetMenuItemInfo
, descritto in Windows SDK.
CMenu::TrackPopupMenu
Visualizza un menu a comparsa mobile nella posizione specificata e tiene traccia della selezione di elementi nel menu a comparsa.
BOOL TrackPopupMenu(
UINT nFlags,
int x,
int y,
CWnd* pWnd,
LPCRECT lpRect = 0);
Parametri
nFlags
Specifica i flag di posizione dello schermo e posizione del mouse. Vedere TrackPopupMenu
per un elenco dei flag disponibili.
x
Specifica la posizione orizzontale nelle coordinate dello schermo del menu a comparsa. A seconda del valore del nFlags
parametro, il menu può essere allineato a sinistra, allineato a destra o centrato rispetto a questa posizione.
y
Specifica la posizione verticale nelle coordinate dello schermo della parte superiore del menu sullo schermo.
pWnd
Identifica la finestra proprietaria del menu a comparsa. Questo parametro non può essere NULL
, anche se il TPM_NONOTIFY
flag è specificato. Questa finestra riceve tutti i WM_COMMAND
messaggi dal menu. Nelle versioni di Windows 3.1 e successive la finestra non riceve WM_COMMAND
messaggi fino a TrackPopupMenu
quando non viene restituito. In Windows 3.0 la finestra riceve i messaggi prima TrackPopupMenu
che vengano restituitiWM_COMMAND
.
lpRect
Ignorato.
Valore restituito
Questo metodo restituisce il risultato della chiamata TrackPopupMenu
in Windows SDK.
Osservazioni:
Un menu a comparsa mobile può essere visualizzato ovunque sullo schermo.
Esempio
// 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
Visualizza un menu a comparsa mobile nella posizione specificata e tiene traccia della selezione di elementi nel menu a comparsa.
BOOL TrackPopupMenuEx(
UINT fuFlags,
int x,
int y,
CWnd* pWnd,
LPTPMPARAMS lptpm);
Parametri
fuFlags
Specifica varie funzioni per il menu esteso. Per un elenco di tutti i valori e il relativo significato, vedere TrackPopupMenuEx
.
x
Specifica la posizione orizzontale nelle coordinate dello schermo del menu a comparsa.
y
Specifica la posizione verticale nelle coordinate dello schermo della parte superiore del menu sullo schermo.
pWnd
Puntatore alla finestra proprietaria del menu a comparsa e ricezione dei messaggi dal menu creato. Questa finestra può essere qualsiasi finestra dell'applicazione corrente, ma non può essere NULL
. Se si specifica TPM_NONOTIFY
nel fuFlags
parametro , la funzione non invia messaggi a pWnd
. La funzione deve restituire per la finestra a cui pWnd
punta per ricevere il WM_COMMAND
messaggio.
lptpm
Puntatore a una TPMPARAMS
struttura che specifica un'area dello schermo che il menu non deve sovrapporsi. Questo parametro può essere NULL
.
Valore restituito
Se si specifica TPM_RETURNCMD
nel fuFlags
parametro , il valore restituito è l'identificatore della voce di menu dell'elemento selezionato dall'utente. Se l'utente annulla il menu senza effettuare una selezione o se si verifica un errore, il valore restituito è 0.
Se non si specifica TPM_RETURNCMD
nel fuFlags
parametro , il valore restituito è diverso da zero se la funzione ha esito positivo e 0 in caso di errore. Per ottenere informazioni estese sull'errore, chiamare GetLastError
.
Osservazioni:
Un menu a comparsa mobile può essere visualizzato ovunque sullo schermo. Per altre informazioni sulla gestione degli errori durante la creazione del menu a comparsa, vedere TrackPopupMenuEx
.
Vedi anche
Esempio MFC CTRLTEST
Esempio MFC DYNAMENU
CObject
Classe
Grafico della gerarchia