Comment connaitre la largeur d'un groupbox

loupiti Messages postés 27 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 20 janvier 2005 - 11 janv. 2005 à 11:05
loupiti Messages postés 27 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 20 janvier 2005 - 14 janv. 2005 à 15:07
Bonjour, je developpe sous visual c++6 et j'aimerais savoir comment connaitre la largeur dun group box
afin de pouvoir y dessiner dedans

Merci

13 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
11 janv. 2005 à 14:26
HNWD hGrp = getDlgItem(hDlg, IDC_GROUPBOX);
RECT rc;
GetClientRect(hGrp, &rc);

IDC_GROUPBOX : Id du groupbox dans le dialog
hDlg : handle du dialogue

=> rc contient la taille du groupbox
0
loupiti Messages postés 27 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 20 janvier 2005
12 janv. 2005 à 07:47
Bonjour,
Merci pour votre reponse, je n'arrive cependant pas a recuperer le handle de ma fenetre

je fais un GetHwnd ()
>HWND hGrp GetDlgItem(GetHwnd(),IDC_GROUP);

sinon comme ca le compilo accepte mais rien ne s'affiche quand je fais le AfxMessageBox

HWND hGrp = (HWND)GetDlgItem(IDC_GROUP);
RECT rc;
GetClientRect(&rc);
AfxMessageBox(rc.left);
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
12 janv. 2005 à 08:51
Si t'es sous MFC c'est :
CWnd* pGrp = pDlg->GetDlgItem( IDC_GROUPBOX);
Crect rc
pGrp->GetClientRect(&rc);

(si t'es au sein du dialogue, pDg-> peut être omis)
0
loupiti Messages postés 27 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 20 janvier 2005
12 janv. 2005 à 18:26
Voila ce que j'ai tapé

CMainFrame* pDoc = (CMainFrame*) GetDocument();
CPen Pen;
GetClientRect(&rect);
Pen.CreatePen(PS_SOLID, 2, RGB(255,0,0));
CPen* OldPen = pDC->SelectObject(&Pen);
CWnd* pGrp = pDoc->GetDlgItem(IDC_ARRIVEE);
CRect rc;
pGrp->GetClientRect(&rc);
CPoint pthogauche = rc.TopLeft();
CPoint ptbadroit = rc.BottomRight();
pDC->MoveTo(pthogauche.x,pthogauche.y);
pDC->LineTo(ptbadroit.x,ptbadroit.y);

Quand je ne met pas le pDoc->GetDlgItem le prog trace un trait partant du coin haut gauche de ma fenetre et non de mon group
Par contre quand je met le pDoc->GetDlgItem le prog bug

Je vois pas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
12 janv. 2005 à 18:33
GetClientRect va de donner la taille du GroupBox en coord cliente (left et top de CRect à 0)

Pour récupérer sa position par rapport à la fenêtre parente, faire successivement :
pGrp->GetWindowRect(&rc);
ScreenToClient(&rc);

CMainFrame* pDoc = (CMainFrame*) GetDocument();
-> ca c'est un cast violent, GetDocument renvoi un CDocument* (ou dérivé) qui n'a rien a voir avec CMainFrame.
CMainFrame* pFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;
sera mieux.
0
loupiti Messages postés 27 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 20 janvier 2005
12 janv. 2005 à 19:20
Merci beaucoup ca marche

en fait le ScreenToClient localise la position du group dans la fenetre?

@+

;-)
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 janv. 2005 à 08:58
GetWindowRect donne les coordonnées à l'écran et ScreenToClient les transpose par rapport à la zone client d'une fenêtre quelconque (en l'occurence le parent du groupbox)
0
loupiti Messages postés 27 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 20 janvier 2005
14 janv. 2005 à 13:47
Bonjour,

j'ai de nouveau un petit probleme.

Je faisais le tracé dans la classe gérant ma vue, mais en fait je dois créer une autre classe qui doit faire le tracé.

J'ai donc fait une classe Dessin appelé dans le OnDraw de ma vue.

void CMaView::OnDraw(CDC* pDC)

{

Dessin fd;

fd.Tracer(pDC);

}

et dans la classe Dessin

void Dessin::Tracer(CDC* pDC)
{

CMainFrame* pFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;

CPen Pen;

Pen.CreatePen(PS_SOLID, 2, RGB(255,0,0));

CPen* OldPen = pDC->SelectObject(&Pen);

CWnd* pGrp = pFrame->GetDlgItem(IDC_GR);

CRect rc;

pFrame->GetWindowRect(&rc);

pFrame->ScreenToClient(&rc);

CPoint pthogauche = rc.TopLeft();

CPoint ptbadroit = rc.BottomRight();

pDC->MoveTo(pthogauche.x,pthogauche.y);

pDC->LineTo(ptbadroit.x,ptbadroit.y);

pDC->SelectObject(OldPen);

Pen.DeleteObject();

pFrame->ReleaseDC(pDC);

}

Le tracé ne se fait pas dans le group box mais fait la diagonale de mon ecran!!!

Pouvez vous me re aider?
Merci
0
loupiti Messages postés 27 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 20 janvier 2005
14 janv. 2005 à 13:48
Pourquoi mes messages s'écrivent comme ca?

c lourd
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
14 janv. 2005 à 14:37
pGrp->GetWindowRect(&rc);
pFrame->ScreenToClient(&rc);

pur avoir le rectangle du Checkbox
0
loupiti Messages postés 27 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 20 janvier 2005
14 janv. 2005 à 14:55
J’avais essayé mais l’appli
Bug quand je met pGrp
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
14 janv. 2005 à 14:58
Ca bug ?, c'est à dire, ça donne pas ce que tu veux où il y a un message d'erreur

La fenêtre principale pFrame est bien le parent du group box ?, il ne serait pas dans un dialogue créé après.
0
loupiti Messages postés 27 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 20 janvier 2005
14 janv. 2005 à 15:07
il y a un message d'erreur

"SdiMulti MFC Application a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."

au debut de mon appli, j'ai une vue qui me demande de faire un choix selon 4 boutons. en cliquant sur un des boutons je balance vers une autre vue et la ...bug
0
Rejoignez-nous