Généricité [VC++] - C++ - Programmation
Marsh Posté le 10-03-2005 à 10:40:54
mixin' layers
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).
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) ?
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 ?
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 sappliquer dans nimporte quel environnement de dessin.
Jaimerais définir cette suite dinstructions 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 ?
Jai 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 dappeler 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, à laide de ses fonctions membres MoveTo() et LineTo(), comment pourrais-je madresser à 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.