2009-12-22 12 views
0

J'écris un MFC qui a un contrôle listview. Lorsque l'utilisateur clique avec le bouton droit de la souris sur un élément, je génère un élément de menu dynamique avec ce texte sélectionné dans listview. Tout s'affiche correctement, mais je ne sais pas comment ajouter une carte de message à cet élément de menu dynamique.Comment ajouter une carte de message à un élément de menu dynamique dans MFC

Une aide?

void CMyListDlg::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult) 
    { 
     // TODO: Add your control notification handler code here 


     int nIndex = m_List.GetSelectionMark(); 
     CString pString = m_List.GetItemText(nIndex,1); 
     CMenu menu, * pSubMenu; 
     int pos=0; 
     menu.LoadMenu(IDR_MENU1); 
     pSubMenu = menu.GetSubMenu (0); 
     pSubMenu->DeleteMenu(0,MF_BYPOSITION); 
     pSubMenu->InsertMenu(pos,MF_BYPOSITION,NULL,pString); 
      CPoint oPoint; 
     GetCursorPos (& oPoint); 
     pSubMenu-> TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this); 






     *pResult = 0; 
    } 

Répondre

0

Il suffit d'ajouter ON_COMMAND (et ON_UPDATE_COMMAND_UI si nécessaire) des gestionnaires pour les ID des éléments de menu de votre classe.

+0

mais ce sont des éléments de menu dynamiques, pour lesquels je ne connais pas l'ID – JPro

+0

connaissez-vous la gamme des numéros d'identification possibles? Dans ce cas, vous pouvez ajouter ON_COMMAND_RANGE – djeidot

+0

Je ne génère qu'un seul élément de menu. J'ai essayé d'utiliser le ON_COMMAND_RANGE, mais je pourrais comprendre comment utiliser ce menu dynamique inconnu (juste 1) – JPro

3

Au moment où vous insérez l'élément de menu avec ID = 0 (NULL). De cette façon, vous ne pouvez pas savoir quelle commande a été pressée. Vous devez attribuer un ID à l'élément, le plus simple est de

#define WM_MYMESSAGE WM_USER + 1 

vous insérez comme ceci:

pSubMenu->InsertMenu(pos,MF_BYPOSITION,WM_MYMESSAGE,pString); 

Si vous remplacez OnCommand pour votre fenêtre, vous obtenez votre ID comme wParam . Pour comprendre ce qui s'est réellement passé, stockez des informations supplémentaires dans un autre membre de la classe, comme m_nLastItemClicked ou ... vous avez l'idée ?!

+0

Je ne comprends pas exactement comment surcharger onCommand, ma carte de message a ceci ON_COMMAND (IDM_FILE_OPEN, OnFileOpen) – JPro

+0

Vous ajoutez simplement le gestionnaire ON_COMMAND (WM_MYMESSAGE, OnMyMessage), en supposant que vous avez utilisé WM_MYMESSAGE sur InsertMenu – djeidot

2

Cochez la case MFCIE sample, elle génère un menu favori à partir du dossier favori de l'utilisateur et accède à l'URL favorite lorsqu'un élément de menu favori est cliqué.