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 :
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.
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 :
m_DrawingWindow.m_pDrawing = &drawing;
IDC_DRAWINGWINDOW est un contr�le (ressource) pour mon "Picture" de la fen�tre graphique.
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 :
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�
Partager