IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC] fonction GetItemRect


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 32
    Par défaut [MFC] fonction GetItemRect
    Bonjour, je code un mini chat et j'aurai voulu permettre au serveur de kicker les clients indésirables. Pour faire ca, je me suis dit que vu que j'affichais la liste des clients dans une listbox, il me suffisait de faire un popup menu avec l'option kicker comme ca quand le serveur fait un clic droit sur le nom de l'utilisateur il peut le kicker sans difficultés .

    Le problème c'est que je récupère les coordonnées de ma liste box avec GetWindowRect pour savoir si le clic a été effectué dans la liste box (ca ca marche y'a pas de pb) mais apres, pour savoir sur quel nom d'utilisateur l'utilisateur a cliqué, je pensait que la fonction GetItemRect allait pouvoir me convenir mais ca n'a as l'air d'être le cas. En effet, que je clique à coté d'un nom d'utilisateur ou pas, mon prog considère toujours que j'ai cliqué à coté d'un nom d'utilisateur.

    Voici le bout de source que j'ai fait pour gérer ca.

    Merci de me dire si vous voyez une erreur (ou si y'a une fonction qui pourrait me rendre service).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void CReseauDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
    {
    	// TODO: Add your message handler code here
    	CRect Rect;
    	m_ctrlUserList.GetWindowRect(&Rect);
    	if(Rect.PtInRect(point)) // Ce test marche très bien
    	{
    		for(int i=0;i<m_ctrlUserList.GetCount();i++)
    		{
    			m_ctrlUserList.GetItemRect(i, &Rect);
    			if(Rect.PtInRect(point)) // Ce test ne marche pas (renvoit toujours faux)
    			{
    				CMenu menu_bar; 
    				menu_bar.LoadMenu(IDR_MENU1); 	
    				CMenu* pPopup = menu_bar.GetSubMenu(0); 
    				pPopup->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, 
    					point.y, this);
    			}
    		}
    	}
    }

  2. #2
    Membre éprouvé Avatar de ken_le_videur
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 129
    Par défaut
    Si je ne m'abuse, GetItemRect renvoie une coordonnée relative a la liste box, non ? Il faudrait penser à effectuer un changement de coordonnées sur point pour le passer en repere "list box". Il existe aussi la foction ItemFromPoint

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 32
    Par défaut
    Merci pour la réponse. Je teste ca ce soir et je te dis si j'arrive à faire quelquechose.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 32
    Par défaut
    Merci pour ton aide ken, en effet, ls coordonnées renvoyées par GetItemRect sont relatives à la listbox. Je poste mon code pour afficher un popup menu quand o nfait un clic droit sur un élément de list box (avec sélection de l'élément) au cas ou ca interesse du monde .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    	CRect Rect, Rect2;
    	m_ctrlUserList.GetWindowRect(&Rect);
    	if(Rect.PtInRect(point))
    	{
    		for(int i=0;i<m_ctrlUserList.GetCount();i++)
    		{
    			m_ctrlUserList.GetItemRect(i, &Rect2);
    			Rect2.top+=Rect.top;
    			Rect2.left=Rect.left;
    			Rect2.bottom+=Rect.top;
    			Rect2.right=Rect.right;
    			if(Rect2.PtInRect(point))
    			{
    				m_ctrlUserList.SetCurSel(i);
    				CMenu menu_bar; 
    				menu_bar.LoadMenu(IDR_KICK); 	
    				CMenu* pPopup = menu_bar.GetSubMenu(0); 
    				pPopup->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, 
    					point.y, this);
    			}
    		}
    	}
    A plus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] Fonction des differentes classe
    Par jiraya43 dans le forum MFC
    Réponses: 3
    Dernier message: 03/06/2006, 09h44
  2. [MFC] fonction Create d'une ProgressBar
    Par lastcheper dans le forum MFC
    Réponses: 10
    Dernier message: 20/05/2005, 15h20
  3. [MFC] fonction ReadFile qui bloque
    Par r0d dans le forum MFC
    Réponses: 9
    Dernier message: 15/04/2005, 13h21
  4. [mfc] fonction stretchBlt
    Par marseillais57 dans le forum MFC
    Réponses: 3
    Dernier message: 26/04/2004, 14h35
  5. [MFC] Fonctions ?
    Par leZar dans le forum MFC
    Réponses: 6
    Dernier message: 26/02/2004, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo