Bonjour,
Une application de CAO commence par initialiser une variable globale HDC
my_hdc=GetDC( ). Ensuite, toutes les fonctions graphiques utilisent my_hdc
jusqu'à ce que l'application se ferme et fait un ReleaseDC(..)
Voici par exemple 2 routines de l'application:
Je constate qu'il arrive parfois que l'API LineTo( ) retourne une erreur
("Descripteur non valide") alors que le sprintf me donne toujours les mêmes
valeurs pour my_hdc,*x,*y. Est-il possible que ce my_hdc soit tout à coup
plus valide? si oui, pourquoi?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Vincent Burel
"Chevalley J.-C" wrote in message news:4342a000$
Bonjour, Une application de CAO commence par initialiser une variable globale HDC my_hdc=GetDC( ). Ensuite, toutes les fonctions graphiques utilisent
my_hdc
jusqu'à ce que l'application se ferme et fait un ReleaseDC(..)
Normallement on obtient une DC quand on en a besoin , et on la relache dès que les travaux d'affichages sont terminés... Je ne pense pas que HANDLE HDC ait été prévu pour être global... De plus appeler un MessageBox entre un Get / ReleaseDC me semble pas recommandable non plus...
VB
"Chevalley J.-C" <chevalley@antispam.ch> wrote in message
news:4342a000$1_1@news.tiscalinet.ch...
Bonjour,
Une application de CAO commence par initialiser une variable globale HDC
my_hdc=GetDC( ). Ensuite, toutes les fonctions graphiques utilisent
my_hdc
jusqu'à ce que l'application se ferme et fait un ReleaseDC(..)
Normallement on obtient une DC quand on en a besoin , et on la relache dès
que les travaux d'affichages sont terminés... Je ne pense pas que HANDLE HDC
ait été prévu pour être global... De plus appeler un MessageBox entre un Get
/ ReleaseDC me semble pas recommandable non plus...
Bonjour, Une application de CAO commence par initialiser une variable globale HDC my_hdc=GetDC( ). Ensuite, toutes les fonctions graphiques utilisent
my_hdc
jusqu'à ce que l'application se ferme et fait un ReleaseDC(..)
Normallement on obtient une DC quand on en a besoin , et on la relache dès que les travaux d'affichages sont terminés... Je ne pense pas que HANDLE HDC ait été prévu pour être global... De plus appeler un MessageBox entre un Get / ReleaseDC me semble pas recommandable non plus...
VB
Remi THOMAS
"Vincent Burel" écrivit
"Chevalley J.-C" wrote in message news:4342a000$
Bonjour, Une application de CAO commence par initialiser une variable globale HDC my_hdc=GetDC( ). Ensuite, toutes les fonctions graphiques utilisent
my_hdc
jusqu'à ce que l'application se ferme et fait un ReleaseDC(..)
Normallement on obtient une DC quand on en a besoin , et on la relache dès que les travaux d'affichages sont terminés... Je ne pense pas que HANDLE HDC ait été prévu pour être global... De plus appeler un MessageBox entre un Get / ReleaseDC me semble pas recommandable non plus...
VB
Salut,
Je précise que ce HDC est obtenu sur un message WM_PAINT. Tout ton dessin doit être effectué dans ce WM_PAINT sinon tu aura des soucis de rafraichissement.
Rémi
-- Rémi THOMAS MVP Visual C++ .NET http://www.pixel-technology.com/rthomas
"Vincent Burel" écrivit
"Chevalley J.-C" <chevalley@antispam.ch> wrote in message
news:4342a000$1_1@news.tiscalinet.ch...
Bonjour,
Une application de CAO commence par initialiser une variable globale HDC
my_hdc=GetDC( ). Ensuite, toutes les fonctions graphiques utilisent
my_hdc
jusqu'à ce que l'application se ferme et fait un ReleaseDC(..)
Normallement on obtient une DC quand on en a besoin , et on la relache dès
que les travaux d'affichages sont terminés... Je ne pense pas que HANDLE
HDC
ait été prévu pour être global... De plus appeler un MessageBox entre un
Get
/ ReleaseDC me semble pas recommandable non plus...
VB
Salut,
Je précise que ce HDC est obtenu sur un message WM_PAINT.
Tout ton dessin doit être effectué dans ce WM_PAINT sinon tu aura des soucis
de rafraichissement.
Rémi
--
Rémi THOMAS
MVP Visual C++ .NET
http://www.pixel-technology.com/rthomas
Bonjour, Une application de CAO commence par initialiser une variable globale HDC my_hdc=GetDC( ). Ensuite, toutes les fonctions graphiques utilisent
my_hdc
jusqu'à ce que l'application se ferme et fait un ReleaseDC(..)
Normallement on obtient une DC quand on en a besoin , et on la relache dès que les travaux d'affichages sont terminés... Je ne pense pas que HANDLE HDC ait été prévu pour être global... De plus appeler un MessageBox entre un Get / ReleaseDC me semble pas recommandable non plus...
VB
Salut,
Je précise que ce HDC est obtenu sur un message WM_PAINT. Tout ton dessin doit être effectué dans ce WM_PAINT sinon tu aura des soucis de rafraichissement.
Rémi
-- Rémi THOMAS MVP Visual C++ .NET http://www.pixel-technology.com/rthomas
Chevalley J.-C
Merci pour vos réponses.. le problème est résolu. Le LineTo donne une erreur car il est appelé par 2 threads différents au même moment. La valeur du HDC est correcte mais le Lineto plante si de HDC est entrai dêtre utilisé par qqch d'autre. De ce fait, j'en déduis que même si ce n'est pas courrent, on peut se permettre se stocker une variable globale HDC et l'utiliser jusqu'à la fin du programme car en synchronisant mes 2 threads, j'ai plus de prblms...
"Remi THOMAS" a écrit dans le message de news:4342b515$0$21307$
"Vincent Burel" écrivit > "Chevalley J.-C" wrote in message > news:4342a000$ >> Bonjour, >> Une application de CAO commence par initialiser une variable globale
HDC
>> my_hdc=GetDC( ). Ensuite, toutes les fonctions graphiques utilisent > my_hdc >> jusqu'à ce que l'application se ferme et fait un ReleaseDC(..) > > Normallement on obtient une DC quand on en a besoin , et on la relache
dès
> que les travaux d'affichages sont terminés... Je ne pense pas que HANDLE > HDC > ait été prévu pour être global... De plus appeler un MessageBox entre un > Get > / ReleaseDC me semble pas recommandable non plus... > > VB > >
Salut,
Je précise que ce HDC est obtenu sur un message WM_PAINT. Tout ton dessin doit être effectué dans ce WM_PAINT sinon tu aura des
soucis
de rafraichissement.
Rémi
-- Rémi THOMAS MVP Visual C++ .NET http://www.pixel-technology.com/rthomas
Merci pour vos réponses.. le problème est résolu. Le LineTo donne une
erreur car il est appelé par 2 threads différents au même moment. La valeur
du HDC est correcte mais le Lineto plante si de HDC est entrai dêtre utilisé
par qqch d'autre.
De ce fait, j'en déduis que même si ce n'est pas courrent, on peut se
permettre se stocker une variable globale HDC et l'utiliser jusqu'à la fin
du programme car en synchronisant mes 2 threads, j'ai plus de prblms...
"Remi THOMAS" <remi@xtware.com> a écrit dans le message de
news:4342b515$0$21307$626a54ce@news.free.fr...
"Vincent Burel" écrivit
> "Chevalley J.-C" <chevalley@antispam.ch> wrote in message
> news:4342a000$1_1@news.tiscalinet.ch...
>> Bonjour,
>> Une application de CAO commence par initialiser une variable globale
HDC
>> my_hdc=GetDC( ). Ensuite, toutes les fonctions graphiques utilisent
> my_hdc
>> jusqu'à ce que l'application se ferme et fait un ReleaseDC(..)
>
> Normallement on obtient une DC quand on en a besoin , et on la relache
dès
> que les travaux d'affichages sont terminés... Je ne pense pas que HANDLE
> HDC
> ait été prévu pour être global... De plus appeler un MessageBox entre un
> Get
> / ReleaseDC me semble pas recommandable non plus...
>
> VB
>
>
Salut,
Je précise que ce HDC est obtenu sur un message WM_PAINT.
Tout ton dessin doit être effectué dans ce WM_PAINT sinon tu aura des
soucis
de rafraichissement.
Rémi
--
Rémi THOMAS
MVP Visual C++ .NET
http://www.pixel-technology.com/rthomas
Merci pour vos réponses.. le problème est résolu. Le LineTo donne une erreur car il est appelé par 2 threads différents au même moment. La valeur du HDC est correcte mais le Lineto plante si de HDC est entrai dêtre utilisé par qqch d'autre. De ce fait, j'en déduis que même si ce n'est pas courrent, on peut se permettre se stocker une variable globale HDC et l'utiliser jusqu'à la fin du programme car en synchronisant mes 2 threads, j'ai plus de prblms...
"Remi THOMAS" a écrit dans le message de news:4342b515$0$21307$
"Vincent Burel" écrivit > "Chevalley J.-C" wrote in message > news:4342a000$ >> Bonjour, >> Une application de CAO commence par initialiser une variable globale
HDC
>> my_hdc=GetDC( ). Ensuite, toutes les fonctions graphiques utilisent > my_hdc >> jusqu'à ce que l'application se ferme et fait un ReleaseDC(..) > > Normallement on obtient une DC quand on en a besoin , et on la relache
dès
> que les travaux d'affichages sont terminés... Je ne pense pas que HANDLE > HDC > ait été prévu pour être global... De plus appeler un MessageBox entre un > Get > / ReleaseDC me semble pas recommandable non plus... > > VB > >
Salut,
Je précise que ce HDC est obtenu sur un message WM_PAINT. Tout ton dessin doit être effectué dans ce WM_PAINT sinon tu aura des
soucis
de rafraichissement.
Rémi
-- Rémi THOMAS MVP Visual C++ .NET http://www.pixel-technology.com/rthomas
Vincent Burel
"Chevalley J.-C" wrote in message news:43438d42$
Merci pour vos réponses.. le problème est résolu. Le LineTo donne une erreur car il est appelé par 2 threads différents au même moment. La
valeur
du HDC est correcte mais le Lineto plante si de HDC est entrai dêtre
utilisé
par qqch d'autre. De ce fait, j'en déduis que même si ce n'est pas courrent, on peut se permettre se stocker une variable globale HDC et l'utiliser jusqu'à la
fin
du programme car en synchronisant mes 2 threads, j'ai plus de prblms...
Enfin bon, c'est un bricolage inutile et peu re-commandable. Rendez vous compte que vous synchronisez 2 thread pour palier à un mauvais usage des DC...
à méditer... VB
"Chevalley J.-C" <chevalley@antispam.ch> wrote in message
news:43438d42$1_1@news.tiscalinet.ch...
Merci pour vos réponses.. le problème est résolu. Le LineTo donne une
erreur car il est appelé par 2 threads différents au même moment. La
valeur
du HDC est correcte mais le Lineto plante si de HDC est entrai dêtre
utilisé
par qqch d'autre.
De ce fait, j'en déduis que même si ce n'est pas courrent, on peut se
permettre se stocker une variable globale HDC et l'utiliser jusqu'à la
fin
du programme car en synchronisant mes 2 threads, j'ai plus de prblms...
Enfin bon, c'est un bricolage inutile et peu re-commandable. Rendez vous
compte que vous synchronisez 2 thread pour palier à un mauvais usage des
DC...
Merci pour vos réponses.. le problème est résolu. Le LineTo donne une erreur car il est appelé par 2 threads différents au même moment. La
valeur
du HDC est correcte mais le Lineto plante si de HDC est entrai dêtre
utilisé
par qqch d'autre. De ce fait, j'en déduis que même si ce n'est pas courrent, on peut se permettre se stocker une variable globale HDC et l'utiliser jusqu'à la
fin
du programme car en synchronisant mes 2 threads, j'ai plus de prblms...
Enfin bon, c'est un bricolage inutile et peu re-commandable. Rendez vous compte que vous synchronisez 2 thread pour palier à un mauvais usage des DC...
à méditer... VB
Arnold McDonald
Vincent Burel wrote:
Je ne pense pas que HANDLE HDC ait été prévu pour être global... De plus appeler un MessageBox entre un Get / ReleaseDC me semble pas recommandable non plus...
Je n'ai pas franchement regardé son code, mais il est possible d'avoir des HDC globaux à des classes de fenêtres tout de même. Ne pas oublier le style CS_CLASSDC lors d'un CreateWindow().
-- Arnold McDonald (AMcD®)
http://arnold.mcdonald.free.fr/
Vincent Burel wrote:
Je ne pense
pas que HANDLE HDC ait été prévu pour être global... De plus appeler
un MessageBox entre un Get / ReleaseDC me semble pas recommandable
non plus...
Je n'ai pas franchement regardé son code, mais il est possible d'avoir des
HDC globaux à des classes de fenêtres tout de même. Ne pas oublier le style
CS_CLASSDC lors d'un CreateWindow().
Je ne pense pas que HANDLE HDC ait été prévu pour être global... De plus appeler un MessageBox entre un Get / ReleaseDC me semble pas recommandable non plus...
Je n'ai pas franchement regardé son code, mais il est possible d'avoir des HDC globaux à des classes de fenêtres tout de même. Ne pas oublier le style CS_CLASSDC lors d'un CreateWindow().