[VC++] Généricité

Généricité [VC++] - C++ - Programmation

Marsh Posté le 10-03-2005 à 10:39:32    

Un carré se dessine par la séquence  
  MoveTo(left, top);
  LineTo(right, top);
  LineTo(right, bottom);
  LineTo(left, bottom);
  LineTo(left, top);
 
Ce code est générique et peut s’appliquer dans n’importe quel environnement de dessin.
 
J’aimerais définir cette suite d’instructions applicable à toutes les classes disposant des fonctions MoveTo() et LineTo(), sans avoir à redéfinir, dans chaque classe, une fonction carré qui aurait ce même code.
 
Comment faire ?
 
J’ai tenté cette ébauche de code qui ne marche pas.
 
void CTotoView::OnDraw(CDC* pDC)
{
   if(IsPostScript)
      pDC = new CDC_PS;
   pDC->MoveTo(10,10);
   pDC->LineTo(100,10);
   pDC->LineTo(100,100);
   pDC->LineTo(10,100);
   pDC->LineTo(10,10);
}
 
Le pointeur pDC pointe sur un objet de la classe CDC et ne permet d’appeler que la version CDC de MoveTo() et LineTo(), pas celle de CDC_PS.
 
Si CDC_PS était une classe pouvant générer des instructions PostScript, à l’aide de ses fonctions membres MoveTo() et LineTo(), comment pourrais-je m’adresser à CDC_PS pour faire mon carré plutôt qu’à CDC ?
Est-il possible que le pointeur pDC puisse être utilisé de façon dynamique pour pointer des objets de la class CDC ou de la classe CDC_PS ?
 
Merci pour vos lumières.
 

Reply

Marsh Posté le 10-03-2005 à 10:39:32   

Reply

Marsh Posté le 10-03-2005 à 10:40:54    

mixin' layers :o


---------------
Moi, j'aime pas les signatures - J'écoute actuellement :
Reply

Marsh Posté le 10-03-2005 à 11:34:54    

En faisant dériver CDC_PS de CDC et en la filant en paramètre de OnDraw (polymorphisme).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 10-03-2005 à 23:32:02    

Je n'ai pas compris !!!
Que veux-tu passer en paramètre à OnDraw ?
 
OK pour faire dériver CDC_PS de CDC pour faire du polymorphisme de méthode mais alors comment déclarer virtuelle une fonction déja définie dans CDC (exemple MoveTo) ?

Reply

Marsh Posté le 11-03-2005 à 10:59:06    

J'avais pas compris que tu voulais greffer ton truc par dessus les MFC.
Pour faire un carré on fait pDC->Rectangle( 10, 10, 100, 100 );
Y'a un problème dans ton design, c'est pas dans OnDraw qu'il faut mettre ton code car tu recois le CDC dans lequel dessiner. Faut mettre à ailleurs (MyDraw() par exemple) que tu appelles depuis OnDraw pour dessiner dans la fenêtre et depuis je sais pas où pour dessiner dans ton PS.
L'idéal serait d'avoir un DC post script, dans ce cas tout serait fait tout seul (comme avec wxWidgets qui définit wxPostScriptDC qui dérive de wxDC, donc rien de particulier à faire).
Comment tu fais pour dessiner dans ton postscript ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed