Bonjour,

Le but de mon post est de connaître la taille d’un texte (longueur hauteur) dans une classe. Pour cela, il faut utiliser la fonction GetTextExtentPoint32 qui me retourne la taille d’un texte dans son contexte.

Problème :

J’ai une classe CTestDlg qui hérite de CDialog ou il y a les membres :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
class CTestDlg : public CDialog
{
public:
   CDrawing drawing;
 
// Dialog Data
	//{{AFX_DATA(CTestDlg)
	enum { IDD = IDD_TEST_DIALOG };
	CDrawingView	m_DrawingWindow;
	//}}AFX_DATA}
CDrawing est une classe qui gère un dessin (Texte, cercle, ligne...) et CDrawingView est une classe gérant la vue du dessin dans un object type "Picture" d’une fenêtre graphique.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
class CDrawingView : public CStatic
{
public:
	CDrawing* m_pDrawing;
protected:
	//{{AFX_MSG(CDrawingView)
	afx_msg void OnPaint();
...
}
Le pointeur m_pDrawing est initialisé à la construction de la classe CtestDlg :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
m_DrawingWindow.m_pDrawing = &drawing;
IDC_DRAWINGWINDOW est un contrôle (ressource) pour mon "Picture" de la fenètre graphique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTestDlg)
	DDX_Control(pDX, IDC_DRAWINGWINDOW, m_DrawingWindow);
	//}}AFX_DATA_MAP
}
La fonction de dessin (IDC_DRAWINGWINDOW) est réalisée par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
void CDrawingView::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	if(m_pDrawing!=NULL)
	{
		m_pDrawing->Paint(dc.m_hDC);
	}
}
m_pDrawing->Paint permet de dessiner les données du dessin (cercles, lignes, textes...). La valeur du handle de dc change à chaque appel de cette fonction.

J’ai besoin d’appeler la fonction de taille de texte dans ma classe CDrawing sans passer un handle de CPaintDC en paramètre.

Alors comment réaliser cette fonction de manière propre pour me donner un handle de CPaintDC :
  • Faire une fonction amie dans CdrawingView qui me retourne un dc ?
  • Mettre une variable membre dans CDrawing pointant dans CDrawingView afin d’accéder au CPAintDC ?
  • Ou autre ?

J’espère avoir été clair sur mon problème.

Merci d’avance.
Hervé