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

MFC Discussion :

Rendu CDialog en mémoire (offscreen rendering)


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Points : 112
    Points
    112
    Par défaut Rendu CDialog en mémoire (offscreen rendering)
    Bonjour,

    dans une de mes applis, a la fin quand l'utilisateur quitte, on fait un snapshot de son travail et on lui met dans un rapport d'utilisation.

    Ça marche plutôt bien mais je suis obligé de demander a des classes héritées de CDialog de se mettre a jour selon une config de défaut pour le rendu final.

    Du coup l'écran "clignote" et ce n'est pas du plus bel effet pour un logiciel pro.

    J'aimerai donc faire le rendu du GUI en mémoire puis récupérer l'image ainsi produite pour la sauvegarder dans un fichier.

    Pour cela, il faut donc demander a un CDialog de s'afficher dans un DC que je lui précise.

    De la doc de CDialog, j'ai pu voir qu'il existait CWnd::Print, CWnd::PrintWindow

    Mes questions sont donc :
    1) est-ce ces fonctions peuvent être utilisées pour rendre dans un DC qui n'est pas un PrinterDC (d'après la signature oui, mais a l'utilisation ...)

    2) Mes CDialog "embarquent" d'autres composants visuels (des boxes, subclass de CWnd ; des View, etc.). Dois-je appeler le rendu "Print ou PrintWindow explicitement ou est-ce que c'est fait implicitement par le framework ???

    Merci de votre aide

    V

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    question bête ,pourquoi tu ne fait pas une copie directe écran dans un bitmap de la fenêtre ?
    comme dans la faq:
    http://cpp.developpez.com/faq/vc/?pa...PrintDialgoBox

  3. #3
    Membre régulier
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par farscape Voir le message
    salut,
    question bête ,pourquoi tu ne fait pas une copie directe écran dans un bitmap de la fenêtre ?
    Comme tu le dis, il s'agit de faire une copie d'écran dans un bmp (en fait, c'est ce que je fais actuellement). Ce qui implique que les divers composants aient été rendu à l'écran.

    Mais ce que j'aimerai c'est faire la même chose mais en rendant directement dans un contexte qui ne se voit pas afin que l'utilisateur ait l'impression de quitter l'appli sur les vues qu'il avait et qu'il ne voit pas les differents rendus qu'on fait en plus

    V

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    essaye cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HDC hdc = ::GetDC(hwnd);
    ::SendMessage(hwnd,WM_PRINT, (WPARAM)hdc,NULL); 
    //...
    ::ReleaseDC(hwnd, hdc);
    le hWnd étant celui de ta fenêtre.

  5. #5
    Membre régulier
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par farscape Voir le message
    essaye cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HDC hdc = ::GetDC(hwnd);
    ::SendMessage(hwnd,WM_PRINT, (WPARAM)hdc,NULL); 
    //...
    ::ReleaseDC(hwnd, hdc);
    le hWnd étant celui de ta fenêtre.
    ok j'essaierai et je donnerai le résultat ....

    Merci de ton aide

    V

  6. #6
    Membre régulier
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Points : 112
    Points
    112
    Par défaut
    bon ben bad news, ca marche pô

    mais, il est tout a fait possible, voire probable que j'ai fait une boulette !!

    Donc, dans le code envoyé par Farscape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    HDC hdc = ::GetDC(hwnd);
    ::SendMessage(hwnd,WM_PRINT, (WPARAM)hdc,NULL); 
    //...
    ::ReleaseDC(hwnd, hdc);
    je pense que WM_PRINT va déclencher l'appel a OnPrint mais qd j'ajoute ON_WM_PRINT dans la message map, ca ne compile pas (ON_WM_PRINT undeclared)

    Bref, je sais pas comment faire !

    Quelqu'un a une idée ???

    Pleaaaazzzzzeeee Help

    V

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ON_MESSAGE(WM_PRINT,OnPrint)
    ?

  8. #8
    Membre régulier
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Points : 112
    Points
    112
    Par défaut
    J'ai honte .....

    Mais bon, il était tard hier soir ..

    Je continue mes investigations et je vous tiens au jus ...

    V

  9. #9
    Membre régulier
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    je ressors ce 'vieux' fil car je viens de m'y remettre. J'ai trouvé sur le net cette solution.

    J'ai testé sur un dialog simple (3 boutons et un image) et ca marche nickel

    .... Si ca peut aider

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

Discussions similaires

  1. FBO : offscreen-rendering : limitation mémoire
    Par tyrahell dans le forum OpenGL
    Réponses: 1
    Dernier message: 12/01/2012, 19h40
  2. Rendu en pointeur mémoire.
    Par Julgood dans le forum OpenGL
    Réponses: 0
    Dernier message: 23/07/2009, 13h48
  3. java3d offscreen rendering - "failed to create drawable"
    Par bboulch dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 16/07/2009, 22h30
  4. p-buffer rendu offscreen
    Par chonos dans le forum OpenGL
    Réponses: 11
    Dernier message: 14/03/2006, 22h07
  5. Rendu OpenGL offscreen sous Windows
    Par rincevent_123 dans le forum OpenGL
    Réponses: 3
    Dernier message: 28/11/2003, 09h23

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