Comment connaitre la largeur d'un groupbox

Signaler
Messages postés
27
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
20 janvier 2005
-
Messages postés
27
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
20 janvier 2005
-
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
A voir également:

13 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
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
Messages postés
27
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
20 janvier 2005

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);
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
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)
Messages postés
27
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
20 janvier 2005

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
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
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.
Messages postés
27
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
20 janvier 2005

Merci beaucoup ca marche

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

@+

;-)
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
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)
Messages postés
27
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
20 janvier 2005

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
Messages postés
27
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
20 janvier 2005

Pourquoi mes messages s'écrivent comme ca?

c lourd
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
pGrp->GetWindowRect(&rc);
pFrame->ScreenToClient(&rc);

pur avoir le rectangle du Checkbox
Messages postés
27
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
20 janvier 2005

J’avais essayé mais l’appli
Bug quand je met pGrp
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
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.
Messages postés
27
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
20 janvier 2005

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