2009-10-02 4 views

Répondre

0

Ajoutez un gestionnaire pour votre fenêtre de dialogue. Cela va générer ceci:

void YourDialogClass::OnContextMenu(CWnd* pWnd, CPoint point) { 
    ... 
} 

pWnd pointera vers la fenêtre/contrôle dans lequel l'utilisateur a cliqué droit de la souris.

+0

mais où puis-je ajouter cela? Je veux dire qu'il n'y a pas de classe pour la zone de liste – akif

+0

Je ne peux pas voir la classe pour la zone de liste dans mon code source. il n'y a que deux classes CDialog, CWinApp – akif

+0

@Manzoor Ahmed, j'ai édité ma réponse. La méthode sera placée dans votre classe de dialogue. –

4

Placez un gestionnaire OnContextMenu dans la classe parente. Puis ajoutez un menu contextuel

Modifier Pour ajouter le gestionnaire OnContextMenu, ajoutez un gestionnaire d'événements à la fenêtre PARENT (c'est-à-dire, pas la classe de liste). Ceci est le plus facilement fait à travers l'éditeur de ressources. Accédez à la page des propriétés, puis accédez à la section des messages. Ajoutez ensuite une fonction pour WM_CONTEXTMENU.

void CYourDialog::OnContextMenu(CWnd* pWnd, CPoint point) 
{ 
    CListCtrl* pList = (CListCtrl*)GetDlgItem(ID_YOUR_LIST); 

    if ((CWnd*)pList == pWnd) 
    { 
     CMenu menu; 
     // Create your menu items. 

     int retVal = menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_TOPALIGN | TPM_NONOTIFY | TPM_RETURNCMD, point.x, point.y, this); 

     // Handle your returns here. 
    } 
} 
0

Si vous avez suivi le tutoriel pour vous tirer propre classe, assurez-vous ON_WM_CONTEXTMENU() est ajouté à la nouvelle carte de message de classe.

Pour ajouter une zone de liste de votre classe dérivée, vous ajoutez simplement une variable pour votre contrôle ListBox et spécifiez la classe de variable en tant que votre classe dérivée.

Cependant, je pense que la réponse de @ Goz est aussi une solution valide, et une solution plus simple.

2

Depuis que ma modification a été rejetée avec la logique de «changer trop», je vais mettre ma proposition ici parce que, à mon avis, le code original favorise les mauvaises pratiques de codage.

void CYourDialog::OnContextMenu(CWnd* pWnd, CPoint point) 
{ 
    int CtrlID = pWnd->GetDlgCtrlID(); 

    if (CtrlID == ID_YOUR_LIST) { 
     CMenu menu; 
     // Create your menu items... 
     int retVal = menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_TOPALIGN | TPM_NONOTIFY | TPM_RETURNCMD, point.x, point.y, this); 
     // Handle selected options here... 
    } 
} 
Questions connexes