graphique [c++] - C++ - Programmation
Marsh Posté le 16-05-2002 à 12:16:07
Un exemple de source qui affiche une image dans une fenêtre :
http://forum.hardware.fr/forum2.ph [...] ic=&trash=
Marsh Posté le 16-05-2002 à 12:23:15
merci mais je voudrai plutot "dessiner" moi meme plutot que d'inserrer une image toute faite ...
Marsh Posté le 16-05-2002 à 12:48:15
Tu veux faire ca en quoi? Tu connais la programmation windows?
Marsh Posté le 16-05-2002 à 12:57:09
Par exemple, pour tracer un trait (en BC3 ou 5, c'est pas du C++)
void TraceTraitHoriz(HDC hdcD, short yPos)
{
// Trace un trait horizontal entre les axes gauche et droit de l'écran
// à la position yPos si visible à l'écran
if ((yPos >= haut) && (yPos <= bas))
{
MoveToEx(hdcD, gauche, yPos, NULL);
LineTo(hdcD, droite + 1, yPos); // Line ne trace pas le dernier pixel
}
}
// fin de module TraceTraitHoriz
haut et bas sont les valeurs (en pixel) des bornes que je me suis fixé dans mon cadre "dessin".
Avant l'appel, je fais
HDC hdcD;
int rop;
short StylTrait;
HPEN hPen, hPenOld;
hdcD = GetDC(hWnd);
switch (iStyl) // trait continu, pointillé, ...
{
case 0:
StylTrait = PS_DOT; // POINTILLE
break;
case 1:
StylTrait = PS_SOLID; // PLEIN
break;
case 2:
StylTrait = PS_NULL; // RIEN
}
hPen = CreatePen(StylTrait, 1, CoulTraitCurs);
hPenOld = (HPEN)SelectObject(hdcD, hPen);
rop = SetROP2(hdcD, R2_NOTXORPEN);
et à la fin
SetROP2(hdcD, rop);
SelectObject(hdcD, hPenOld);
DeleteObject(hPen);
ReleaseDC(hWnd, hdcD);
}
Si x,y début et x,y fin sont différents, on peut tracer dans tous les sens .
Attention si on veut un trait très large : si on change l'épaisseur, les bouts "deviennent" ronds. A la place, faut dessiner un rectangle.
void Trait_Ou_Rect(HDC hdcT, short iEp, short iLeft, short iTop, short iRight, short iBottom, long lCouleur, BOOL Vertic)
{
// Trace un trait si épaisseur unitaire, ou rectangle sinon
if (iEp > 1)
{ // Trace Rectangle car trait d'Ep > 1 bouts arrondis
LOGBRUSH lb;
HBRUSH hbr, hbrOld;
lb.lbStyle = BS_SOLID;
lb.lbColor = lCouleur;
hbr = CreateBrushIndirect(&lb);
hbrOld = (HBRUSH)SelectObject(hdcT, hbr);
Rectangle(hdcT, iLeft, iTop, iRight, iBottom);
SelectObject(hdcT, hbrOld);
DeleteObject(hbr); // détruit hBrush
}
else
{ // trace trait simple
MoveToEx(hdcT, iLeft, iTop, NULL);
if (Vertic == VERTICAL)
LineTo(hdcT, iLeft, iBottom);
else // HORIZONTAL
LineTo(hdcT, iRight, iTop);
}
}
// fin du module Trait_Ou_Rect
Sais pas si ça répond à la question .
Marsh Posté le 16-05-2002 à 12:59:09
ouais ca c'est du win32
Ben pour le reste c'est dur, il faut choisir une librairie (win32, sdl, etc.). Puis apprendre un peu les bases dessus. Là, tu peux faire une recherche sur le forum, j'ai vu pas mal de topic là dessus.
A+
Marsh Posté le 16-05-2002 à 12:59:23
je vais tester merci que faut il mettre comme #include ???
Marsh Posté le 16-05-2002 à 14:25:31
Les includes nécessaires sont indiqués dans le MSDN, fais une recherche sur la fonction que tu souhaites puis va voir en bas de l'explication : t'as un cartouche qui récapitule tout
msdn.microsoft.com
Marsh Posté le 16-05-2002 à 14:32:54
C'est même du Win16 à la base . Quand au point, je teste ensuite sous Win32 et adapte si besoin.
Comme .h, j'ai windows.h et windowsx.h. J'ajoute ce qu'il faut quand besoin, mais pour le graphique, pense pas qu'il y ait de besoins.
Il doit y avoir des classes qui font ça bien(?). Moi je fais tout à la main.. Ca permet ensuite d'apprécier les "outils" plus généraux quand on les trouve.
Marsh Posté le 16-05-2002 à 12:13:02
Je n arrive pas a me débrouiller en graphique. Est ce que quelquel de sympa pourrais me fournir un petit programme LE PLUS SIMPLE possible pour tracer ne fut ce qu une ligne! Et que je puisse compiler directement sous visual...
D avance merci !!!