Problème de GROS débutant : DeviceContext et dessin...

tempirate Messages postés 5 Date d'inscription dimanche 15 juin 2003 Statut Membre Dernière intervention 10 octobre 2003 - 6 oct. 2003 à 21:02
tempirate Messages postés 5 Date d'inscription dimanche 15 juin 2003 Statut Membre Dernière intervention 10 octobre 2003 - 10 oct. 2003 à 19:12
Je débute en visual c++ (amateurisme total) et j'ai commencé par faire un tout ptit logiciel de dessin..mais je n'arrive pas à trouver une fonction qui effacerait la fenêtre... DeleteDC je pense, mais si c'est ca je n'arrive pas à l'utiliser car ca n'a aucun effet.

Voilà le code :

----------------------------------------------------
BOOL CChap3Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

//DEBUT DE MON CODE
//Initialise la variable avec le curseur de type flèche
m_bCursor = FALSE;

//Initialise la variable définissant la taille du curseur
m_iPvalue = 2;

//Initialise la variable définissant lintervalle de temps
m_iInterval = 2;

//Initialisation variables couleurs
m_iBlue =0;
m_iGreen =0;
m_iRed =0;

//Lance le timer avec un intervalle de 2 seconde
// SetTimer(ID_SIZE_TIMER,m_iInterval,NULL);

//FIN DE MON CODE

return TRUE; // return TRUE unless you set the focus to a control
}

void CChap3Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
//DEBUT DE MON CODE
//Bouton gauche > Bleu
if ((nFlags & MK_LBUTTON) == MK_LBUTTON)
{
//Récupère le Device Context
CClientDC dc(this);

CPen lpen(PS_SOLID,m_iPvalue,RGB (m_iRed,m_iGreen,
m_iBlue
));

//Utilise le nouveau crayon
dc.SelectObject(&lpen);

//Dessine une ligne entre le point précédent et le point actuel
dc.MoveTo(m_iPrevX,m_iPrevY);
dc.LineTo(point.x,point.y);

//Enregistre le point actuel comme point précédent
m_iPrevX = point.x;
m_iPrevY = point.y;
}

//FIN DE MON CODE
CDialog::OnMouseMove(nFlags, point);
}

void CChap3Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{

//DEBUT DE MON CODE

//Définit le point actuel comme point de départ
m_iPrevX = point.x;
m_iPrevY = point.y;

//FIN DE MON CODE

CDialog::OnLButtonDown(nFlags, point);
}

void CChap3Dlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
//DEBUT DE MON CODE

char lsChar; //La touche de caractère qui est appuyée
HCURSOR lhCursor; //Handle sur le curseur à afficher

//Convertit la valeur de la touche appuiée en un caractère
lsChar = char(nChar);

//Caractère "A"
if(lsChar == 'A')
{

//Arrete le timer
KillTimer(ID_SIZE_TIMER);

//affiche la fenetre de messages et récupere le résultat
if(m_dCtmDlg.DoModal() == IDOK)
{
m_iBlue=m_dCtmDlg.m_iBlueValue;
m_iGreen=m_dCtmDlg.m_iGreenValue;
m_iRed=m_dCtmDlg.m_iRedValue;
//OK cliqué, on récupère donc les valeurs
switch (m_dCtmDlg.m_iOption) {
case 0:
m_iPvalue = 1;
SetTimer(ID_SIZE_TIMER,m_iInterval,NULL);

break;
case 1:
m_iPvalue = 2;
break;
case 2:
m_iPvalue = 3;
break;
case 3:
m_iPvalue = 4;
break;
case 4:
m_iPvalue = 5;
break;
case 5:
m_iPvalue = 10;
break;
case 6:
m_iPvalue = 15;
break;
case 7:
m_iPvalue = 20;
break;
default:
m_iPvalue = 2;
break;
}
}

}

//Caractère "X"
if(lsChar == 'X')
{
//Charge le curseur de type flèche
lhCursor = AfxGetApp() -> LoadStandardCursor(IDC_ARROW);
//Affiche le curseur à l'écran
SetCursor(lhCursor);
//Quitte l'application
OnOK();
}

//Caractere C
if(lsChar == 'C')
{
CClientDC dc(this);
ReleaseDC(this,dc);

}

//FIN DE MON CODE
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}

BOOL CChap3Dlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
//DEBUT DE MON CODE

//Si le curseur a été définit, alors retourne TRUE
if (m_bCursor)
return TRUE;
else

//FIN DE MON CODE

return CDialog::OnSetCursor(pWnd, nHitTest, message);
}

void CChap3Dlg::OnTimer(UINT nIDEvent)
{

//Modifie la taille du point
switch (m_iPvalue) {

case 1:
m_iPvalue++;
m_bDirection=TRUE;

break;

case 20:
m_iPvalue--;
m_bDirection=FALSE;

break;

default:
if(m_bDirection==TRUE) {m_iPvalue++;}
else {m_iPvalue--;}

}
CDialog::OnTimer(nIDEvent);
}

-------------------------------------------------------
La fenetre enfant n'a pas de code, juste des variables membres pour les controles

Comme vous pouvez voir c'est plus que basique... et histoire de tirer sur la corde, si vous pouviez me dire mes erreurs stupides, ou les barbarismes que j'ai pu faire...

merci ! (et bravo pour ce gros site qui m'a bien aidé)

6 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 oct. 2003 à 21:38
DeleteDC n'est a employer que pour liberer un DC alloue par CreateDC ou CreateCompatibleDC.
InvalidateRect peut te servir pour ton background.
BruNews, ciao...
0
tempirate Messages postés 5 Date d'inscription dimanche 15 juin 2003 Statut Membre Dernière intervention 10 octobre 2003
7 oct. 2003 à 07:45
Merci
Je vais recommencer en utilisant CreateDc, à la place déclarer un objet je pense...
0
tempirate Messages postés 5 Date d'inscription dimanche 15 juin 2003 Statut Membre Dernière intervention 10 octobre 2003
7 oct. 2003 à 18:30
sinon petite question en passant : comment je supprime l'objet dc que j'ai crée ? et cela-va-til réinitialiser ma fenetre de dessin ? ca serait plus simple que de tout refaire.

cette question doit paraitre ridicule !
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 oct. 2003 à 18:42
DeleteDC ou ReleaseDC suivant la fonction employee pour obtenir le DC. Le liberer n'a rien a voir avec l'erase background.
Tu devrais prendre ce bouquin sur:
http://perso.wanadoo.fr/persans-brunews/
CP5.zip et CP5Sources.zip
Tu y trouveras tout ce dont tu as besoin.
BruNews, ciao...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tempirate Messages postés 5 Date d'inscription dimanche 15 juin 2003 Statut Membre Dernière intervention 10 octobre 2003
7 oct. 2003 à 18:48
Merci je vais télécharger ca tout de suite :)

Fallait bien que j'apprenne les bases, un jour ou l'autre !!
0
tempirate Messages postés 5 Date d'inscription dimanche 15 juin 2003 Statut Membre Dernière intervention 10 octobre 2003
10 oct. 2003 à 19:12
en fait comme j'ai fait ça sous MFC, je ne vois comment faire autrement qu'avec

CClientDC dc(this);

CreateDC(dc); me renvoie une erreur...

je suis trop nul!
0
Rejoignez-nous