IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

[Débutant] Ne comprends rien à Device Context, GDI, Handler, etc.


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Points : 65
    Points
    65
    Par défaut [Débutant] Ne comprends rien à Device Context, GDI, Handler, etc.
    Salut à tous !

    J'ai appris la programmation en C++ sous linux il y a quelques années, et je suis chargé aujourd'hui de créer un programme en C++ sous Windows qui génère une vidéo à partir d'images bitmaps issues d'une animation OpenGL.

    J'en suis à la première étape : récupération du buffer grâce à glReadPixels et création de bitmaps en mémoire.

    J'ai fais connaissance de la librairie GDIplus de Windows avec laquelle j'essaye depuis plusieurs jours de me faire les dents en codant le plus simple des programmes : créer une image bitmap toute bidon (genre 10x10 avec un codage 24bits par pixels, sans aucune compression et toute bleue pour le moment) et l'enregistrer dans un nouveau fichier.

    Seulement voilà plusieurs jours que je galère avec "HBITMAP" et compagnie, que je vois des HDC, HMachin partout et que je n'y comprend pas la moindre chose.
    J'ai erré sur les forums du langage C parce que j'ai cru que HBITMAP était une vieille structure de l'ancien temps qui était toujours utilisée par les API que je trouvais ça et là sur le net, et je voulais quelques informations sur son utilisation.

    Manifestement, je n'avais rien compris. On m'a parlé de Handlers, de Device Context, d'API Windows, etc. Et on m'a envoyé ici.

    Apparemment, tout le monde sait ce qu'est un DC et comment l'utiliser. J'ai cherché dans la FAQ et dans les tutoriels le fonctionnement mais tout est toujours trop compliqué pour moi : il me faudrait un exemple basique.

    (De plus, lorsque j'essaye de compiler des sources avec Visual C++ Express 2005, il la plupart des symboles ne sont pas reconnus, ou ne passent pas l'édition des liens ! Je deviens fou )

    Tout ce que je demande, c'est juste un peu de documentation (le bon lien, celui que je cherche depuis trois heures en vain parce que je formule mal ma recherche google). Et si vous pouviez répondre simplement à ces quelques questions, cela m'aiderait à comprendre qui je suis, où je vais et pourquoi :

    1. Qu'est-ce qu'un handler au sens API Windows ?
    2. Qu'est-ce que le Device Context et à quoi sert-il ?
    3. Est-ce du C ou bien du C++ ? Si il s'agit de C++, alors pourquoi est-ce qu'on manipule des données "typedef struct" et non pas des classes ?
    4. Avez vous des exemples simples de code dont je pourrais m'inspirer pour commencer ?


    Comprenez bien que mon problème, c'est que je n'en ai jamais entendu parlé auparavant et tout ce que je trouve dans ce forum ou ailleurs s'adresse à des gens qui ont déjà un peu pratiqué et connaissent la logique : c'est ce qui me manque ...

    P.S. : je suis nouveau sur ce site, j'imagine que les ressources existent mais je ne sais pas comment les trouver.

    MERCI !

    En vous remerciant et désolé de vous poser ces questions de base sans avoir pu trouver les réponses par moi-même.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    1. C'est handle et pas handler. Il y a plusieurs sortes de handles, mais pour les objets GDI, considère ça comme un type opaque (local à un processus et non-partageable) qui identifie un objet GDI de manière unique.
    2. Un Device Context est l'objet GDI qui gère tout le dessin sur "quelque chose" : Ce "quelque chose" peut être l'écran, une imprimante ou un bitmap en mémoire.
      Toutes les opérations graphiques se font sur un HDC.
    3. Sous le capot, je ne sais pas ce que c'est. Mais GDI est utilisable en C, GDI+ semble être principalement un ensemble de classes C++.
    4. Pas d'exemple simple sous la main. Mais pour ton problème de Visual Express, n'oublie pas qu'il faut télécharger le Platform SDK séparément.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Voici un extrait d'exemple qui indique comment on dessine dans une fenêtre au moment où le système le demande. Attention, cela implique de déjà connaître la programmation fenêtrée sous Windows.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
    	LRESULT ret = 0;
     
    	switch(message) 
    	{
     
    	//La fenêtre reçoit ce message lorsqu'il faut la dessiner.
    	case WM_PAINT:
    		{
    		//Obtenir un HDC vers l'écran pour la fenêtre
    		PAINTSTRUCT ps;
    		HDC hdc = BeginPaint(hwnd, &ps); 
     
    		//Jouer avec
    		TextOut(hdc, 0, 0, "Hello World!", 15); 
     
    		//Terminé.
    		EndPaint(hwnd, &ps); 
    		}
    		break; 
     
    	// Autre messages, etc.
    	} 
    	return ret;
    }
    Pour dessiner dans un Bitmap, renseigne-toi sur les fonctions CreateCompatibleDC() et CreateDIBSection().

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Points : 65
    Points
    65
    Par défaut
    Merci de tes explications. J'avais seulement besoin d'un coup de pousse. Maintenant que j'ai compris que DC pouvait être utile pour "dessiner dans un bitmap" (en mémoire j'imagine ?), je sais de nouveau qui je suis

    Concernant l'édition de liens, je résoud mes problèmes en mettant des #pragma comment(lib, "....lib") un peu partout à chaque fois que je télécharge des sources sur le Net. Est-ce que c'est normal ou bien j'ai mal configuré quelque chose ?

    Ce qui m'étonne tant, c'est de n'en jamais avoir entendu parler auparavant et que d'un seul coup ça prenne autant d'importance.
    (j'ai commencé le C++ sous linux avec compilation en ligne de commande, puis avec des makefile... Peut-être que l'édition de liens manuelle me paraissait plus claire...)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    salut,
    je viens de lire le message de jomeo
    va voir sur le lien suivant
    http://texel3d.free.fr/win32/base3.htm

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Positionnement CSS, j'comprends rien !!
    Par guano dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 16/01/2006, 16h40
  2. error : does not name a type // je n'y comprends rien
    Par djobanaille dans le forum C++
    Réponses: 6
    Dernier message: 19/11/2005, 10h25
  3. Réponses: 2
    Dernier message: 18/03/2005, 08h32
  4. Les Devices Context ?
    Par nicolos dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/11/2004, 15h02
  5. [MX]boutons...j'y met du mien mais j'comprend rien!
    Par skapull dans le forum Flash
    Réponses: 5
    Dernier message: 25/03/2004, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo