OVH Cloud OVH Cloud

contexte de peripherique demande d'info

5 réponses
Avatar
heinquoi
Bjr à tous,

Jes suis depuis quelques temps ds la programmation Win32 en c/c++ et j'ai
une question sur les contexte de peripheriques à laquelle je n'ai pas trouvé
de reponse correcte sur gogle.
voici donc:
lorsque par exemple je prends un HDC dans WM_CREATE faut le supprimer avant
le retour à la boucle des messages ou la fermeture du programme.
Ex :

case WM_CREATE:
DC=GetDC(hWnd);
SetupPixelFormat(DC);
RC=wglCreateContext(DC);
wglMakeCurrent(DC, RC);
InitGL();
ReleaseDC(hWnd,DC);
break;
ou bien cet autre code serais plus efficace:

case WM_CREATE:
DC=GetDC(hWnd);
SetupPixelFormat(DC);
RC=wglCreateContext(DC);
if (!RC) SendMessage (hWnd,WM_CLOSE,0,0);
wglMakeCurrent(DC, RC);
InitGL();
break;

case WM_DESTROY:
wglMakeCurrent(NULL, NULL);
if (RC) wglDeleteContext(RC);
ReleaseDC(hWnd,DC);
PostQuitMessage(0);

d'apres vous ?

5 réponses

Avatar
Christian ASTOR
heinquoi a écrit:


Jes suis depuis quelques temps ds la programmation Win32 en c/c++ et j'ai
une question sur les contexte de peripheriques à laquelle je n'ai pas trouvé
de reponse correcte sur gogle.
voici donc:
lorsque par exemple je prends un HDC dans WM_CREATE faut le supprimer avant
le retour à la boucle des messages ou la fermeture du programme.



Il faut simplement le supprimer dès que l'on n'en a plus besoin.
(ça consomme 1 objet GDI (nb limité, mais large), et la 16-bit GDI
DGROUP de la 32-bit GDI heap sous 9x)
Avatar
heinquoi
Cyrille Dupuydauby, m'a données ces infos sur le newsgroup microsoft:


Il y a 3 types de DCs associés à des fenêtres, le type dépend de la classe
de fenêtre (ATTENTION, classe au sens Windows, pas C++) :
- les privés : 1 DC par fenêtre de la classe. Rarement utilisé et cher, mais
performant, car il n'est pas nécessaire de le reparamétrer à chaque
utilisation. Cher parce chaque DC utilise 1,5% de la mémoire reservée au
GDI.
- de classe : 1 DC pour toutes les fenêtres de la classe. Pratique pour les
fenêtres types contrôles qui se dessinent toutes à l'identique.
- parent : le DC associé à la fenêtre est celui de la fenêtre parent. C'est
le style utilisé pour les contrôles systèmes.
- commun : le DC provient d'un lot commun de 5 DCs (par thread
théoriquement). Cas pour les fenêtres standards et les boîtes de dialogue.

La doc MS n'est pas clair sur le sujet, mais explique qu'il ne faut pas
vérouiller abusivement les DCs communs sous peines de poser des problèmes
aux autres applications (au moins sous Windows 95/98/Me).

Ma conclusion est : par défaut, il ne faut pas conserver le DC au delà du
traitement d'un message (ton cas 1). Si on veut absolument maximiser les
performances, il faut déclarer sa classe de fenêtre
(avec AfxRegisterClass) avec le style CS_OWNDC, a CONDITION de ne pas ouvrir
trop de fenêtre de ce type.
Dans l'idéal, travailler en mode classique (DC partagé) le temps de la mise
au point et passé au mode optimisé une fois cela terminé.

Cyrille Dupuydauby
Avatar
Christian ASTOR
heinquoi a écrit:

Cyrille Dupuydauby, m'a données ces infos sur le newsgroup microsoft:



Oui, je lis aussi ms...vc.
C'est la doc MSDN :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_3r77.asp
Et c'est pas bien de faire du multi-post...
Avatar
heinquoi
"Christian ASTOR" a écrit dans le message de
news:40977df6$0$316$
heinquoi a écrit:

> Cyrille Dupuydauby, m'a données ces infos sur le newsgroup microsoft:

Oui, je lis aussi ms...vc.
C'est la doc MSDN :



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_3r77.asp
Et c'est pas bien de faire du multi-post...



C'est vrai c'est pas bien mais malheureusement lorsque les newsgroups sont
moue, c'est le meilleur moyen que j'ai trouvé d'avoir une réponse surtout si
la question est au croisement de newsgroup ( programmation c++,
programmation windows)
Avatar
Cyrille Szymanski
On 2004-05-04, heinquoi <nospam* wrote:
Et c'est pas bien de faire du multi-post...



C'est vrai c'est pas bien mais malheureusement lorsque les newsgroups sont
moue, c'est le meilleur moyen que j'ai trouvé d'avoir une réponse surtout si
la question est au croisement de newsgroup ( programmation c++,
programmation windows)



Dans ce cas x-post. Quoi qu'il en soit, innonder les ng pour obtenir
plus de visibilité peut marcher à court terme mais c'est *très* mal
vu. Les habitués sauront beaucoup mieux que toi te rediriger vers le
bon groupe (fu2 adéquat) s'ils estiment que tu auras des réponses plus
pertinentes ailleurs.

--
cns