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); } } } }
Partager